攻防世界---mfw

知识点1:git泄露

知识点2:assert函数的命令执行漏洞

解题

步骤一

先进行目录扫描,发现git泄露

攻防世界---mfw_第1张图片

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

攻防世界---mfw_第2张图片

 进入dist文件中查看

攻防世界---mfw_第3张图片

一个一个查看后,发现了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'); //

 攻防世界---mfw_第4张图片

需要注意的是,php语句结尾需要有分号

接下来就是正常的命令执行漏洞

 

补充

php函数中有命令执行漏洞的函数,最基本的原理就是括号内的参数会被当成php代码执行,然后可以通过 system()函数来执行命令行

1.eval() 最常见的

2.assert() 如果函数中嵌套了函数,可以采用or来进行绕过(如上面的strops函数)

3.preg_replace() ,/e模式具有命令执行的漏洞

攻防世界----ics-05_jjj34的博客-CSDN博客

你可能感兴趣的:(ctf相关,php,开发语言)