文章目录
SQL注入
一、SQL注入的概念
1、原理
- SQL注入就是指web应用程序对用户输入数据的合法性没有进行判断的前提下
- 前端传入后端的参数是攻击者可控的,并且参数带入数据库查询
- 攻击者可以通过构造不同的SQL语句来实现对数据库的任意操作
2、前提
- 用户参数可控
- 参数可带入到数据库,并且拼接到SQL语句,最后数据库要执行这些SQL语句(静态网页的话就不行,因为静态网页中浏览器即用户没有和数据库交互)
3、危害
- 数据库敏感信息泄漏
- 页面被篡改
- 数据库被恶意操作
- 服务器被远程控制
4、形成的原因
- 数据与代码严重分离
- 用户提交的参数数据未做充分检查过滤就被带入到SQL命令中,原有的SQL命令的语义被改变,且成功被数据库执行了
二、SQL注入
1、注入过程
- 客户端参数值等数据被修改
- 服务端将未经检查和过滤的数据直接注入到SQL语句中
- 数据库执行被修改后的SQL命令
- 服务端将执行后的结果返回给客户端
- 客户端根据获取到的敏感信息进行进一步注入
2、分类
2-1、根据注入位置的数据的类型
- 字符串注入
- 数字注入
2-2、根据返回结果
- 显错注入(error-based)
- 盲注
- 布尔类型 boolean blind
- 时间类型 time-based blind
3、get类型
- get类型基于报错的SQL注入
- get基于报错的SQL利用
- get基于时间的盲注
- if(ascii(substr(database(),1,1)=115,1,sleep(3)))
- get基于布尔的盲注
- select lenght(database())
- select ascii(substr(database(),1,1))>N
4、post类型
- POST类型基于报错的SQL注入
- 单引号/双引号/括号/以上三个联合
- POST基于时间的盲注
5、SQL注入绕过的手段
- 去除注释符号的SQL注入
- ’ or ‘1’='1
- 过滤and 和or的SQL注入
- 用符号替换 && ||
- 大小写 双写
- 空格URL编码
- %20
- 大小写
- and AnD
- URL编码
- https://www.w3school.com.cn/tags/html_ref_urlencode.html
- 双写
- oorr
- 内联注释
- /!select * from users/
6、绕过登录/post类型的SQL注入
- 绕过登录界面的账号密码输入(无需输入正确的账号密码即可)
7、获得敏感信息思路/get方法
- 1、首先查看有没有注入点
- 数字
- 字符
- 单引号/双引号/括号/以上三个联合
- 反斜线
- 起到转义作用
- 2、接着看注入点对应的表中字段数目
- order by
- 3、尝试替换要查询的SQL语句
- 4、查看MySQL版本
- 5以及5以上
- 会有一个information_schema的数据库
- 里面存储着DB服务器中存在的所有数据库名、表名、列名
- 5以及5以上
- 5、查询获取数据(用户名密码)
- 信息在information_schema表里面
- 使用联合查询union [all]
8、MySQL注入读写文件
- load_file
- 读取文件
- 前提条件
- 用户权限要够
- secure_file_priv不为null
- into outfile
- 写入文件
- 前提条件
- general_log=on
- 文件路径
- 使用绝对路径
- sqlmap进行测试
- –file-read
9、HTTP头中的SQL注入
- user-agent
- cookie
- 保存用户信息在浏览器中
- sqlmap --level 3
- referer
- updatexml
- 报错的信息
- 闭合引号的方式
- ’ or ‘1’='1
- -r target.txt