[SUCTF 2019]EasyWeb
标签:
0x00 常识点本题常识量巨大,把我给看傻了。。盯着网上师傅们的博客看了好久。。
常识点1结构不包罗数字和字母的webshell
思路来自p牛
参考链接:
https://www.leavesongs.com/PENETRATION/webshell-without-alphanum.html
php5中assert是一个函数,我们可以通过$f=‘assert‘;$f(...);这样的要领来动态执行任意代码
但php7中,assert不再是函数,酿成了一个语言布局(类似eval),不能再作为函数名动态执行代码,所以操作起来稍微庞大一点。但也无需过于担忧,好比我们操作file_put_contents函数,同样可以用来getshell
我们有三种要领来结构webshell:
1:异或。
在PHP中,两个字符串执行异或操纵以后,得到的还是一个字符串。所以,我们想得到a-z中某个字母,就找到某两个非字母、数字的字符,他们的异或功效是这个字母即可。
在PHP中,两个变量进行异或时,先会将字符串转换成ASCII值,再将ASCII值转换成二进制再进行异或,异或完,又将功效从二进制转换成了ASCII值,再将ASCII值转换成字符串。异或操纵有时也被用来交换两个变量的值
想得到我们想要的异或后的字符:
<?php $l = ""; $r = ""; $argv = str_split("_GET"); for($i=0;$i<count($argv);$i++) { for($j=0;$j<255;$j++) { $k = chr($j)^chr(255); \\dechex(255) = ff if($k == $argv[$i]){ if($j<16){ $l .= "%ff"; $r .= "%0" . dechex($j); continue; } $l .= "%ff"; $r .= "%" . dechex($j); continue; } } } echo "\{$l`$r\}"; ?>这里的话我们异或只能结构GET型,POST不行
然后共同${%ff%ff%ff%ff^%a0%b8%ba%ab}{%ff}();&ff=phpinfo,可以执行一些函数。抛开这道题,我们还可以: ?_=${%ff%ff%ff%ff^%a0%b8%ba%ab}{%ff}("type index.php");&%ff=system。
exp:
2:取反结构
和要领一有异曲同工之妙,独一差异就是,要领一使用的是位运算里的“异或”,要领二使用的是位运算里的“取反”。要领二操作的是UTF-8编码的某个汉字,并将此中某个字符取出来,好比‘和‘{2}的功效是"\x8c",其取反即为字母s
3:自增结构
参考链接
https://www.cnblogs.com/ECJTUACM-873284962/p/9433641.html
我们都知道,PHP是弱类型的语言,也就是说在PHP中我们可以不预先声明变量的类型,而直接声明一个变量并进行初始化或赋值操纵。正是由于PHP弱类型的这个特点,我们对PHP的变类型进行隐式的转换,并操作这个特点进行一些非通例的操纵。如将整型转换成字符串型,,将布尔型看成整型,或者将字符串看成函数来措置惩罚惩罚,下面我们来看一段代码:
<?php function B(){ echo "K0I"; } $_++; $__= "?" ^ "}"; $__(); ?>1:$_++;这行代码的意思是对变量名为"_"的变量进行自增操纵,在PHP中不决义的变量默认值为null,null==false==0,我们可以在不使用任何数字的情况下,通过对不决义变量的自增操纵来得到一个数字
2:$__="?" ^ "}";对字符"?"和"}"进行异或运算,得到功效B赋给变量名为"__"(两个下划线)的变量
3:$ __ ();通过上面的赋值操纵,变量$__的值为B,所以这行可以看作是B(),在PHP中,这行代码暗示挪用函数B,所以执行功效为Hello Angel_Kitty。在PHP中,我们可以将字符串看成函数来措置惩罚惩罚。
我们但愿使用这种后门创建一些可以绕过检测的并且对我们有用的字符串,如_POST", "system", "call_user_func_array",或者是任何我们需要的对象。
常识点2 文件上传绕过参考链接
https://www.dazhuanlan.com/2019/12/17/5df803f62c08a/
两个要注意的点是:
.htaccess上传的时候不能用GIF89a等文件头去绕过exif_imagetype,因为这样虽然能上传告成,但.htaccess文件无法生效。这时有两个步伐:
#define width 1337 #define height 1337 在.htaccess是注释符,所以.htaccess文件可以生效在.htaccess前添加x00x00x8ax39x8ax39(要在十六进制编纂器中添加,或者使用python的bytes类型)
x00x00x8ax39x8ax39 是wbmp文件的文件头
.htaccess中以0x00开头的同样也是注释符,所以不会影响.htaccess
这里的php是7.2的版本,无法使用
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/30743.html