文件上传总结
2022-9-29 00:2:32 Author: 橘猫学安全(查看原文) 阅读量:41 收藏

基础知识

文件上传多出现在修改头像中,通常允许上传jpg,png,gif等图片,不允许上传php,asp,jsp等脚本文件.
文件上传顺序:前端->代理服务器burpsuite->后端
如何快速判断系统是windows还是linux? 最优方法:windows系统文件名不区分大小写,linux严格区分大小写.
次选方法:通过判断ping命令的TTL时间,windows通常是128,linux通常是64,不过这种可能会ping不通,也可能被人为设置导致不准.
从代码审计角度来看: 上传后的文件名=预备的路径+带随机数的文件名+文件后缀 .先看其中哪里被拼接到最终的文件全名中,再看哪些函数能影响到这个被拼接的部分.大概率要从这部分下手绕过.

I.前端js检测

特征:上传非法文件后出现的是前端的弹框提示.burpsuite抓不到包(因为前端校验并没有经过服务器)
绕过方式:burpsuite开启抓包,将文件后缀改为jpg,点击上传通过前端校验,然后在burpsuite中将文件后缀改回php,最后将文件上传到服务器.

II.MIME类型校验(content-type头)

MIME标准:多用途互联网邮件扩展类型.最初邮件只支持ascii码字符,后来才支持图片,视频等数据类型.MIME标准规定了用于表示各种数据类型的符号化方法.通过一些符号标识来判断数据的类型. 万维网的HTPP协议也使用了MIME的框架,具体体现在请求头中的content-type信息.
请求头content-type的信息默认由浏览器自动检测的,但是我们可以自己抓包修改.
绕过方式:先上传jpg类型文件,抓包等浏览器检测后修改为php即可.

III.黑名单绕过

1.大小写混淆

特征:黑名单过滤.php .jsp .asp
绕过方式:.PHP, .pHP等大小写混淆.

2.使用特定后缀名

phtml和pht是早期php,html混排文件的后缀名.
Apache配置文件中会有.+.ph(p[345]?|t|tml)此类的正则表达式,文件名满足即可被当做php解析.
特征:黑名单过滤.php .PHP .pHP等所有大小写形式
绕过方式:修改文件后缀为.php1 .php2 ... .php5  .phtml  .pht

3.windows文件名 . space 相关

windows会自动将文件名末尾的 . 和   (空格) 去掉
特征:有些服务器代码先去掉文件末尾的点.,然后对文件名从右往左第一个点后面的内容(服务器认为是文件扩展名)进行黑名单检测.
绕过方式:修改文件名为xx.php.space.      去掉文件末尾的.后文件名为xx.php.space  然后对文件名从右往左第一个点后面的内容进行后缀名检测, .space不在黑名单中,允许通过.最终拼接出的文件名为路径/xx.php.space
放到windows文件夹后,windows会自动去除文件名后的.和space,因此文件名又变为xx.php

4.双写::$DATA绕过正则匹配

特征:服务器没有过滤::$DATA或过滤不完全.通常是用正则匹配过滤::$DATA,但是这样并不能完全过滤.
绕过方式:文件后缀改为.php$::DATA直接绕过php的黑名单.
或者改为.php::$DAT::$DATAA绕过正则过滤的::$DATA.

5.%00截断

magic_quotes_gpc类似addslashes()函数,是对转移字符过滤的.
这个漏洞利用的前提是php版本为5.3以下,且php.ini中magic_quotes_gpc=Off  默认是On
原理:php是用C语言写的,C语言中字符串用\0表示结束,%00和\0在二进制中是字节00.因此在字符串之间插入\0或者%00,可以使字符串截断.
特征:上传后文件名为:路径+带随机数的文件名+文件扩展名.有些路径是开发者为了省事通过GET请求传递的,我们可以进行修改.假设正常情况下上传后文件全名为 /upload/  test151236  .jpg       通过修改GET请求传递的路径,变为  /upload/test.php%00,然后上传一个正常合法的图片,此时文件全名就变为   /upload/test.php%00test151236.jpg   %00后面的字符被截断,因此文件全名就变为:/upload/test.php

6..htaccess文件重写

.htaccess是Apache服务器的一个配置文件,作用是可以自定义404页面,允许/阻止用户访问特定的目录等.该文件可作用于当前目录及其子目录.
在.htaccess文件中写入特定代码,可以使文件名中包含特定字符的文件被当做php文件来解析而不考虑文件后缀.
前提:Apache的httpd.conf中AllowOverride=All
特征:如果服务器是黑名单检测的话,通常会禁用php等脚本文件,不一定会禁用.htaccess文件.
绕过方式:先上传.htaccess文件,再上传一个文件名符合.htaccess特定代码的jpg文件,服务器会将jpg文件当做php文件来解析执行.

