sql注入学习笔记

sql注入:所谓的sql注入就是通过某种方式将恶意的sql代码添加到输入参数中,然后传递到sql服务器使其解析并执行的一种攻击手法

sql注入可分为平台层注入和代码层注入。

平台层注入:由于不安全的数据库配置或数据库平台的漏洞导致。

代码层注入:程序员对输入没有细致地过滤,从而执行了非法地数据查询。

sql注入原理:在前后端数据的交互中,前端的数据传到后台处理时,没有做严格的判断,导致其传入的数据拼接到SQL语句中,被当成SQL语句的一部分执行,从而导致数据库受损,信息丢失。

例如sqli-lab的一串前端url:http://127.0.0.1:8080/Less-2/?id=1

其中url中的?代表传值的意思,id代表变量,等号代表变量的值。

(浏览器通常使用 ? 来表示get方法传递参数,而使用post传递参数是不会显示到url中的,因此url中含有?说明就是使用get方法传递参数。post型注入和cookie注入需要插件和工具才可进行,例如hacbar)

常见的注入方式:

参数类型分类:数字型、字符型

注入手法分类:联合查询注入、报错注入、基于布尔的盲注、基于时间的盲注、HTTP头注入、宽字节注入、堆叠查询、二阶注入

数字型注入:

当输入的参数为整形时,若存在注入漏洞,则是数字型注入

如:http://127.0.0.1:8080/Less-2/?id=1

测试步骤:

1.若在后面加单引号‘变为http://127.0.0.1:8080/Less-2/?id=1’,这个时候sql语句出错,程序无法正常从数据库中查询出数据,就会抛出异常;

2.若在后面加and1=1变为http://127.0.0.1:8080/Less-2/?id=1 and 1=1;

对应sql语句:select * from table where id=1’ and 1=1 语句执行正确,与初始界面无差别;

3.若在后面加and 1=2变为http://127.0.0.1:8080/Less-2/?id=1 and 1=2;

对应的sql:select * from table where id=1 and 1=2 语句虽然可以正常执行,但是无法查询出结果,与初始界面存在差别。

字符型注入

当输入的参数为字符串时,称为字符型。字符型和数字型最大的一个区别在于,数字型不需要单引号来闭合,而字符串一般需要通过单引号来闭合的。

若数字型语句:select * from table where id =1,则字符型如下:select * from table where name=’admin’;

测试步骤:

加单引号:select * from table where name=’admin’’,由于加单引号后变成三个单引号,则无法执行,sql语句错误,因此界面报错。

一般情况我们可以通过--+将后面的单引号注释掉,sql语句也会形成闭合

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值