首页
论坛
课程
招聘
[原创][PHP]死亡exit绕过
2022-1-25 16:18 4805

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

2022-1-25 16:18
4805

源码:

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

1.string.strip_tags

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

结果为:

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

 

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

结果为:

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

1
txt=PD9waHAgcGhwaW5mbygpOyA/Pg==&filename=php://filter/write=string.strip_tags|convert.base64-decode/resource=2.php

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

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

2.rot13

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

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

1
txt=<?cuc cucvasb(); ?>&filename=php://filter/write=string.rot13/resource=3.php

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

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


 

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


看雪招聘平台创建简历并且简历完整度达到90%及以上可获得500看雪币~

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