一次全局变量造成的RCE
之前和一位师傅聊天,他给我了一个rce
找他要了份源码进行审计
到手的那一刻我是懵逼的,如下:
1.exec中写死了,不可控
2.cmd写死了,并且没有找到传参的地方
3.popen执行的cmd,在本文件中是写死的两个不可控的
那么是如何rce的?
我注意到了popen执行的cmd,虽然是写死的,但是在11和12行中的if else语句中,只有else if,并没有else,那么type假设不是1或2配合着全局变量即可造成rce
那么全局在哪呢?第二行include了一个json文件如下:
我们把这3,4行拎出来单独debug
如下:
下面均为cmd.php中的代码
开始debug,打上断点,访问
http://localhost/index.php?cmd=whoami
我们可以看到global中的get参数是我们的命令,也就是cmd
可以看到这里的cmd并没有被强行改变,依旧是whoami
进入到popen语句
最后在while语句中输出
成功RCE
当然,因为收的参数是request,所以post也可以造成RCE
当然除了这个,这套源码还有很多很多的rce
我们可以看到这里popen执行了cmd,而cmd中有start参数
我们在当前文件并没有找到start赋值
所以直接传参即可
qq.php?action=file&start=|echo '<?php phpinfo();?>' > 2.php||
成功RCE
后面我看了一下,漏洞点太多了,就不一一赘述了,没有什么技术含量,当是休闲之余放松了