2021-11-23
什么是SQL注入
SQL注入是指用户能够控制前端参数,构造sql语句影响到后端数据库的行为。
注入
1.注入类型
- 数字型: ?id=2-1或者加减之类的运算
- 字符类型:?id=1‘ 或者加入一些字符
2.注入技巧
布尔盲注
含义:回显页面只有正确和错误
常见的payload:
(1).length函数:返回字符串str的长度,以字节为单位
(2).substr函数:截取字符串字符
(3).ascii函数:返回字符串中的最左侧字符的ascii码时间盲注(参考:https://xz.aliyun.com/t/5505)
含义:没有明显的回显,只能使用特定的时间来判断
常见使用payload:
(1).sleep(n)函数:注入时延迟 n 秒输出(不建议实际的渗透测试使用)
(2).benchmark函数
BENCHMARK(count,expr)
benchmark函数会重复计算expr表达式count次
(3) 笛卡尔积
利用and短路运算规则进行时间盲注。
(4) GET_LOCK盲注
(5) 正则DOS RLIKE注入
报错注入
含义:在错误的回显页面回显数据库的信息
常见使用payload:
(1) 基于格式错误的报错(Xpath语法错误)
<1> extractvalue(xml_document,Xpath_string)函数--从document中返回包含string的字符串,如果不符合xpath的语法就会报错,将查询的结果放在报错信息中
<2> updatexml(xml_document,xpath_string,new_value)函数--将document的中符合string的字符串替换为value值
(2) 基于主键重复错误(参考:http://www.hellomao.top/2019/08/16/web_mysql_floor/)
<1> rand() 生成随机数,配合floor函数使用,group by
(3) 其他报错(大佬求补充)堆叠注入
可以执行多条语句,将多条sql语句来同时执行宽字节注入(参考:https://www.freebuf.com/articles/network/282252.html)
GBK编码,能够绕过magic_quotes_gpc函数
3.注入位置
(1) GET
(2) POST
(3) Cookie
(4) 搜索型注入
(5) HTTP 头注入
sql注入常见位置
1.登录框
2.搜索框
3.url参数值
4.信息设置
5.所有与数据交互的点都有可能存在SQL注入
修复与建议
1.预编译
代码的可读性和可维护性
尽可能提高性能
提高安全性
2.正则过滤参数
3.php开启magic_quotes_gpc