WEB:mfw

背景知识

        Git泄露

        Githack使用

        命令执行漏洞

题目

WEB:mfw_第1张图片

WEB:mfw_第2张图片

WEB:mfw_第3张图片 这里页面里有Git,猜测是Git泄露

先用dirsearch扫一下

WEB:mfw_第4张图片

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

WEB:mfw_第5张图片

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

WEB:mfw_第6张图片

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

结果会自动保存

WEB:mfw_第7张图片

WEB:mfw_第8张图片 点进去先看一下flag这个文件,发现什么都没有

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

?php
 
if (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拼接后是否存在

 ​​​WEB:mfw_第9张图片

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

WEB:mfw_第10张图片

WEB:mfw_第11张图片 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

WEB:mfw_第12张图片

 参考学习链接:

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

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

你可能感兴趣的:(攻防世界,前端,web安全,网络安全)