SQL注入
SQL注入攻击是通过构建特殊的输入作为参数传入WEB程序,这些输入大都是SQL中的一些组合,通过执行SQL语句进而执行攻击者的操作。
SQL注入分类
- 数字注入型
- 字符注入型
常见的注入类型
- POST注入:注入字段在POST中
- Cookie注入:注入字段在Cookie中
- 延时注入:利用数据库的延时特性注入
- 搜索注入:注入处为搜索的地方
- base64注入:注入字符串需经过base64加密
利用的方式大致可以分为几类:
利用数据库获得更多的数据或者更大的权限
- 查询数据
- 读写文件
- 执行命令
Mysql
获取字段数:order by x 取临界值
获取数据库名:database()
获取数据库版本:version()
数据库用户:user()
操作系统:@@version_comile_os
mysql注入文件信息
读取函数:load_file(’’)
写入函数:into outfile
关于网站路径的获取:
- 报错显示
- 谷歌搜索错误信息
- 读写配置文件
- 漏洞报错
- 遗留文件
- 字典猜解
注意:路径符号及编码
注入问题
魔术引号:magic_quotes_gpc 开关
如果输入的数据有单引号(’)、双引号(”)、反斜线()与 NUL(NULL 字符)等字符都会被加上反斜线,即被转义(php5.4版本后移除)
安全性函数:
- addslashes():原理和magic_quotes_gpc相似,但是不要对魔术引号已经转义过的字符串使用,这会导致双层转义。
- htmlentities():这个函数对于过滤用户的数据非常有用,它将会将一些特殊字符转换成HTML实体。
- htmlspecialchars():把HTML中的几个特殊字符转义成HTML Entity(格式:&xxxx;)形式,包括(&),(’),("),(<),(>)五个字符。htmlspecialchars可以用来过滤GET,POST,$COOKIE数据,预防XSS。
- strip_tags():会过滤掉NUL,HTML和PHP的标签,JavaScript。
高权限跨库注入
跨库注入条件:root权限
网站之间可能存在数据库交叉,可以同过已知的root权限进行跨库注入。
顺序:获取数据库名称-获取指定表名信息-获取列名信息-获取指定数据(注意指定数据库名,注意转义)
提交方式注入
- POST登录框注入
两个条件:
1.用户可以控制传参。
2.用户输入的语句被带入到数据库中查询。
首先判断是否有注入点,填入闭合符号看页面是否异常如【‘、“、)、’)、”)】判断结束后输入“and 1=1”判断是否正常,注入点判断完毕。
接着使用order by 语句查询有几个字段,order by X#,X为字段数目,正确则页面正常 - Cookie验证注入
- HTTP头注入
实际情况下,有些站点接受数据是以http数据包中的http头部进去数据接受,所以测试注入点的时候,需要将注入语句写入到http头部中。
参数类型注入
数字、字符、搜索型
$id=$_GET{'x'};
select * from news where id=1
//搜索型为id like'%xxxxxx%'
//搜索型单引号拿#过滤
参数加解密注入
常见加密格式:
md5
盲注攻击(基于时间延迟)
普通联合注入和盲注的区别:
1.普通注入,效率高,兼容性差
2.盲注,效率较低,兼容性强
工具采用的基本都为盲注。
sleep()
if(条件,Ture,False)
mid(str,1,1) 截取
ord ascii 编码
//获取表名长度,或用mid指定特定位ascii码
union select 1,2,3,sleep(if(length(table_name)=4,0,5))
from information_schema.tables where table_schema=database()limit0,1
注意事项
- Sql语句组合拼接,保证sql语句正常运行
- Sql语句中闭合使用(符号或截断)
- 每个不同注入方式和网站应用功能有关