0%

文件上传漏洞实战之DVWA

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图片,最后删除原来我们上传的图片,这样保证了图片中插入的恶意代码被过滤掉