做相册网站,WordPress go.php 代码,拼多多网上怎么开店,e盘网站建设文章目录 项目安装安装docker进入项目目录#xff1a;一键部署运行 靶场关卡1、前端JS验证如何判断是否为前端验证解法1#xff1a;抓包解法2#xff1a;禁用JS 2、.htaccess解法 3、MIME类型解法 4、文件头判断5、黑名单过滤-过滤不严-单次过滤为空格6、黑名单-过滤不严-系… 文章目录 项目安装安装docker进入项目目录一键部署运行 靶场关卡1、前端JS验证如何判断是否为前端验证解法1抓包解法2禁用JS 2、.htaccess解法 3、MIME类型解法 4、文件头判断5、黑名单过滤-过滤不严-单次过滤为空格6、黑名单-过滤不严-系统大小写敏感属性7、低版本GET-%00截断GET中插入截断00截断漏洞适用条件解法 8、低版本POST-%00截断POST中插入截断9、黑名单-过滤不严10、逻辑不严-条件竞争原理漏洞利用 11、二次渲染二次渲染绕过原理 12、函数缺陷原理利用条件漏洞利用 13、代码审计-数组绕过 文件上传靶场upload-labs-docker共有13关涵盖不同类型的上传漏洞适合新手使用可以使用docker直接部署
项目参考地址
https://github.com/sqlsec/upload-labs-docker
https://www.sqlsec.com/2020/10/upload.html
项目安装
安装docker
apt-get install docker # 安装docker
apt-get install docker-compose # 安装docker-compose手动下载项目压缩包并放入服务器git clone可能会比较慢
进入项目目录
cd upload-labs-docker一键部署运行
docker-compose up -d完成即可访问端口30001~30013分别对应13个关卡若要修改端口在docker-compose.yml文件中修改即可
靶场关卡
1、前端JS验证
在文件上传时网站程序是通过前端js代码去验证文件类型以控制上传的。
如何判断是否为前端验证
看源码抓包监听在文件上传时如果还未抓到包就已经提示文件类型不正确则大概率为前端校验了。 解法1抓包
将上传脚本文件改命为png再上传后抓包修改文件名回脚本后缀php即可 解法2禁用JS
因为是使用前端JS进行验证所以可以禁用JS直接进行上传。
2、.htaccess
htaccess文件是Apache服务中的一个配置文件它负责相关目录下的网页配置。
AddType application/x-httpd-php .png借助配置文件htaccess让服务器将.png类型的文件当作类型application/x-httpd-php来解析执行即php类型
.htaccess是修改解析配置的文件 中间件中将配置文件重新写入重新修改了解析规则实现将图片解析为后门的结果。 解法
1、抓包将文件名改为.htaccess文件内容改为AddType application/x-httpd-php .png上传 2、将脚本名改为.png格式上传即可连接脚本。
3、MIME类型 通过MIME类型来校验文件类型。即发送数据包中的Content-Type参数来检验。
所以可以通过抓包修改参数绕过。
解法
1、上传脚本时抓包修改Content-Type为合法类型如 image/png
2、将脚本名改为合法类型.png上传时修改文件名。 4、文件头判断 文件头开头的几个字节可表示文件类型文件头校验即校验文件头内容要绕过只需在文件头添加可通过类型字节并修改UA头中类型即可。 5、黑名单过滤-过滤不严-单次过滤为空格 如上代码第二行仅将第一行定义的后缀过滤了一次且是替换为空格并没有递归过滤这种过滤规则是不安全的
所以只要将文件后缀改为pphphp即可在第一次过滤掉php剩下的后缀仍为php
6、黑名单-过滤不严-系统大小写敏感属性 有些函数是大小写不敏感的所以换大小写就可绕过该种情况CTF题型考的多
该题中str_replace() 函数替换字符串中的一些字符区分大小写。
所以将后缀改大小写即可绕过若是windows系统大小写不敏感即可识别运行。 如果是windows操作系统大小写不敏感大写的文件后缀也识别运行。 Linux系统会区分大小写要么全大写要么全小写大小写交替不识别。 7、低版本GET-%00截断GET中插入截断 00截断漏洞
https://blog.csdn.net/weixin_44840696/article/details/90581104
适用条件
magic_quotes_gpcoffPHP版本小于5.3.4
在利用前会发包利用回显的版本判断是否可用。 现在基本都是php7版本以上所以基本没有该漏洞了。 解法
修改路径为/?road/var/www/html/upload/1.php%00名称为1.php%001.png会将文件保存地址拼接而%00会被URL编码为空字符造成截断。
截断后会生成1.php文件上传成功。 8、低版本POST-%00截断POST中插入截断
POST中内容不会自动解码所以需要手工解码一次即需要将%00手动解码为空字符或在HEX中修改字符为00
如下修改POST参数中上传路径并手工解码即可上传成功。 9、黑名单-过滤不严 过滤不严有的可执行后缀未过滤。
fuzz字典fuzzdb-master\attack\file-upload
brpsuite抓包使用intruder模块将后缀设为变量引入字典进行批量测试。
对比返回结果的长度可得结果。 由以上结果可知如php3等后缀并未进行黑名单过滤可绕过进行文件上传。
10、逻辑不严-条件竞争 该漏洞少
原理
先上传接收文件再进行判断处理若不通过则删除文件。即文件在服务器存储过逻辑不严谨。
条件竞争在文件上传到服务器还没有进行判断的时候访问到后门。
该漏洞是逻辑上的问题。
漏洞利用
不断的发包上传访问请求连接
上传不断发包请求不断发包
访问即创建代码文件出来。即访问了就自动触发将后门写入新文件的代码。
?php fputs(fopen(xiao.php,w),?php eval($_REQUEST[1]);?);?上传前设置好一直访问对应上传路径。在burpsuite的intruder模块中设置为no payload然后让他一直发就会一直循环发包访问将文件上传的包也批量发送。 在黑盒测试中需要先上传正常文件查看保存路径以及命名如果命名为随机命名则不能使用该思路了 漏洞判断黑盒中没办法判断白盒中可以审计判断黑盒中即使用该测试方法测不出来就是没有该漏洞
11、二次渲染
二次渲染
有些网站会对上传的文件进行二次渲染改变文件内容上传的带有后门代码的图片/文件会被更改而无法使用
绕过原理
先搞个正常图片上传导出渲染后的图片
使用二进制软件对比保留部分在保留部分添加后门代码
最后利用提示的文件包含执行图片后门代码 很多网站存在的和文件包含结合。 意义有时候上传了带有后门的文件如图片但是经过网站的二次渲染后后门代码没了没有保留需要了解二次渲染才能让上传的文件中保留代码段。
12、函数缺陷
原理
文件上传使用的函数有缺陷。
move_uploaded_file($temp_file, $img_path)当 $img_path 可控的时候还会忽略掉 $img_path 后面的 /.
所以将文件名改为shell.php/. 后加上/. 即可绕过黑名单。
利用条件
用到move_uploaded_file 函数保存的文件名可控可由自己指定文件名
漏洞利用
将文件名改为shell.php/. 后加上/. CTF常考。 13、代码审计-数组绕过
主要考察php代码审计代码中的逻辑缺陷 现在的文件上传漏洞都不明显一般比较容易发现的上传位置都没有上传漏洞在一些难发现的上传点产生文件上传漏洞的概率较大。