首页
社区
课程
招聘
[原创][PHP]死亡exit绕过
发表于: 2022-1-25 16:18 6842

[原创][PHP]死亡exit绕过

2022-1-25 16:18
6842

源码:

无论你写入什么都会被插入一句<?php exit; ?>来强制结束掉PHP的运行
假如正常尝试写入webshell

结果为:

如果正常的插入方法则会被插入结束语句,导致无法运行
此时我们可以利用伪协议php://filter来进行绕过

(虽然他说了7.3就废弃了,但是我7.4还是可以复现成功)
利用该过滤器可以去除文件中的PHP标签,如下所示

结果为:

成功去除了exit;
但是我们直接写入webshell,会导致也被去除掉(因为也是PHP语句吼)
此时我们可以使用base64加密的方法传入, 利用filter可以接入多个过滤器
Payload为:

在使用string.strip_tags的同时使用convert.base64-decode(这里要注意两个过滤器的先后顺序,因为filter索引过滤器的时候是从左到右,如果位置调换了,也会导致无法写入)
结果为:

可以看到exit成功被去除,并且写入了我们想要写入的语句

首先我们需要知道rot13是什么

了解到rot13转换之后,我们可以get到,他只会把字母替换,而其他的数字、符号不受影响
那么我们就可以这样来想,破坏掉exit来插入我们想要执行的语句
payload为:

<?cuc cucvasb(); ?><?php phpinfo(); ?>的rot13转换
看一下结果:

可以看到,原本的exit已经被破坏,而我们想要插入的语句插入成功。

先记录这么多,后续会接着填坑QAQ

<?php
$content = '<?php exit; ?>';
$content .= $_POST['txt'];
file_put_contents($_POST['filename'],$content);
?>
<?php
$content = '<?php exit; ?>';
$content .= $_POST['txt'];

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 1
支持
分享
最新回复 (2)
雪    币: 228
活跃值: (134)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
是一个好思路跟方法学习了。不过实际应用中,可以控制输出这个文件名的,实太是太少了。
基本上随是时间随机生成的文件名。或者是以TXT LOG 结尾的。
2022-1-25 17:32
0
雪    币: 8
活跃值: (4334)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
3
hc3w 是一个好思路跟方法学习了。不过实际应用中,可以控制输出这个文件名的,实太是太少了。 基本上随是时间随机生成的文件名。或者是以TXT LOG 结尾的。
学到了! 谢谢老哥
2022-1-31 09:33
0
游客
登录 | 注册 方可回帖
返回
//