目录
介绍
分类
上传-javascript检测
简介
原理
攻击
防御
上传-MIME检测
简介
攻击
防御
上传-后端文件格式检测
简介
原理
攻击
防御
上传-文件截断
简介
攻击
解析-Apache文件解析
解析-IIS文件解析
解析-PHP CGI路径解析
绕过
防御
介绍
文件上传漏洞是指用户上传了一个可执行的脚本文件(php、jsp、xml、cer等文件),而WEB系统没有进行检测或逻辑做的不够安全。文件上传功能本身没有问题,问题在于上传后如何处理及解释文件。
分类
根据简介,主要分为上传(客户端)、解析(服务端)两大类。
上传-javascript检测
简介
通过js代码,对文件后缀进行判断。
原理
一般使用白名单或黑名单的方式,判断文件后缀,根据后缀决定用户是否上传。
攻击
Firebug插件删除判断函数
使用靶机pikachu做例子,直接通过F12修改。
tupian.php
<?php echo phpinfo(); ?>
js检测到不符合要求
F12查看代码
checkFileExt
客户端通过onchange实践的checkFileExt函数进行检测,我们删除掉调用这个函数的部分。
删除后
我们再次上传tupian.php
文件上传成功
可以看路径,我们修改上方的url,进行访问。
代码已运行
可以看到代码已经运行。
中间人攻击-burpsuite拦截
文件名符合规则,使用burpsuite拦截后,修改文件后缀即可。方法类似下方MIME攻击
防御
上传无法防御,可以进行文件重命名。
上传-MIME检测
简介
js的检测基本没有了,开始使用后端代码进行检测,虽然进行MIME检测是使用的后端代码,但是,依然是从客户端获取的,可以从客户端修改,我还是归于上传这一类了。
简单来说,在请求头中Content-Type:type/subtype来表明类型,常见的有
text/plain
text/html
image/jpeg
image/jpg
image/png
audio/mpeg
audio/ogg
audio/*
video/mp4
application/*
application/json
application/javascript
application/ecmascript
application/octet-stream
攻击
中间人攻击-burpsuite拦截
burpsuite拦截
修改Content-Type
Forward
可以看到发送过去了,后序验证同上,不再重复截图。
防御
上传无法防御,可以进行文件重命名。
上传-后端文件格式检测
简介
一些后端代码含有一些函数,能够判断文件类型,获取文件的一些信息。以php为例,php的getimagesize函数可以获取图像的一些信息,如果不是图像,那么无法获取信息,就会报错。
有的站点使用文件头来检测文件类型,这种检查可以在Shell前加入对应的字节以绕过检查。几种常见的文件类型的头字节如下表所示
类型 | 二进制值 |
---|---|
JPG | FF D8 FF E0 00 10 4A 46 49 46 |
GIF | 47 49 46 38 39 61 |
PNG | 89 50 4E 47 |
TIF | 49 49 2A 00 |
BMP | 42 4D |
原理
如果你学过图像相关的课程,比如信息隐藏这门课,会使用Matlab读取图像,进行信息隐藏,你就会知道图像的一些格式,符合格式的话就是那个类型的文件,一般是头部的一些字节。我们通过将恶意代码前面添加其他类型文件的头部就可以伪造成另一个类型,进而绕过检测。
攻击
我们修改tupian.php为tupian.php.jpg,进行上传。
图片格式检测
可以看到,图片没有办法上传,虽然后缀对,但是内部是不正确的。
我们使用Linux中的xxd或od命令来查看.PNG或.png图片的信息(博主虽然是在Windows中,但是使用的是cygwin)。
2.PNG
ca.png
可以看到文件前面是一样的。
使用cmd命令 copy /b CA.png + tupian.php tupian.png
生成新图片
目录下会生成新图片tupian.png,而且符合png格式,但是在图片后面是php代码。
上传成功
打开
图片上传成功,但是打开后还是图片。
我们再使用之前的文件包含漏洞就可以了,注意url。
php代码运行成功
php由于历史原因,部分解释器可能支持符合正则 /ph(p[2-7]?|t(ml)?)/ 的后缀,如 php / php5 / pht / phtml / shtml / pwml / phtm 等 可在禁止上传php文件时测试该类型。
jsp引擎则可能会解析 jspx
/ jspf
/ jspa
/ jsw
/ jsv
/ jtml
等后缀
asp支持 asa
/ asax
/ cer
/ cdx
/ aspx
/ ascx
/ ashx
/ asmx
/ asp{80-90}
等后缀。
除了这些绕过,其他的后缀同样可能带来问题,如 vbs
/ asis
/ sh
/ reg
/ cgi
/ exe
/ dll
/ com
/ bat
/ pl
/ cfc
/ cfm
/ ini
等。
防御
若没有文件包含漏洞,问题不大,否则无法防御。
上传-文件截断
简介
php %00截断,由于00代表结束符,00后面的所有字符都会删除掉,发生在php5.3.4之前版本,php的magic_quotes_gpc为OFF状态。
攻击
php版本调整为5.3.29
参数设置
正好被水印挡住了,挡住的部分就是参数magic_quotes_gpc。
解析-Apache文件解析
一个文件可以有多个后缀,如:lady_killer.txt.png.mp3,在Windows中自然是认为这是mp3文件,也就是说最后的后缀生效。但是,Apache却是从右向左读后缀,不认识的跳过继续读,前面的文件就认为是图片,如果没有配置mp3后缀的话。因此,对于
tupian.php.xxx就会认为这是php文件。类型的定义在Apache/conf/mime.types中
解析-IIS文件解析
IIS 6也出现截断攻击,截断字符为";"。由于phpStudy没有这个版本,太老了,不想去实现了,知道下就行了。
解析-PHP CGI路径解析
没找到了2010年的cve,可能是提交的bug吧,就是路径为evil.jpg/1.php时,Nginx会把evil.jpg当做php文件交给php运行。
Nginx + PHP CGI的一个可能的安全漏洞 - 风雪之隅
绕过
前端绕过
通过抓包提交,绕过前端js检测,删除对js验证脚本的调用,使其不能对上传的文件类型做检测,从而达到绕过
黑名单绕过
使用更多后缀
jsp jspx jspf
asp asa cer aspx
php php3 php4 pht phtml
后缀大小写绕过
由于windows不区分大小写,后端校验未使用strtolower等函数将文件后缀大小写统一处理,导致黑名单不完整而绕过
1.pHP
后缀双写绕过
后端过滤时,使用了preg_replace等替换函数将php关键字替换为空,但是却没有循环替换,导致前面的ph和后面的p重新组合成php,从而导致绕过
1.phphpp
空格绕过
由于Windows处理文件时,会自动删除文件后缀带有的空格和点,从而导致绕过。
1.php
后面有空格
::$DATA绕过
Windows的一种流文件格式,上传这种格式流文件格式的同时会在相同目录下生成一个含有相同内容宿主文件
MIME绕过
修改Content-Type中为允许的类型,以下为常见MIME类型
- GIF image/gif
- JPG image/pjpeg image/jpeg
- ZIP application/x-compressed application/octet-stream
- JSP text/html
- EXE application/octet-stream
%00截断绕过
PHP<5.3.29,且GPC关闭时,%00在URL中充当结束符,当解析到%00时,解析器就会认为字符串已经读取完毕
1.php%00a.jpg
十六进制的0x00也可
文件头检查绕过
例如,仅允许上传图片,通过文件头来判断,这时可以将恶意代码拼接到图片后面
条件竞争绕过
有的文件上传功能是先将文件下载到服务器,如果是有问题的就删除,我们可以利用这一逻辑漏洞,不断上传文件,即可访问。
可查看文章CTF-【NSCTF 2015】WEB11 条件竞争
解析绕过
解析漏洞
服务 | 举例 | 原理 |
---|---|---|
IIS6.0 |
|
test.asp/1.jpg
test.asp;1.jpg
|
*.asp目录下的所有文件都会当做asp脚本执行
文件被截断,被解析为test.asp
|
|
IIS7.0和IIS7.5
|
a.jpg/a.php
|
php配置问题:一个文件路径后面加上/xx.php会将原来的文件解析为php文件
|
|
Apache(1.x、2.x)
|
1.php.xx1.xx2
|
apache是从右往左解析,遇到不认识的扩展名则跳过,直到遇到认识的php为止
|
| Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7 |
test.jpg/1.php
|
fastcgi在处理’.php’文件时发现文件并不存在,这时php.ini配置文件中cgi.fix_pathinfo=1 发挥作用,这项配置用于修复路径,如果当前路径不存在则采用上层路径。为此这里交由fastcgi处理的文件就变成了’/test.jpg’。
最重要的一点是php-fpm.conf中的security.limit_extensions配置项限制了fastcgi解析文件的类型(即指定什么类型的文件当做代码解析),此项设置为空的时候才允许fastcgi将’.jpg’等文件当做代码解析。
|
防御
1.文件类型判断
后缀白名单,MIME类型判断结合
2.文件重命名
3.文件上传目录设置为不可执行
更多内容查看:网络安全-自学笔记
喜欢本文的请动动小手点个赞,收藏一下,有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。如果您感觉有所收获,自愿打赏,可选择支付宝18833895206(小于),您的支持是我不断更新的动力。
本文转自 https://blog.csdn.net/lady_killer9/article/details/107997034,如有侵权,请联系删除。
目录
介绍
分类
上传-javascript检测
简介
原理
攻击
防御
上传-MIME检测
简介
攻击
防御
上传-后端文件格式检测
简介
原理
攻击
防御
上传-文件截断
简介
攻击
解析-Apache文件解析
解析-IIS文件解析
解析-PHP CGI路径解析
绕过
防御
介绍
文件上传漏洞是指用户上传了一个可执行的脚本文件(php、jsp、xml、cer等文件),而WEB系统没有进行检测或逻辑做的不够安全。文件上传功能本身没有问题,问题在于上传后如何处理及解释文件。
分类
根据简介,主要分为上传(客户端)、解析(服务端)两大类。
上传-javascript检测
简介
通过js代码,对文件后缀进行判断。
原理
一般使用白名单或黑名单的方式,判断文件后缀,根据后缀决定用户是否上传。
攻击
Firebug插件删除判断函数
使用靶机pikachu做例子,直接通过F12修改。
tupian.php
<?php echo phpinfo(); ?>
js检测到不符合要求
F12查看代码
checkFileExt
客户端通过onchange实践的checkFileExt函数进行检测,我们删除掉调用这个函数的部分。
删除后
我们再次上传tupian.php
文件上传成功
可以看路径,我们修改上方的url,进行访问。
代码已运行
可以看到代码已经运行。
中间人攻击-burpsuite拦截
文件名符合规则,使用burpsuite拦截后,修改文件后缀即可。方法类似下方MIME攻击
防御
上传无法防御,可以进行文件重命名。
上传-MIME检测
简介
js的检测基本没有了,开始使用后端代码进行检测,虽然进行MIME检测是使用的后端代码,但是,依然是从客户端获取的,可以从客户端修改,我还是归于上传这一类了。
简单来说,在请求头中Content-Type:type/subtype来表明类型,常见的有
text/plain
text/html
image/jpeg
image/jpg
image/png
audio/mpeg
audio/ogg
audio/*
video/mp4
application/*
application/json
application/javascript
application/ecmascript
application/octet-stream
攻击
中间人攻击-burpsuite拦截
burpsuite拦截
修改Content-Type
Forward
可以看到发送过去了,后序验证同上,不再重复截图。
防御
上传无法防御,可以进行文件重命名。
上传-后端文件格式检测
简介
一些后端代码含有一些函数,能够判断文件类型,获取文件的一些信息。以php为例,php的getimagesize函数可以获取图像的一些信息,如果不是图像,那么无法获取信息,就会报错。
有的站点使用文件头来检测文件类型,这种检查可以在Shell前加入对应的字节以绕过检查。几种常见的文件类型的头字节如下表所示
类型 | 二进制值 |
---|---|
JPG | FF D8 FF E0 00 10 4A 46 49 46 |
GIF | 47 49 46 38 39 61 |
PNG | 89 50 4E 47 |
TIF | 49 49 2A 00 |
BMP | 42 4D |
原理
如果你学过图像相关的课程,比如信息隐藏这门课,会使用Matlab读取图像,进行信息隐藏,你就会知道图像的一些格式,符合格式的话就是那个类型的文件,一般是头部的一些字节。我们通过将恶意代码前面添加其他类型文件的头部就可以伪造成另一个类型,进而绕过检测。
攻击
我们修改tupian.php为tupian.php.jpg,进行上传。
图片格式检测
可以看到,图片没有办法上传,虽然后缀对,但是内部是不正确的。
我们使用Linux中的xxd或od命令来查看.PNG或.png图片的信息(博主虽然是在Windows中,但是使用的是cygwin)。
2.PNG
ca.png
可以看到文件前面是一样的。
使用cmd命令 copy /b CA.png + tupian.php tupian.png
生成新图片
目录下会生成新图片tupian.png,而且符合png格式,但是在图片后面是php代码。
上传成功
打开
图片上传成功,但是打开后还是图片。
我们再使用之前的文件包含漏洞就可以了,注意url。
php代码运行成功
php由于历史原因,部分解释器可能支持符合正则 /ph(p[2-7]?|t(ml)?)/ 的后缀,如 php / php5 / pht / phtml / shtml / pwml / phtm 等 可在禁止上传php文件时测试该类型。
jsp引擎则可能会解析 jspx
/ jspf
/ jspa
/ jsw
/ jsv
/ jtml
等后缀
asp支持 asa
/ asax
/ cer
/ cdx
/ aspx
/ ascx
/ ashx
/ asmx
/ asp{80-90}
等后缀。
除了这些绕过,其他的后缀同样可能带来问题,如 vbs
/ asis
/ sh
/ reg
/ cgi
/ exe
/ dll
/ com
/ bat
/ pl
/ cfc
/ cfm
/ ini
等。
防御
若没有文件包含漏洞,问题不大,否则无法防御。
上传-文件截断
简介
php %00截断,由于00代表结束符,00后面的所有字符都会删除掉,发生在php5.3.4之前版本,php的magic_quotes_gpc为OFF状态。
攻击
php版本调整为5.3.29
参数设置
正好被水印挡住了,挡住的部分就是参数magic_quotes_gpc。
解析-Apache文件解析
一个文件可以有多个后缀,如:lady_killer.txt.png.mp3,在Windows中自然是认为这是mp3文件,也就是说最后的后缀生效。但是,Apache却是从右向左读后缀,不认识的跳过继续读,前面的文件就认为是图片,如果没有配置mp3后缀的话。因此,对于
tupian.php.xxx就会认为这是php文件。类型的定义在Apache/conf/mime.types中
解析-IIS文件解析
IIS 6也出现截断攻击,截断字符为";"。由于phpStudy没有这个版本,太老了,不想去实现了,知道下就行了。
解析-PHP CGI路径解析
没找到了2010年的cve,可能是提交的bug吧,就是路径为evil.jpg/1.php时,Nginx会把evil.jpg当做php文件交给php运行。
Nginx + PHP CGI的一个可能的安全漏洞 - 风雪之隅
绕过
前端绕过
通过抓包提交,绕过前端js检测,删除对js验证脚本的调用,使其不能对上传的文件类型做检测,从而达到绕过
黑名单绕过
使用更多后缀
jsp jspx jspf
asp asa cer aspx
php php3 php4 pht phtml
后缀大小写绕过
由于windows不区分大小写,后端校验未使用strtolower等函数将文件后缀大小写统一处理,导致黑名单不完整而绕过
1.pHP
后缀双写绕过
后端过滤时,使用了preg_replace等替换函数将php关键字替换为空,但是却没有循环替换,导致前面的ph和后面的p重新组合成php,从而导致绕过
1.phphpp
空格绕过
由于Windows处理文件时,会自动删除文件后缀带有的空格和点,从而导致绕过。
1.php
后面有空格
::$DATA绕过
Windows的一种流文件格式,上传这种格式流文件格式的同时会在相同目录下生成一个含有相同内容宿主文件
MIME绕过
修改Content-Type中为允许的类型,以下为常见MIME类型
- GIF image/gif
- JPG image/pjpeg image/jpeg
- ZIP application/x-compressed application/octet-stream
- JSP text/html
- EXE application/octet-stream
%00截断绕过
PHP<5.3.29,且GPC关闭时,%00在URL中充当结束符,当解析到%00时,解析器就会认为字符串已经读取完毕
1.php%00a.jpg
十六进制的0x00也可
文件头检查绕过
例如,仅允许上传图片,通过文件头来判断,这时可以将恶意代码拼接到图片后面
条件竞争绕过
有的文件上传功能是先将文件下载到服务器,如果是有问题的就删除,我们可以利用这一逻辑漏洞,不断上传文件,即可访问。
可查看文章CTF-【NSCTF 2015】WEB11 条件竞争
防御
1.文件类型判断
后缀白名单,MIME类型判断结合
2.文件重命名
3.文件上传目录设置为不可执行
从靠劳力赚钱转变成靠脑力赚钱,想入门网络安全的小白肯定想知道如何学好?
👉[[[CSDN大礼包:《黑客&网络安全入门&进阶学习资源》免费分享]]](安全链接,放心点击)
一、网安学习成长路线图
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取哈)
二、网安视频合集
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
三、精品网安学习书籍
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、网络安全源码合集+工具包
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
五、网络安全面试题
最后就是大家最关心的网络安全面试题板块
这份完整版的学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】