文件上传检测与绕过分为
客户端检测与绕过 和 服务端检测与绕过(比较重要)
一、客户端检测与绕过
客户端:也被称为用户端(前端),与服务器相对应,由于客户端对文件上传漏洞的防御是通过JS来实现的,所以客户端检测与绕过也可以叫做JS/前端检测与绕过
1、检测原理:
2、绕过方法
原理(前提):由于后端的PHP代码没有对文件做任何检测,所以只要绕过前端的JS检验就可以上传Webshell
(1)、删除浏览器事件
1、输入地址:http://ip/upfile/1/upload.html
2、在操作机上准备要上传的文件(脚本文件),比如新建info.php文件
3、点击“选择文件”按钮,选中要上传的文件
4、点击“submit”按钮,文件上传失败
5、根据提示,需要上传“jpg”的图片文件,点击“确定”返回上传页面,鼠标右击,点击“查看元素”
6、定位到文件域位置,可以看到表单调用了selectFile()函数
7、追溯到selectFile()函数,双击展开函数代码
8、从代码中可以分析出:表单调用JS代码的selectFile()函数,先获取上传文件的文件名,然后将文件名转换为小写,再通过substr函数截取文件后缀名(包括.)进行判断。所以只需要不调用该JS代码,删除浏览器事件,即οnsubmit=" "
9、点击“submit”按钮,再次上传文件,脚本文件成功上传
正在上传…重新上传取消
10、访问http://ip/upfile/1/upload/info.php,上传的脚本文件成功解析
然后就可以上传一句话木马的脚本,与中国菜刀、蚁剑等连用
(2)、利用Burpsuite抓包更改文件后缀名
1、登录地址:http://ip/upfile/1/upload.html
2、2、在操作机上准备要上传的文件(脚本文件),比如新建info.php文件
3、点击“选择文件”按钮,选中要上传的文件
4、点击“submit”按钮,文件上传失败
前面的四个步骤跟上面一样,就不截图啦
5、根据提示,需要上传“jpg”的图片文件,打开桌面的的“Burp”文件夹,双击“BURP.cmd”启动Burp Suite抓包工具
6、切换到“Proxy”代理模块的“Options”,查看Bp的代理
7、切换到浏览器,选择火狐插件中的代理(配置浏览器的的代理),与Bp的代理一致
8、客户端只能上传jpg文件,将脚本文件info.php更改后缀名为info.jpg,再选中文件
9、点击“submit”按钮,再次上传文件,Bp成功抓取数据包
10、将数据包中的后缀名再改为php,绕过客户端的检测
11、点击“Forward”,转发数据包,切换到浏览器,脚本文件成功上传
12、关闭浏览器代理
13、访问http://ip/upfile/1/upload/info.php,上传的脚本文件成功解析
(3)、构造上传表单
1、登录地址:http://ip/upfile/1/upload.html
2、在操作机上准备要上传的文件(脚本文件),比如新建info.php文件,内容跟上面一样
3、点击“选择文件”按钮,选中要上传的文件
4、点击“submit”按钮,文件上传失败
步骤还是跟上面一样,
5、右击,点击“查看页面源代码”
6、可以看到表单调用了JS代码的selectFile()函数做过滤限制,并且表单提交到upload.php页面,所以伪造一个没有做任何过滤限制的表单同样提交到http://ip/upfile/1/upload.php即可,新建1.html文件
也就是把selecFile()函数那一部分去掉,然后改一下上传的位置(下图划线的位置)
7、双击1.html文件
8、点击“浏览”,选择要上传的脚本文件info.php
9、点击“submit”按钮,再次上传文件,脚本文件成功上传
10、访问http://ip/upfile/1/upload/info.php,上传的脚本文件成功解析
这篇文章就先写到这里了!
服务端检测与绕过下篇文章写!