基础知识
文件上传多出现在修改头像中,通常允许上传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.截断
magic_quotes_gpc类似addslashes()函数,是对转移字符过滤的.
这个漏洞利用的前提是php版本为5.3以下,且php.ini中magic_quotes_gpc=Off 默认是On
原理:php是用C语言写的,C语言中字符串用表示结束,和在二进制中是字节00.因此在字符串之间插入或者,可以使字符串截断.
特征:上传后文件名为:路径+带随机数的文件名+文件扩展名.有些路径是开发者为了省事通过GET请求传递的,我们可以进行修改.假设正常情况下上传后文件全名为 /upload/ test151236 .jpg 通过修改GET请求传递的路径,变为 /upload/test.php,然后上传一个正常合法的图片,此时文件全名就变为 /upload/test.phptest151236.jpg 后面的字符被截断,因此文件全名就变为:/upload/test.php
6..htaccess文件重写
.htaccess是Apache服务器的一个配置文件,作用是可以自定义404页面,允许/阻止用户访问特定的目录等.该文件可作用于当前目录及其子目录.
在.htaccess文件中写入特定代码,可以使文件名中包含特定字符的文件被当做php文件来解析而不考虑文件后缀.
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: lzxmw777