目录
LOW
通关路径
源码分析
MEDIUM
通关路径
源码分析
HIGH
通关路径
源码分析
IMPOSSIBLE
源码分析
总结
1、新建个sh.php文件,内容如下:
2、尝试直接上传,上传成功,给出了文件保存路径。
看来这关一点防御都没有,任意文件可上传。
3、用蚁剑连接之前可以先在浏览器中试一下文件在不在,能不能被当作php解析。
那一般如果404就是文件不存在,如果php代码以字符串显示了就是不能解析用户上传的php。这两种情况下也就不用搬出蚁剑了。
4、用蚁剑连接一句话木马
果然是没有防御的,没有对上传的文件进行任何过滤。
三个主要操作:
(1)全局数组$_FILES用来获取通过 POST 方法上传文件的相关信息。详见PHP 文件上传
(2)basename函数返回路径中的文件名部分
(3)move_uploaded_file函数将上传的文件保存到新位置
1、直接上传上一关中的sh.php,会提示上传失败,只能上传JPEG和PNG格式的文件
2、将上一步中的文件后缀名改成.png,上传sh.png文件并用burpsuite抓包,将抓到的报文右键send to repeater
3、在repeater中修改filename参数的值,从sh.png修改为sh.php,点send,从response中可以看到文件上传成功,并返回了保存路径。
4、蚁剑连接一句话木马
这关增加了MIME校验,如下图高亮部分所示,只允许上传MIME类型(Content-Type请求头)为image/jpeg或image/png的文件。
1、上一关的sh.png也传不上去了
2、试了一张百度上下载的正常的图片是能上传的,所以这关估计还检查了magic number。
3、图片里面加个一句话木马试试:
16进制形式查看并找个地方添加一句话木马
可以上传成功。
那么就剩下修改文件名了。
4、上传包含一句话木马的文件bai-ma.jpeg的时候,burpsuite抓包,在proxy---http history中找到这个http请求,并send to intruder
5、这里我打算先用爆破的方式来试试这关是否是黑名单过滤。
将文件后缀设置成待爆破参数
可以把文件名后缀做成一个尝试黑名单绕过的字典,可以包含各种php后缀变种,各种中间件、系统解析漏洞相关的后缀。
注意高亮部分不要勾选
爆破结果根据Length进行排序,从结果看,所有后缀都上传失败。很可能是文件后缀白名单过滤。
6、尝试了00截断,但是没有成功,网上查了很多资料,最终在这个博文里面找到了原因:
【文件上传】00截断详解(见步骤4和5)
本关应该是不适合用00截断的,即便满足以下两个条件也不行:
php版本小于5.3.4
php的magic_quotes_gpc=off(php中magic_quotes_gpc函数详解)
因为本关提交的数据中并没有文件保存路径,对filename进行00截断后,用$_FILES[ 'uploaded' ][ 'name' ]获取到的文件名已经是00截断后的了,所以白名单校验不通过。
而根据上述链接,如果表单中有文件保存路径,则是通过$_POST获取的,就可以进行00截断
(具体为什么$_FILES[ 'uploaded' ][ 'name' ]获取到的文件名是00截断后的,暂时没有找到原理性依据,如果有哪位大神知道,请赐教)
7、官方给的help中说这关要和其他漏洞,比如文件包含结合,下面试了是可以的。
我用的是蚁剑, 这里似乎要添加cookie头才能成功连上一句话木马。
(不添加的话,测试连接时会出现返回数据为空的警告。至于为什么前面两关不用添加就能连接一句话木马,应该是因为前两关上传的文件不需要登录就可以访问,但存在文件包含漏洞的这个文件必须要登录访问)
和猜测的一样,如高亮部分所示这关一方面有检测到实际文件类型,另一方面对上传的文件名后缀也进行了白名单过滤。
主要函数:
(1)getimagesize函数用于获取图像信息(详见php getimagesize 函数 - 获取图像信息)
(2)strrpos函数用于查找子字符串在字符串中最后一次出现的位置(详见PHP strrpos() 函数)
(3)substr函数返回字符串的一部分
(4)strtolower函数把字符串转换成小写
就文件上传而言,impossible不但对文件后缀名和MIME进行了白名单过滤,还去除了上传的文件中的php代码,并给上传的文件重命名(虽然这个重命名展示出来了,对安全没有什么卵用)。
主要函数:
(1)uniqid函数基于以微秒计的当前时间,生成一个唯一的 ID
(2)md5函数计算字符串的 MD5 散列。
(3)ini_get函数获取php.ini里变量值
(4)sys_get_temp_dir函数返回 PHP 储存临时文件的默认目录的路径
(5)imagecreatefromjpeg函数以及imagecreatefrompng函数由文件或 URL 创建一个新图象
(6)imagejpeg函数以及imagepng函数输出图象到浏览器或文件
(7)getchwd函数返回当前工作目录
(8)rename函数重命名文件或目录
文件上传漏洞网上有很多挺全的总结了,比如文件上传漏洞 (上传知识点、题型总结大全-upload靶场全解)和文件上传绕过总结。
这里我就简单说一下。
文件上传常见的可绕过限制和绕过方法见下图
比较全的文件上传靶场应该是upload-labs,可以试试。