声明
本次实验环境来源:深信服产业教育云平台
仅供学习交流使用,请勿用于非法用途,违者一律自行承担所有风险
实验原理
文件上传的客户端检测主要通过前端的JS代码获取文件后缀名进行验证,后端PHP代码没有对文件做任何检测,因此只需要绕过客户端检测。
客户端检测的绕过方法有三种:
1. 删除浏览器事件
2. 通过Burp Suite抓包修改后缀名
3. 伪造上传表单
实验一:删除浏览器事件
实验环境
操作机:Win10靶机:Apache + PHP
靶机:Apache + PHP(192.168.21.49)
实验步骤
靶机ip:192.168.21.49
1、登录操作机,打开浏览器,输入实验地址:http://ip/upfile/1/upload.html
2、在操作机上准备要上传的文件(脚本文件),比如新建info.php文件
3、点击“选择文件”按钮,选中要上传的文件
4、点击“submit”按钮,文件上传失败
5、根据提示,需要上传“jpg”的图片文件,点击“确定”返回上传页面,鼠标右击,点击“查看元素”.定位到文件域位置,可以看到表单调用了selectFile()函数
6、追溯到selectFile()函数,双击展开函数代码
7、从代码中可以分析出:表单调用JS代码的selectFile()函数,先获取上传文件的文件名,然后将文件名转换为小写,再通过substr函数截取文件后缀名(包括.)进行判断。所以只需要不调用该JS代码,删除浏览器事件,即οnsubmit=" "
8、点击“submit”按钮,再次上传文件,脚本文件成功上传
9、访问http://ip/upfile/1/upload/info.php,上传的脚本文件成功解析
删除浏览器事件实验总结:
通过实验掌握文件上传的客户端检测原理以及通过删除浏览器事件,绕过JS代码的限制
实验二:抓包修改后缀名
实验环境
操作机:Win10
靶机:Apache + PHP(192.168.22.37)
实验步骤
1.登录操作机,打开浏览器,输入实验地址:http://ip/upfile/1/upload.html
2.在操作机上准备要上传的文件(脚本文件),比如新建info.php文件
3.点击“选择文件”按钮,选中要上传的文件,点击“submit”按钮,文件上传失败
4、根据提示,需要上传“jpg”的图片文件,打开桌面的的“Burp”文件夹,双击“BURP.cmd”启动Burp Suite抓包工具,切换到“Proxy”代理模块的“Options”,查看Bp的代理
5、切换到浏览器,选择火狐插件中的代理(配置浏览器的的代理),与Bp的代理一致
6、客户端只能上传jpg文件,将脚本文件test.php更改后缀名为test.jpg,再选中文件
7、点击“submit”按钮,再次上传文件,Bp成功抓取数据包
8、将数据包中的后缀名再改为php,绕过客户端的检测
9、点击“Forward”,转发数据包,切换到浏览器,脚本文件成功上传
10、关闭浏览器代理,访问http://ip/upfile/1/upload/test.php,上传的脚本文件成功解析
抓包修改后缀名实验总结
掌握文件上传的客户端检测原理以及通过Burp Suite抓包工具抓取数据包,修改文件后缀名绕过JS代码的限制。
实验三:伪造上传表单
实验环境
操作机:Win10
靶机:Apache + PHP(192.168.22.101)
实验步骤
1、登录操作机,打开浏览器,输入实验地址:http://ip/upfile/1/upload.html
2、在操作机上准备要上传的文件(脚本文件),比如新建1.php文件
3、点击“选择文件”按钮,选中要上传的文件,点击“submit”按钮,文件上传失败
4、右击,点击“查看页面源代码”
5、可以看到表单调用了JS代码的selectFile()函数做过滤限制,并且表单提交到upload.php页面,所以伪造一个没有做任何过滤限制的表单同样提交到http://ip/upfile/1/upload.php即可,新建1.html文件
6、双击1.html文件,点击“浏览”,选择要上传的脚本文件1.php,点击“submit”按钮,再次上传文件,脚本文件成功上传
7、访问http://ip/upfile/1/upload/info.php,上传的脚本文件成功解析
伪造上传表单实验总结
掌握文件上传的客户端检测原理以及通过伪造一个没有做任何限制的表单,数据依然提交到http://ip/upfile/1/upload.php,绕过原来的JS代码的限制。