0%

看大佬的博客才能看的懂的详细wp

2025-11-21 20:00By
puppet
PHP伪协议正则绕过PHP

Problem: [BJDCTF 2020]ZJCTF,不过如此

思路

  • 解题大致思路

  • 这里看别人写的wp很潦草只说了使用/S*={$getflag()}&cmd=phpinfo();

    我找了好几个博客大佬的文章才找到一个说的详细且清楚的

  • https://www.cnblogs.com/l0vehzzz/p/16415836.html这里将这位博客大佬的文章网址放这里,大家自行观看

  • 我将其中的一部分复制过来仅供参考:

    这里的漏洞出在e模式下的preg_replace可以让第二个参数'替换字符串'当作代码执行,但是这里第二个参数是不可变的,但因为有这种特殊的情况,正则表达式模式或部分模式两边添加圆括号会将相关匹配存储到一个临时缓存区,并且从1开始排序,而strtolower("\1")正好表达的就是匹配区的第一个(\1=\1),从而我们如果匹配可以,则可以将函数实现。
    比如我们传入 ?.*={${phpinfo()}}

原句:preg_replace('/(' . re . ')/ei','strtolower("\\1")',str); 就变成preg_replace('/(' .* ')/ei','strtolower("\1")',{${phpinfo()}});

又因为$_GET传入首字母是非法字符时候会把 .(点号)改成下划线,因此得将.换成\s

所有payload:?\S*=${getFlag()}&cmd=system('ls /');

虽然还是不知道为什么要换成S但已经可以懂一部分了

EXP

  • 具体攻击代码
  • 
    

/next.php?\S*=${getflag()}&cmd=system('cat /flag');


总结

  • 对该题的考点总结
还没有人赞赏,快来当第一个赞赏的人吧!
  
© 著作权归作者所有

加载中...

加载失败
广告
×
评论区
添加新评论