記第一次網站入侵

    最近要做一個網站,知道現在黑客太多,網站很容易受到攻擊,如果僅靠網管在運維的過程中進行防範是不夠的,還需要從源代碼就開始考慮安全性的問題。最好的防守就是進攻,應用到此就是自己去做黑客,試着去滲透一些網站,從中熟悉攻擊的方法和黑客的思維方式,這樣才知道怎麼去修補代碼中的漏洞。換位思考,知己知彼,百戰不殆。以前並沒有太關注黑客攻擊方面的東西,不過還是知道對網站危害最大的就是SQL注入了。上網搜索相關的文章,在熟悉SQL和數據庫的情況下還是容易把注入原理搞清楚的。
一、尋找注入點
    先拿這幾天常去的網站測試一下,因爲熟悉網站的鏈接結構,所以容易尋找漏洞。一試還真有注入點:listpic.php?sortid=1,填成 listpic.php?sortid=1 and 1<> 1,然後再試 listpic.php?sortid=1 and 1=1,通過顯示內容的變化馬上判斷出存在注入點。
二、分析注入點
    注入點找到之後就要分析這個注入點,以便後續利用。首先分析字段數,這可以通過添加 order by n 來測試,n指的是第幾個字段,從1開始計數。這個方法對於mysql和mssql都是有效的,其他數據庫還沒有試過。
    先試 listpic.php?sortid=1 order by 1,再試 listpic.php?sortid=1 order by 2,第二次顯示內容不正確,說明該查詢只返回一個字段值。 分析頁面顯示內容,可以得知返回的字段值爲查詢圖片類別的名稱,並在頁面上有顯示。 注入點上的值能夠直接在頁面上顯示出來,這爲測試注入語句提供了很大的便利性。
    現在可以確定通過 listpic.php?sortid=1 and 1<>1 union select ??? 即可把我們想要知道的信息顯示出來,當然,前提是要後臺數據庫支持union查詢,現在的數據庫基本上都是支持的。
三、網站情況分析  
1、後臺數據庫
    其實確定數據庫的原理很簡單,就是用一些某種數據庫特有的表或函數注入到SQL裏面,如果執行正確,就可以確定是該種數據庫了。比如mssql的sysobjects表,mysql的hex函數等。
    由於網站是PHP開發的,因此採用mysql數據庫的可能性較大,先測試是否爲mysql。執行  listpic.php?sortid=1 and 1<>1 union select hex('abc'),結果顯示出了'abc'的十六進制編碼,由此確定數據庫爲mysql。
    再執行 listpic.php?sortid=1 and 1<>1 union select version(),得到版本號爲 5.1.30-community,繼續通過database()、current_user()得到數據庫名和當前登錄用戶。運氣不錯,登錄用戶是 root ,數據庫權限上是不會存在問題的了。
    知道是mysql數據庫,當然要用load_file和into outfile來測試一下有沒有文件讀寫權限了。 先假設該網站是windows系統,執行listpic.php?sortid=1 and 1<>1 union select load_file('c:/boot.ini'),哈哈,讀出來了。再測試寫文件,listpic.php?sortid=1 and 1<>1 union select 'abcdef' into outfile 'c:/windows/temp/tem1.tmp',然後讀 listpic.php?sortid=1 and 1<>1 union select load_file('c:/windows/temp/tem1.tmp'),OK!有文件讀寫權限,看來拿下這個站應該是沒什麼問題了。
2、WEB服務器
    現在流行的web服務器無非就是apache和iis了,使用php+mysql搭配apache的可能性較大,不過確切信息也是很容易測試出來的。通過輸入一個不存在的頁面,看返回信息基本上就可以判斷出來了。 比如輸入 listpicabcsdf.php,返回http404頁面,上面有“Internet 信息服務 (IIS)”字樣,確定是IIS服務器。
    應該還有其他更好的辦法來判斷web服務器類型,比如通過返回的http頭,不過這就要藉助工具或者自己寫程序了。還是http404的方式最簡單,但是在服務器自定義http404返回頁面的情況下就無效了。
   知道是IIS,那操作系統肯定是windows了,想都不用想。