7.服务器解析漏洞

  • Apache解析漏洞
Apache是从右往左进行文件后缀解析的.形如文件名为aa.bb.cc.dd的文件,Apache先识别dd,识别不出的话就识别cc,直到能识别为止.
利用方式:上传名为xx.php.abc文件.后缀为abc可以通过服务器黑名单检测.Apache识别不出.abc后缀,就向前找,能识别php后缀,因此将文件解析为php文件.
  • IIS6.0解析漏洞
IIS服务器配套的是asp脚本文件.IIS6.0可以正常解析.asp .asa .cer .cdx后缀的文件.
前提:IIS5.x或6.0版本
漏洞1:如果目录以.asp .asa .cer .cdx结尾,那么这个目录下所有文件都会被当做asp格式去解析.
漏洞2:当文件名中包含 .asp;  .asa;  .cer;  .cdx;  时,此时服务器会忽略文件后缀,全部当做asp文件解析.
原因是IIS服务器默认不解析;及其后面的内容,相当于截断.
  • Nginx和IIS7.0/7.5解析漏洞
前提:Nginx8以下版本,IIS7.0/7.5版本
绕过方式:上传文件为xx.jpg,访问xx.jpg/x.php,此时xx.jpg就会被解析为php文件.

文件上传条件竞争

原理:有些网站是先临时接收所有上传的文件到临时目录,然后依次判断,不符合条件的文件删除,符合条件的移动到新的目录.
正在访问的文件无法被删除.
利用:在知道临时目录和临时文件名的前提下,使用burpsuite的Intruder模块,同时多次上传该文件和多次访问该文件.在服务器接收文件但还未判断删除时访问到该文件,这样该文件就无法被删除.如果在该文件中用file_put_contents()函数,就能留更多的木马.

图片马相关

服务器对脚本文件过滤很严格难以绕过时,可以考虑使用 上传图片+文件包含
图片马是无法被服务器直接解析执行的,也无法直接连接蚁剑,需要配合文件包含才能执行其中的php代码.
不同格式的图片文件头表示不同,有时会取文件头标识作为检测图片类型的依据,但是这个很容易伪造.

三种图片马制作方式:

用记事本等编辑器打开图片,在其中写入php代码是可以执行的,但是图片会无法显示.
使用DOS命令:copy /b  xx.jpg+xx.php=xx.jpg  这样以二进制流方式合成的图片是可以打开看的.
使用十六进制图片编辑器,在其中的大片00字节处插入php代码,多用于二次渲染绕过.

二次渲染绕过:

imagecreatefromjpeg():由文件或者URL创建一个新图像.从一张jpeg图像中,把原图片进行裁剪,生成一张新的jpeg图片.
服务器有时会用imagecreatefromjpeg()等函数对上传的图片进行二次渲染,相当于对图片进行重组,这样会使图片马中的代码失效.
特征:先上传一张图片马,上传成功后再将图片下载下来.用Hex Editor以十六进制字节码形式打开这两张图片,发现两张图片的十六进制字节码已经大不相同,其中插入的php代码也面目全非.
绕过方式:先上传一张正常图片,然后下载.用Hex Editor打开两张图片,找出两张图片中十六进制字节码前后没有变化的位置,说明这些位置不会被二次渲染,在这些位置中插入php代码.上传成功后再结合文件包含漏洞执行其中的php代码.
通常用gif格式的图片,因为gif图片中十六进制字节码不变的地方比较多。
原文链接:https://www.freebuf.com/articles/web/335959.html

如有侵权,请联系删除

推荐阅读

实战|记一次奇妙的文件上传getshell
「 超详细 | 分享 」手把手教你如何进行内网渗透
神兵利器 | siusiu-渗透工具管理套件
一款功能全面的XSS扫描器
实战 | 一次利用哥斯拉马绕过宝塔waf
BurpCrypto: 万能网站密码爆破测试工具
快速筛选真实IP并整理为C段 -- 棱眼
自动探测端口顺便爆破工具t14m4t
渗透工具|无状态子域名爆破工具(1秒扫160万个子域)
查看更多精彩内容,还请关注橘猫学安全:
看到这里了,点个“赞”、“再看”吧

文章来源: http://mp.weixin.qq.com/s?__biz=Mzg5OTY2NjUxMw==&mid=2247499068&idx=2&sn=7e4d982d900f39edd09c304d9aa5b9ff&chksm=c04d7a02f73af3141f51fee016ec2f22e66b835fe01666f51a11f3e3a497464e5496e807a107#rd
如有侵权请联系:admin#unsafe.sh