[XDCTF 2015]filemanager
源码
https://github.com/CTFTraining/xdctf_2015_filemanager/tree/master/files
解题步骤
源码审计,upload.php
上传的地方不能注入,有个addslashes,估计有二次注入
在rename.php
看到update会将之前的语句重新插入到数据库中,可以进行二次注入。
0x01
上传一个文件名为',extension='',filename='cmd.jpg.jpg的文件。
然后在rename.php
old name输入:',extension='',filename='cmd.jpg
new name输入:cmd.jpg
由于该文件存在,所以result不为空,进入到update语句。执行
update file set filename=cmd.jpg, oldname='', extension='', filename=cmd.jpg where省略
然后数据库更新,到下面,oldname=/upload/',extension='',filename='cmd.jpg.jpg
newname=/upload/cmd.jpg.jpg
所以会将原来的',extension='',filename='cmd.jpg.jpg修改为cmd.jpg.jpg
但是,数据库中保存有文件名为cmd.jpg扩展名为空的记录,却没有cmd.jpg.jpg的记录
0x02
上传名为cmd.jpg的shell
在rename.php,newname=cmd.php,oldname=cmd.jpg
由于存在cmd.jpg,扩展名为空的记录,所以能进入update。
将cmd.jpg重新命名为cmd.php。
到下面,oldname=/upload/cmd.jpg,newname=/upload/cmd.php
所以能进行木马getshell
命令执行