3、web路徑
    上面幾步進展的很順利,沒想到在獲取web絕對路徑上卡了殼。原因還是因爲自己經驗太欠缺,對於各種配置文件的利於瞭解得不夠。先是很快讀出 'c:/windows/php.ini',知道php安裝目錄爲'D:/php',且關閉了錯誤提示功能。之後 正確的猜測出mysql安裝路徑爲'd:/mysql',再猜web目錄時始終都在d盤打轉,沒想到後來才知道www目錄在e盤,看來人有時候就是容易陷入自己給自己下的套。
    折騰了兩天,試了各種自己知道的辦法,依然沒有成功,鬱悶得要抓狂!後來實在沒辦法了,加入天陽網絡技術聯盟的一個qq羣,弱弱的向高手們提問,天陽的人很熱心,馬上就有人回覆,在此要特別感謝lee,是他發的一份php常用注入方法幫了忙,裏面“C:/WINDOWS/system32/inetsrv/MetaBase.xml      //IIS配置文件”這一行內容提醒了我通過IIS配置信息去找web路徑。其實之前也曾有這麼試過,只是搞錯了讀取方法和路徑,所以與它失之交臂。
    好,執行 listpic.php?sortid=1 and 1<>1 union select load_file('C:/WINDOWS/system32/inetsrv/MetaBase.xml'),這裏有個地方要注意,MetaBase.xml是UTF-8編碼的文件,前面兩個字節爲 FF FE,輸出顯示是會顯示爲???亂碼,實際上內容已經輸出來了,通過查看網頁源文件就能看到全部內容。
    仔細查看MetaBase.xml,發現網站文件保存在“e:/www/www.xxxxx.com"目錄下,該死,早知道試下e盤也用不着忙乎這麼久,不過也好,從走彎路的過程中學到很多東西。
四、得到webshell
    現在就是想辦法掛個webshell上去了,自己寫暫時是寫不出來了,只能用現成的。google搜索,找到angel寫的phpspy2008.php,在本機測試一下,發現真是功能強大,不僅能夠數據庫管理、文件系統瀏覽、執行命令,還能備份數據庫、打包文件下載,強列贊一個!
    由於該網站只能上傳圖片文件,而且還驗證了圖片格式的正確性,所以直接上傳大馬的方式是行不通的。其實通過一句話木馬把大馬上傳上去是最簡單的辦法,可惜當時我還不知道這個辦法,按自己的思路是先寫個簡單上傳的PHP頁面,想辦法寫到web路徑下,然後再通過它上傳大馬。
    通過注入點檢索 information_schema 庫,發現圖片類別描述字段是個text類型,好,先把upload.php進行十六進制編碼,再複製到添加類別的輸入框內,保存,得到sortid,然後 listpic.php?sortid=1 and 1<>1 union select sortdesc from sorttype where id=n into outfile 'e:/www/www.xxxxx.com/tmp.php',之後訪問 www.xxxxx.com/tmp.php,上傳phpspy.php,OK,成功!
    其實自己的方法是很囉嗦且很麻煩的,不過終究是自己想出來的辦法,比起直接用別人的方法還是更有利於理解滲透原理的。
五、利用
    接下來是怎麼利用了,掃描時發現該服務器開了3389端口的,如果能取到administrator的密碼那就能變成自己的肉雞,不過這一步技術還沒有掌握,只能通過webshell上去逛了。現在考慮的是一個問題,要不要在裏面留一個提醒管理員的文件呢?
六、清除痕跡
    剛開始接觸入侵,還不會徹底清除痕跡的,只是把自己製造出的文件刪掉,管理員應該還是很容易看出我留下的腳印,不會有警察上門吧?
總結:
1、最大的體會就是網站的安全性太重要了,而且漏洞也太多了,每個程序員都應該要重視安全性,且要把它擺在第一位,而不能只去追求功能的完成度;
2、知識的廣度對於滲透是很重要的,有時候一點小細節就會決定滲透的成敗
3、先手工後工具,通過手工熟悉原理,通過工具提高效率
4、多交流,多思考,多學習
相關鏈接:
1、天陽網絡技術聯盟 http://bbs.tian6.com/
2、phpspy2008.php 下載 http://www.4ngel.net
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章