- 前言
- 一,产生原因
- 二,漏洞危害
- 三,漏洞利用过程
- 1,信息收集:
- 2,获取数据:
- 3,提权:
- 四,SQL注入点判断
- 1,可能存在注入点的地方:
- 比如:
- 2,SQL注入类型判断:
- 数字型判断:
- 可以使用经典的and 1=2来判断:
- 字符型判断:
- 使用and '1' = '2' 来判断:
- 五,SQL注入手法:
- 总结:
前言
SQL漏洞在CVE列表(通用漏洞披露)中排前10
SQL注入攻击是通过操作输入来修改SQL语句,用以达到执行代码对WEB服务器进行攻击的方法。
一,产生原因
用户提供的信息参与了SQL语句的编译
- 对用户输入的参数没有进行严格过滤(如过滤单双引号、尖括号等),就被带到数据库执行,造成了SQL注入。
- 使用了字符串拼接的方式构造SQL语句
二,漏洞危害
- 数据库信息泄漏: 数据库中存放的用户的隐私信息的泄露。
- 网页篡改: 通过操作数据库对特定网页进行篡改。
- 网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击。
- 数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员帐户被窜改。
- 服务器被远程控制,被安装后门:经由数据库服务器提供的操
三,漏洞利用过程 1,信息收集:
- 数据库类型
- 数据库版本
- 数据库用户
- 数据库权限
- 获取库信息
- 获取表信息
- 获取列信息
- 获取数据
- 执行命令: 读文件
- 读取中间件配置文件,读取数据库配置文件
- 写文件:写webshell
四,SQL注入点判断 1,可能存在注入点的地方:
既然是SQL注入,肯定是去寻找与数据库有交互的地方,也就是页面存在传值或者查询的地方。
存在于:注册、登录、搜索框、筛选、排序等
比如:1.url中的GET型传参:
http://www.text.com/?id=1;
2.搜索框(POST):
前端将用户输入的数据代入到数据库中进行查询,这种以POST方法进行发送数据。
如下:
3.HTTP请求头部字段如Cookie值
当输入的 x 为整型时: http://xxx/?id = x
后端中sql语句类型大致如下:
select * from <表名> where id = x可以使用经典的and 1=2来判断:
url 地址中输入: http://xxx/?id= x and 1=1
页面依旧运行正常,继续进行下一步。
url 地址中输入: http://xxx/?id= x and 1=2
页面运行错误,则说明此sql注入为数字型注入。
原理:
and是两者都为真才是真。
当输入and 1=1时,后端执行sql语句为:
select * from <表名> where id = x and 1=1
而 id =x 与 1=1逻辑判断都为真,且语法正确,所以返回正常;
但当输入and 1=2是,后端执行sql语句为:
select * from <表名> where id = x and 1=2
没有语法错误,但是1=2逻辑判断为假,所以返回错误;
字符型判断:当输入的 x 为整型时: http://xxx/?id = x
后端中 sql 语句类型大致如下:
select * from <表名> where id = 'x'使用and ‘1’ = ‘2’ 来判断:
url 地址中输入: http://xxx/?id= x and 1=1
页面依旧运行正常,继续进行下一步。
url 地址中输入: http://xxx/?id= x and 1=2
页面运行错误,则说明此sql注入为数字型注入。
原理相同
想一想如果我们同样使用and 1=2 判断会如何?
select * from <表名> where id = 'x and 1=2'
查询语句将 and 语句全部转换为了字符串,并没有进行 and 的逻辑判断,所以不会出现以上结果,故假设是不成立的。
五,SQL注入手法:根据有无回显:
- 联合注入
- 报错注入
- 布尔盲注
- 时间盲注
根据提交方式:
- POST注入
- GET注入
- HTTP HEAD注入
- Cookie注入
- 搜索注入
其他注入:
- 堆叠注入
- 宽字节注入
- 二次注入
总结:
本文是学习过程中所做的笔记,希望可以帮自己理顺SQL注入,也希望能帮助初学者对于SQL注入有一个比较清晰的认识;



