目录
SQL注入笔记
一、概述
1.什么是SQL注入
攻击者利用web应用程序对用户输入验证上的疏忽,在输入的数据中包含对某些数据库系统有特殊意义的符号和命令,让攻击者有机会直接对后台数据库系统下达指令,进而实现对后台数据库乃至整个应用系统的入侵
2.SQL注入原理
服务端没有过滤用户输入的恶意数据,直接把用户输入的数据当做SQL语句执行,从而影响数据库安全和平台安全。
两个条件:
- 用户能够控制输入
- 原本程序要执行的SQL语句,拼接了用户输入的恶意数据
注入过程
3.注入带来的危害
- 绕过登录验证:使用万能密码登录网站后台等
- 获取敏感数据:获取网站管理员帐号、密码等
- 文件系统操作:列目录,读取、写入文件等
- 注册表操作:读取、写入、删除注册表等
- 执行系统命令:远程执行命令
4.注入示例
- 通过在用户名处传入参数 ’ or 1=1 – 进行万能密码登录
SELECT username, password FROM users WHERE username=' textvalue' or 1=1 -- ' AND password='textvalue2'
(注意:–后面有一个空格)
输入字符
formusr = ' or 1=1 --
formpwd = anything
实际的查询代码
SELECT * FROM users WHERE username = '' or 1=1 -- AND password = 'anything'
例子
语句:
数据库表:
登录界面:
二、分类
1.注入点类型分类
- 数字型
- 字符型
- 搜索型
数字型注入
输入的参数为整数,如ID、年龄、页码等,如果存在注入型漏洞,则为数字型(整型) 注入
http://www.testweb.com/user.php?id=8
检测方法
字符型注入
输入的参数为字符串
与数字型注入的区别在于:字符型注入一般要使用单引号来闭合
http://www.testweb.com/test.php?user=admin
测试方法
2.按照执行效果分类
- 布尔盲注
即可以根据返回页面判断条件真假的注入。 - 时间盲注
即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行
(即页面返回时间是否增加)来判断。 - 报错盲注
即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。 - 联合查询注入
可以使用union的情况下的注入。 - 堆查询注入
同时执行多条语句的注入。
三、寻找SQL注入点
1.识别web应用与数据库交互的可能输入
- GET请求参数
- POST请求参数
- cookie
- User-Agent
- Referer
- Host
GET方法
一种请求服务器的HTTP方法,使用该方法时,信息包含在URL中
点击一个链接时,一般会使用该方法
格式:
?text=value1&cat=value2&num=value3…
修改方法:
浏览器的导航栏中直接修改即可操纵这些参数
HackBar插件
POST方法
post是一种用于向web服务器发送信息的http方法
数据信息无法在url中看到
2.手工注入过程
- 判断是否存在注入点
- 判断字段长度
- 判断字段回显位置
- 判断数据库信息
- 查找数据库名
- 查找数据库表
- 查找数据库表中所有字段以及字段值
- 猜解账号密码
- 登录管理员后台