目录
day10-渗透测试文件上传篇&绕过&特征&截断&渲染
一、黑名单大小写绕过代码分析
1、获取文件后缀名进行判断,如果后缀在这个字典里就禁止上传。
2、黑名单大小写绕过攻击
二、利用 windows 系统特征绕过上传
1、windows 系统特征绕过漏洞分析源码
2、windows 系统特征绕过攻击
三、NTFS 交换数据流::$DATA 绕过上传
1、NTFS 交换数据流::$DATA 代码分析
2、NTFS 交换数据流::$DATA 攻击绕过上传
四、利用 windows 环境的叠加特征绕过上传
1、黑名单源码分析
2、利用 windows 环境的叠加特征绕过上传攻击
3、双写后缀名绕过上传
五、文件上传双写绕过攻击
六、目录可控%00 截断绕过上传
1、上传参数目录可控代码分析
2、文件上传参数目录可控攻击
七、目录可控 POST 绕过上传
1、目录可控 post 上传代码分析
2、目录可控上传攻击
八、文件头检测绕过上传
1、常见的文件头
2、文件头检测上传代码分析
3、文件头检测绕过传攻击方法
九、绕过图片二次渲染上传
1、图片二次渲染分析代码
2、绕过图片二次渲染攻击
3、制作图片马
声明:请勿进行违法测试,任何教学出处与本博主无关
day10-渗透测试文件上传篇&特征&截断&渲染&%00&绕过
描述
文件上传漏洞是一种常见的网络安全问题,它存在于许多Web应用程序中。当Web应用程序在处理用户上传的文件时,如果缺乏严格的安全检查和处理,攻击者就可能上传并执行恶意文件,从而对系统安全构成严重威胁。这种漏洞可能源于对上传文件的类型、大小、内容等属性的检查不严格,或对上传文件的保存路径、文件名等信息处理不当,以及未限制用户访问上传文件的权限, 如常见的头像上传,图片上传,oa 办公文件上传,媒体上传,允许用户上传文件,如果过滤不严格,恶意用户利用文件上传漏洞,上传有害的可以执行脚本文件到服务器中,可以获取服务器的权限,或进一步危害服务器。
一、黑名单大小写绕过代码分析
1、获取文件后缀名进行判断,如果后缀在这个字典里就禁止上传。
$deny_ext =array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",". pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx", ".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess");
2、黑名单大小写绕过攻击
仔细阅读黑名单,查看是否有被忽略的后缀名,当前可以使用phP 绕过
二、利用 windows 系统特征绕过上传
在 windows 中文件后缀名. 系统会自动忽略.所以 shell.php. 像shell.php 的效果一样。所以可以在文件名后面机上.绕过。
1、windows 系统特征绕过漏洞分析源码
同样是黑名单禁止上传,但是可以上传.php.这种文件后缀
2、windows 系统特征绕过攻击
抓包修改在后缀名后加上.即可绕过
三、NTFS 交换数据流::$DATA 绕过上传
如果后缀名没有对::$DATA 进行判断,利用 windows 系统NTFS 特征可以绕过上传。
1、NTFS 交换数据流::$DATA 代码分析
$deny_ext =array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",". pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx", ".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess");
同样用黑名单过滤后缀名。但是程序中没有对::$DATA 进行过滤可以添加::$DATA 绕过上传。
2、NTFS 交换数据流::$DATA 攻击绕过上传
burpsuite 抓包,修改后缀名为 php::$DATA
四、利用 windows 环境的叠加特征绕过上传
在 windwos 中如果上传文件名 moonsec.php:.jpg 的时候,会在目录下生产空白的文件名 moonsec.php,再利用 php 和 windows 环境的叠加属性, 以下符号在正则匹配时相等
双引号" 等于 点号.
大于符号> 等于 问号?
小于符号< 等于 星号*
文件名.<或文件名.<<<或文件名.>>>或文件名.>><空文件名
1、黑名单源码分析
同样是黑名单匹配,把.去掉 把空格也过滤了。::$data 也过滤了
2、利用 windows 环境的叠加特征绕过上传攻击
首先抓包上传 a.php:.php 上传会在目录里生成 a.php 空白文件,接着再次提交把a.php 改成 a.>>>
3、双写后缀名绕过上传
在上传模块,有的代码会把黑名单的后缀名替换成空,例如a.php 会把php 替换成空,但是可以使用双写绕过例如 asaspp,pphphp,即可绕过上传
文件上传双写绕过漏洞分析
同样是黑名单过滤。str_ireplace 对上传的后缀名是黑名单内的字符串转换成空
五、文件上传双写绕过攻击
抓包上传,把后缀名改成 pphphp 即可绕过上传
六、目录可控%00 截断绕过上传
以上都是一些黑名单被绕过的,如果黑名单上传检测后,没有限定后缀名,绕过的方法很多,与黑名单相对的就是白名单,使用白名单验证会相对比较安全,因为只允许指定的文件后缀名。但是如果有可控的参数目录,也存在被绕过的风险。
1、上传参数目录可控代码分析
使用白名单限制上传的文件后缀名,只允许指定的图片格式。但是$_GET['save_path']服务器接受客户端的值,这个值可被客户端修改。所以会留下安全问题。
2、文件上传参数目录可控攻击
上传参数可控当 gpc 关闭的情况下,可以用%00 对目录或者文件名进行截断。
php 版本小于 5.3.4 首先截断攻击,抓包上传将%00 自动截断后门内容。
例如 1.php%00.1.jpg 变成 1.php
七、目录可控 POST 绕过上传
上面是 GET 请求的,可以直接在 url 输入%00 即可截断,但是在post 下直接注入%00 是不行的,需要把%00 解码变成空白符,截断才有效。才能把目录截断成文件名。
1、目录可控 post 上传代码分析
这段代码同样是白名单限制后缀名,$_POST['save_path']是接收客户端提交的值,客户端可任意修改。所以会产生安全漏洞。
2、目录可控上传攻击
文件名可控,通过抓包修改可控的参数,与不同的中间件的缺陷配合使用
使用%00 截断文件名 再 post 环境下%00 要经过 decode 但是受gpc 限制使用 burpsutie POST %00 截断文件名
八、文件头检测绕过上传
有的文件上传,上传时候会检测头文件,不同的文件,头文件也不尽相同。常见的文件上传图片头检测 它检测图片是两个字节的长度,如果不是图片的格式,会禁止上传。
1、常见的文件头
JPEG (jpg),文件头:FFD8FF
PNG (png),文件头:89504E47
GIF (gif),文件头:47494638
TIFF (tif),文件头:49492A00
Windows Bitmap (bmp),文件头:424D
2、文件头检测上传代码分析
这个是存在文件头检测的上传,getReailFileType 是检测jpg、png、gif 的文件头
如果上传的文件符合数字即可通过检测
3、文件头检测绕过传攻击方法
制作图片一句话,使用 copy 1.gif/b+moon.php shell.php 将php 文件附加再jpg图片上,直接上传即可。
本例子因为限制了后缀为 jpg,可以考虑文件包含将图片文件包含进去getshell
九、绕过图片二次渲染上传
有些图片上传,会对上传的图片进行二次渲染后在保存,体积可能会更小,图片会模糊一些,但是符合网站的需求。例如新闻图片封面等可能需要二次渲染,因为原图片占用的体积更大。访问的人数太多时候会占用,很大带宽。二次渲染后的图片内容会减少,如果里面包含后门代码,可能会被省略。导致上传的图片马,恶意代码被清除。
1、图片二次渲染分析代码
只允许上传 JPG PNG gif 在源码中使用 imagecreatefromgif 函数对图片进行二次生成。生成的图片保存在,upload 目录下
2、绕过图片二次渲染攻击
首先判断图片是否允许上传 gif,gif 图片在二次渲染后,与原图片差别不会太大。所以二次渲染攻击最好用 git 图片马
3、制作图片马
将原图片上传,下载渲染后的图片进行对比,找相同处,覆盖字符串,填写一句话后门,或者恶意指令。