0x00 前言
如饥似渴的学习。
0x01 SQL注入漏洞概述
1. 现状
- 高危害
- 攻击频率高
- 攻击普及
2.sql注入的攻击方式
2.1 高权限
在高权限的时候,可以直接写入webshell或者直接执行系统命令等。
2.2 低权限
通过注入获取管理员的密码等信息。
0x02 SQL注入挖掘经验
1. SQL注入出现位置
- 登录页面(http头 client-ip和x-forward-for)
- 获取HTTP头
- 订单处理(订单与购物车交互,会发生二次注入)
2. 普通注入
普通注入分为int型和string型,string型注入需要使用单或双引号去闭合。
2.1 常用关键字
数据库操作
- select from
- mysql_connect
- mysql_query
- mysql_fetch_row
数据库查询 - update
- insert
- delete
3.编码注入
通过输入转码函数不兼容的特殊字符,可以导致输出的字符编程有害数据。最常见的编码注入就是Mysql宽字节以及urldecode/rawurldecode。urldecode是一个转码函数,rawurldecode是一个解码函数。
3.1 宽字节注入
在PHP连接Mysql的时候,设置set character_set_client=gbk 会导致一个编码转换的注入问题。
3.2 漏洞解决方式
- 设置character_set_client=binary
- 使用mysql_set_charset(‘gbk’)设置编码,使用mysql_real_escape_string()函数将参数过滤
- 使用pdo方式
3.3 挖掘关键字
- SET NAMES
- character_set_client=gbk
- mysql_set_charset(‘gbk’)
4.二次urldecode注入
只要字符被进行转换就有可能产生漏洞。通常使用addslashes(),mysql_real_escape_string(),mysql_escape_string()或者开启GPC来防止注入。
第一次提交 ?id=1%2527 这个时候会把%25解析成
如果在这个时候使用urldecode或者rawurldecode函数,就会导致二次注入。
4.1 挖掘
关键词
- urldecode
- rawurldecode
0x03 漏洞防范
1. gpc/rutime 魔术引导
magic_quotes_gpc负责对GET、POST、Cookie的值进行过滤,magic_quotes_runtime对从数据库或者文件中获取的数据进行过滤。
2.过滤函数和类
2.1 addslashes函数
addslashes函数过滤的值范围和GPC一样,单引号,双引号,反斜杠,空字符。
但是它的参数必须是string类型。
2.2 mysql_[real_]escape_string函数
推荐使用mysql_real_escape_string进行过滤。
2.3 intval字符转换
强行将变量转换成int变量
个人感觉这种方法很棒啊,如果都转换为了int型还咋注入。
2.4 PDO prepare预编译
相当于在注入之前进行一个预判断。