1.概述
在进行上传文件的时候,如果服务器端后端语言未对上传的文件进行严格的验证和过滤,就容易造成上传任意文件的情况。常见场景是web服务器允许用户上传图片或者普通文本文件保存,而攻击者绕过上传机制上传恶意代码文件并执行从而控制服务器。攻击者通过上传恶意文件传递给解释器去执行,然后就可以在服务器上执行恶意代码,进行数据库执行、服务器文件管理、命令执行等恶意操作。从而控制整个网站,甚至是服务器。
在cmd里利用ipconfig找到ipv4的地址,接着在浏览器中打开get.php和post.php,两者区别在于一句话木马中是否拥有@,我们一般在进行文件上传漏洞的时候使用post.php,因为其隐蔽性较高,不是明文表示
在使用hackbar时,打开post data后再输入命令
中国蚁剑使用时,连接密码要使用post.php中cmd的参数,解码器使用base64
超文本标记语言.html文件:text/html
普通文本.txt文件:text/plain
PDF文档.pdf:application/pdf
PNG图像.png:image/png
GIF图像.gif:image/gif
MPEG文件.mpg .mpeg:video/mpeg
Jpg 图像.jpg: image/jpeg
绕过方式可以使用bp进行抓包,在content-type中改变参数,倘若前端代码可见,那么便利用网页源代码来更改所需参数,若是后端不可见,则利用所学逐一尝试进行绕过。
下面对常见的一些文件上传漏洞作以列举
2.例题1
那么在此处我们只需勾选禁用Javascript即可成功上传文件,那么如何判断是否成功上传呢,复制图像链接后新建一个页面并打开。
当出现如下页面那么我们便成功上传
3.例题2
在有的时候我们上传文件发现有提示文件类型不正确并让我们重新上传,那么此时此刻倘若能看到前端源代码,那么我们便通过查看源代码的方式来判断漏洞可能存在的点以及文件可以成功上传的类型
本题我们可以获取到页面源代码如下,那么通过分析代码可知本题可成功上传的文件类型有三种,分别为jpeg,png,gif,那么接下来我们就可以通过拦截请求包来修改文件类型
修改后如下,然后关闭拦截,发出请求包,即可成功上传
4.黑名单检测
代码中存在数组或者列表,里面会包含一些非法字符或者字符串,当数据包中含有该字符串时,即认定该数据包非法。
例如本题就不允许上传asp,aspx,php,jsp后缀的文件,黑名单一般是有限制的,那么如何判断是否是黑名单呢,例如.php无法上传,将其改为任意后缀,例如.xxx
如果可以上传成功,那么本题就是黑名单检测
(1)例题3 后缀双写绕过
将其改为pphphp,那么为何不改为phpphp呢,是因为网站识别到php即会自动去除,而pphphp中间的php被去掉后剩下三个字符自动组成php
此为phpphp输出页面,可以看到两个php都被去除掉,所以上传的木马无效
(2)例题4 后缀大小写绕过
可以看到大写php成功绕过检测,但是大写php适用的条件十分有限
(3)例题5 其他解析后缀可绕过
PHP:php2,php3,php5,phtml,pht
ASP:asa,cer,cdx
ASPX:ascx,ashx,asac
JSP:jspx,jspf
本题就是phtml的绕过
(4)例题6 图片+配置文件绕过
配置一个.htaccess文件
再将a.php文件更名为a.png文件,在网站中先上传a.png文件,再上传.htaccess文件,即可成功跳转
5.白名单检测
(1)例题7 %00截断
先上传一个包含一句话木马的.png文件,进行抓包,在upload后加入test.php%00
打开图像链接,将后缀改为a.php或者test.php即可成功上传
(2)例题8 0X00截断
上传一个包含一句话木马的.png文件后进行抓包,但我们发现在请求包头的位置并没有像12题一样出现/upload/,我们往下寻找可以看到它在中间位置单成一行,和12题一样我们先写入test.php a,注意php和a之间有一个空格
而后我们选择hex模块,找到这句代码所对应的十六进制编码,我们发现空格所对应的编码为20,现在将其改为00,改完后发送请求包,可以看到php和a连在了一起,并且上传成功
而后再复制图像链接更改后缀发现可以成功进入
6.文件内容检测
(1)例题9 文件幻数检测
文件格式幻数(外语:magic number),它可以用来标记文件或者协议的格式,很多文件都有幻数标志来表明该文件的格式。以下是常见图片的文件幻数:
JPEG (jpg),文件头:FFD8FF
PNG (png),文件头:89504E47
GIF (gif),文件头:47494638
TIFF (tif),文件头:49492A00
Windows Bitmap (bmp),文件头:424D
CAD (dwg),文件头:41433130
Adobe Photoshop (psd),文件头:38425053
Rich Text Format (rtf),文件头:7B5C727466
XML (xml),文件头:3C3F786D6C
HTML (html),文件头:68746D6C3E
Email [thorough only] (eml),文件头:44656C69766572792D646174653A
Outlook Express (dbx),文件头:CFAD12FEC5FD746F
Outlook (pst),文件头:2142444E
MS Word/Excel (xls.or.doc),文件头:D0CF11E0
MS Access (mdb),文件头:5374616E64617264204A
WordPerfect (wpd),文件头:FF575043
Adobe Acrobat (pdf),文件头:255044462D312E
Quicken (qdf),文件头:AC9EBD8F
Windows Password (pwl),文件头:E3828596
ZIP Archive (zip),文件头:504B0304
RAR Archive (rar),文件头:52617221
Wave (wav),文件头:57415645
AVI (avi),文件头:41564920
Real Audio (ram),文件头:2E7261FD
Real Media (rm),文件头:2E524D46
MPEG (mpg),文件头:000001BA
MPEG (mpg),文件头:000001B3
Quicktime (mov),文件头:6D6F6F76
Windows Media (asf),文件头:3026B2758E66CF11
MIDI (mid),文件头:4D546864
绕过技巧
A 在文件头加入GIF89a
B 制作图片马
比如使用专业的制作软件Edjpgcom
将一张正常的图片拖到Edjpgcom进行打开,然后插入php代码
然后使用记事本打开该文件,可以看到php代码已经插入图片里了,并且图片也能正常打开
也可以使用010编辑器,将jpg图片拖入,将写好的一句话,粘贴到尾部
靶场第15题,先上传一个图片马,再进行测试,发现可以进入
(2)例题10 二次渲染
绕过技巧:先上传一张图片,再重新将图片下载下来做比较,然后在相同的地方 (00的地方)插入webshell
接着我们上传插入webshell的图片马,发现可以进入