‘SQL注入是常见的WEB安全漏洞,
攻击者利用这个漏洞,
可以访问修改数据
或者利用潜在的数据库漏洞进行攻击’
(1) .漏洞原理
针对SQL注入的攻击行为可描述为通过用户可控参数中注入
SQL语法,破解原有SQL结构,达到编写程序意料之外的攻击行为
其成因可以归结:
【1】.程序编写者在处理程序和数据库交互时,使用字符串拼接的方式构造SQL语句
【2】.未对用户可控参数进行足够的过滤便将参数内容拼接进入到SQL语句
“注入点可能存在位置”
根据SQL注入漏洞的原理,在用户"可控参数"中注入SQL语法
web应用在获取用户数据地方,只要带入数据库查询,都存在SQL
注入的可能,这些地方通常包括
GET 数据
POST 数据
HTTP 头部(请求报文字段)
Cookie 数据
....other
(2) .漏洞危害
【】获取数据库多种信息
【】获取数据库内容
【】可能获取webshell 'mof/udf 提权'
【】或者服务器系统权限
(3) .分类
-数据类型分类
--数字型注入
注入点的数据,拼接到SQL语句中是以数字型出现的
数据两边没有引号
--字符型注入
.1 UNION query SQL injection (可联合查询注入)
.2 Rrror-nased SQL blind SQL injection (报错型注入)
.3 Boolean-based blind SQL injection (布尔型盲注)
.4 Time-bassed blind SQL injection (基于时间延迟注入)
.5 Stacked queries SQl injection (可多语句查询注入)
(4) .MySql相关
.@注释
#
-- (杠杠空格)
/*...*/
/*...*/ 内联查询
.@元数据库
存储所有库名表名等
'information_schema'
存储所有表名
->tables
.@常用参数和函数
"select" +
【1】.系统
version() 版本
database() 数据库名
user() 用户名
current_user() 当前用户名
system_user() 系统用户名
@@datadir 数据库路径
@@version_compile_os 操作系统版本
【2】.字符串处理
length() 返回字符串长度
length(database()) 数据库长度
substring(参数1,2,3)
substr(参数1,2,3)
mid(参数1,2,3)
截取字符串参数
1.截取的字符串
2.截取起始位置,从1开始取参
3.截取的总长度
left('字符串',number) 从左侧开始取指定个数的字符串
left(xxx,1)=y
concat() 没有分割符的连接字符串
concat('a','b','c')
->abc
concat_ws() 含有分隔符的连接字符串
concat_ws('-','a','b','c')
->a-b-c
group_contcat() 连接一个组的字符串
select group_concat(id) from user;
ord() 返回ASCII码值
ord('a')
ascii()
适应于屏蔽引号的条件下
hex() 将字符串转换为十六进制
unhes() hex 的反向操作
md5() 返回MD5
floor(x) 返回不大于x 的最大整数
round(x) 返回参数x 接近的整数
rand() 返回0-1 之间的随机浮点数
【3】.文件操作(需要权限)
load_file('/路径') 读取文件,并返回文件内容作为一个字符串
(select 'test'into outfile '路径') 上传文件
sleep(n) 睡眠时间指定的秒数
if(true,t,f) if 判断
true->t
flase->f
find_in_set() 返回字符串列表中的位置
benchmark() 指定语句执行的次数
name_const()
【4】.正则表达式
regexp
类似like
.注入点判断
会在疑似注入点的连接或参数后面尝试提交以下数据