SQL注入漏洞
一,
概述:攻击者利用web应用程序对用户的输入没有进行安全过滤或者过滤不足,导致攻击者可以拼接sql语句,进行数据库操作,乃至入侵web应用系统(服务器)。
原理:web应用系程序对用户输入的数据没有进行严格的过滤,直接把用户输入的数据以拼接的方式带入SQL语句中执行。导致攻击者可以获得数据库中的数据,影响数据库安全和平台安全
分类:提交方式:GET,POST,COOKILE,REQUEST,HTTP header
数据类型:数字型,字符型
是否回显:显注,盲注
其他:报错,搜索,base6等等
GET注入:使用get请求提交数据,比如 在url中
POST注入:使用post请求提交数据,比如表单
Cookie注入:使用Cookie的某个字段提交数据,比如在Cookie中保存用户信息
HTTP Header注入:使用请求头提交数据,比如检测HTTP中的源地址、主机IP等
显注:前端页面可以回显用户信息,比如 联合注入、报错注入
盲注:前端页面不能回显用户信息,比如 布尔盲注、时间盲注
等等
危害包括但不局限于∶
1.用户信息泄露:数据库中存放的用户的隐私信息,比如账号、密码
2.网站挂马:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击
3.网页篡改:通过操作数据库对特定网页进行篡改
4.恶意操作:窜改数据库的系统管理员帐户、被安装后门等
5.破坏硬盘数据,瘫痪全系统
出现在如下的地方:
图片仅用作学习
二,
实现SQL注入的两个条件:
1.用户能够控制输入
2.原本程序要执行的SQL语句,拼接了用户输入的恶意数据
注入方式:手工注入,自动化注入
1.手工注入步骤:
第一步,判断是注入是字符型或数字型:
(1)数字型注入:当输入参数为数字类型时,例如页码,ID等,存在注入时则为数字类型的注入
测试步骤:1.加 ' :这时sql语句出错,程序无法正常从数据库中查询出数据,就会抛出异常;
2.加and 1=1 :执行正常,与原始页面如任何差异
3.加and 1=2 :可以正常执行,但是无法查询出结果,所以返回数据与原始网页存在差异
后台查询的sql语句
select* from users where id =1 ' ;
select * from users where id =1 and 1=1;
select * from users where id =1 and 1=2;
如果满足以上三点,则可以判断该URL存在数字型注入
例如:测试方法如下:
http://www.xx.com/a.php?id=1
http://www.xx.com/a.php?id=1’ 返回异常
http://www.xx.com/a.php?id=1 and 1 =1 返回正常
http://www.xx.com/a.php?id=1 and 1 =2 返回异常
数字型的注入,不需要闭合就可以直接进行注入。(如果系统做了数字型传入的判断,就防止注入)
(2)字符型注入:当输入参数为字串类型时,则为字串类型的输入,其与数字类型的注入的区别在于:注入时需要使用单引号来闭合
测试步骤:1.加 ' 输入1' 报错
2.输入1' and 1=1#/--+或 1' and '1'='1语法正确,逻辑判断正确,返回正确
3.输入1' and 1=2#/--+或 1' and '1'='2语法正确,逻辑判断错误,返回错误
判断为字符型注入,闭合符号为单引号
有的地方因为注释符的原因,会报语法错误