这种题一看就是文件上传漏洞
进行目录遍历一下,发现了/www.tar.gz,就一个压缩包,但是这个压缩包里便是这个网页的php代码备份,可以访问下载下来分析分析
对文件进行代码审计,发现漏洞在修改文件名的文件(rename.php)中
<?php
/**
* Created by PhpStorm.
* User: phithon
* Date: 15/10/14
* Time: 下午9:39
*/
require_once "common.inc.php";
if (isset($req['oldname']) && isset($req['newname'])) {
$result = $db->query("select * from `file` where `filename`='{$req['oldname']}'");
if ($result->num_rows > 0) {
$result = $result->fetch_assoc();
} else {
exit("old file doesn't exists!");
}
if ($result) {
$req['newname'] = basename($req['newname']);
$re = $db->query("update `file` set `filename`='{$req['newname']}', `oldname`='{$result['filename']}' where `fid`={$result['fid']}");
if (!$re) {
print_r($db->error);
exit;
}
$oldname = UPLOAD_DIR . $result["filename"] . $result["extension"];
$newname = UPLOAD_DIR . $req["newname"] . $result["extension"];
if (file_exists($oldname)) {
rename($oldname, $newname);
}
$url = "/" . $newname;
echo "Your file is rename, url:
<a href=\"{$url}\" target='_blank'>{$url}</a><br/>
<a href=\"/\">go back</a>";
}
}
?>
首先会查询之前上传的文件是否存在,如果返回不为空,则修改成对应的文件名。在修改文件名的过程中,是存在漏洞的。
上传一个空的文件,但是文件名一定要是’,extension='.jpg,因为原来的SQL语句不允许修改后缀名,对后缀名进行了限制,使用这个名字是为了是修改的文件后缀名为空
存入数据库的filename是',extension='
,extension是jpg
然后修改文件名
再上传一个名字为shell.jpg木嘛文件<?php @eval($_POST['aaa']) ?>
然后对shell.jpg.jpg进行改名
然后系统会把木嘛文件shell.jpg改名成shell.php
接下来就是用蚁剑进行连接了
便得到了
flag{bdda3c944a9e484eae50123afeeff56b}