文件上传
1、文件上传漏洞是指攻击者可以通过上传一个可执行文件到服务器并执行
2、文件上传存在的原因:服务器对上传文件的过滤不严格导致的漏洞
3、上传不同的文件实现不同的功能:
上传文件是病毒或者木马时,主要用于诱骗用户或者管理员下载执行或者直接自动运行;
上传文件是WebShell时,攻击者可通过这些网页后门执行命令并控制服务器;
上传文件是其他恶意脚本时,攻击者可直接执行脚本进行攻击;
上传文件是恶意图片时,图片中可能包含了脚本,加载或者点击这些图片时脚本会悄无声息的执行;
上传文件是伪装成正常后缀的恶意脚本时,攻击者可借助本地文件包含漏洞(Local File Include)执行该文件。
4、上传的条件
1、上传的文件具备可执行性,上传的目录必须在web路径内
2、用户能获取到上传文件所在的路径
3、上传后的文件内容未被修改
5、上传的各种校验姿势
- 客户端js校验(一般只校验后缀名)
一般都是在网页上写一段javascript脚本,校验上传文件的后缀名,有白名单形式也有黑名单形式。
判断方式:在浏览加载文件,但还未点击上传按钮时便弹出对话框,内容如:只允许上传.jpg/.jpeg/.png后缀名的文件,而此时并没有发送数据包。
服务端校验
- 文件头content-type字段校验
文件内容头校验
常见的文件头对应关系: (1) .JPEG;.JPE;.JPG,”JPGGraphic File” (2) .gif,”GIF 89A” (3) .zip,”Zip Compressed” (4) .doc;.xls;.xlt;.ppt;.apr,”MS Compound Document v1 or Lotus Approach APRfile”
后缀名采用黑名单或白名单校验
- 自定义正则校验
WAF设备校验(根据不同产品而定)
6、绕过校验的姿势
- 客户端绕过
- 抓包改包、禁用js
- 服务端绕过
- 抓包修改content-type
- 文件头绕过(在合成马前面加上允许的文件头)
- 文件后缀绕过(找到黑名单的漏网之鱼、大小写绕过)
能被解析的文件扩展名列表:
jsp jspx jspf
asp asa cer aspx
php php php3 php4
exe exee
- 上传允许的后缀的合成马(搭配文件包含或中间件解析漏洞使用)
- CMS、编辑器漏洞绕过
(1)、CMS漏洞:比如说JCMS等存在的漏洞,可以针对不同CMS存在的上传漏洞进行绕过。
(2)、编辑器漏洞:比如FCK,ewebeditor等,可以针对编辑器的漏洞进行绕过。
- 配合操作系统文件命名规则绕过
(1)、上传不符合windows文件命名规则的文件名
test.asp.
test.asp(空格)
test.php:1.jpg
test.php::$DATA
shell.php::$DATA…….
会被windows系统自动去掉不符合规则符号后面的内容。
(2)、linux下后缀名大小写
在linux下,如果上传php不被解析,可以试试上传pHp后缀的文件名。
- 配合其他规则绕过
(1)、0x00截断:基于一个组合逻辑漏洞造成的,通常存在于构造上传文件路径的时候
(2)、.htaccesss解析漏洞绕过
上传当前目录的.htaccess 文件
例如内容为: AddType application/x-http-php .jpg (上传的jpg 均以php执行)
把.htaccess 上传后,且上传成功后,再上传内容为一句话的jpg文件
- WAF绕过(抓包改包)
(1)、垃圾数据
有些主机WAF软件为了不影响web服务器的性能,会对校验的用户数据设置大小上限,比如1M。此种情况可以构造一个大文件,前面1M的内容为垃圾内容,后面才是真正的木马内容,便可以绕过WAF对文件内容的校验;当然也可以将垃圾数据放在数据包最开头,这样便可以绕过对文件名的校验。可以将垃圾数据加上Content-Disposition参数后面,参数内容过长,可能会导致waf检测出错。
(2)、filename
针对早期版本安全狗,可以多加一个filename;或者将filename换位置;
(3)、根据waf本身存在的漏洞绕过
7、文件上传的防御
- 后缀名采用白名单校验
- 文件内容采用服务端校验
- 上传文件重命名
- 隐藏上传文件路径