File Uploads(Low)
分析及测试
直接尝试上传一句话马上去
结果
上传成功,并且有路径回显。直接根据回显的路径使用菜刀连接
源代码
这里没有对上传的文件类型做限制,单独对文件是否能移动到上传文件夹做了判断
File Uploads(Medium)
分析及测试
还是先上传php,发现上传失败,提示只能上传jpeg或png
burp抓下包看看
尝试改请求包中的content-type骗过判断,让它认为我的php为图片(不在repeater里试了,直接改)
结果
上传成功,使用菜刀连接:连接成功
源代码
这里看到对于图片的类型(type)做了判断,是否为image,且大小是否小于100000,是则直接上传
File Uploads(High)
分析及测试
直接用medium的方法改包看看,结果发现这个方法行不通了
这时候想到既然php没法上传,那就真上传一个图片,把php代码想办法塞进图片里,再使用伪协议构造一个payload,只要图片内容能被解析出来就能执行图片中的一句话马
结果
以记事本方式打开demo.png,可以看到一句话马被嵌到了图片的最后一行
上传demo.png,可以被正常上传上去
尝试检查前端源代码,发现在36行处出现了可能出现文件包含的页面,根据这个路径构造payload
菜刀也能连接到
源代码
使用了strrpos函数,判断文件名的后缀是否为jpg,png和jpeg,getimagesize函数会读取图片的文件头,包括图片宽高等信息,如果没有这些信息则报错
File Uploads(Impossible)
源代码
除了以上所有等级的过滤,还加入了imagecreatefromjpeg函数和imagejpeg函数,imagecreatefromjpeg函数用于由文件或 URL 创建一个新图象,在这里也就是通过上传的图片创建一个新图像,再使用imagejpeg函数将imagecreatefromjpeg创建的图像变为jpeg图片,最后删除原来我们上传的图片,这样保证了图片中插入的恶意代码被过滤掉