owasp top A1 注入 Injection (1)SQL注入.2
一.SQL注入防御
1.根据前文我们发现主要是根据输入的信息返回错误来判断是否存在注入点,那么如果关闭了应用的错误提示就可以解决一部分问题。
2.使用WAF,就是web应用防火墙,WAF主要功能是:
2.1检测异常协议,对于不符合协议规范标准的不允许通过,也可以限制部分协议通过
2.2审计管理,限制用户的行为,对于安全策略进行增删改查,还有角色权限
2.3输入验证,包括客户端和服务端进行验证
2.4基于规则和基于异常的保护,判断用户行为是否正常
2.5黑白名单,白名单允许哪些用户,黑名单是知道了已知问题进行限制
2.6会话保护,对于url是否拦截,拦截后是否重定向,还有一些过滤规则
3.输入进行过滤,包括常见的大小写过滤,还有一种是替换了关键字的过滤,
比如过滤select:SEselectLECT 过滤了select 最后就会出现SELECT;
所以在进行正则表达式的时候要考虑到,大小写还有拼接的情况
4.限制输入长度,像是联合查询这种很长的语句进行限制
5.闲着好数据库的权限,不允许普通用户进行增删改查
6.编译预编语句,首先了解一下查询的过程:
1.词法和语义解析
2.优化sql语句,制定执行计划
3.执行并返回结果
很多时候呢像是查找用户这种语句会被多次执行,只是返回的值可能不同,像是insert插入values值不同,update的set值不同。
预编语句就是把这类查询的值,进行一个替代,就是一次编译、多次运行,省去了解析的过程,能够防止SQL注入
7.数据库信息加密安全,md5彩虹表,可以实现部分破解
8.编程规范,只可以访问存储过程等等
二.对于WAF的绕过
1.理解了如何绕过WAF也能够更好的进行防御,主要是针对WAF的代码进行绕过,有的WAF编写的规则是过滤一些词,例如or,and可以考虑进行大小写拼接替换,如:
1.and--->&& or-->||
2.OorR
2.用户的操作是在WAF的监管下进行查询的访问web页面,如果不仅如此waf只访问web页面的真实IP,可以进行我们想要的操作
3.WAF是对我们的语句进行审查,如果大量资源被请求可能会导致一些逃逸
4.上面说了WAF能够针对协议进行过滤,如:
1.有的只过滤了get请求,我们可以试一下post传参
2.数据格式的改变绕过
3.有的WAF对于页面的审查不严谨,没有全部审查,?id=1&id=2&id=3这种,我们可以在后面进行拼接语句
5.规则绕过,涉及到正则表达式和一个过滤的问题,在测试点找到到底过滤了哪些数据:
1.大小写绕过 UNioN
2.替换关键字 ununion
3.编码 %75nion
4.内联注释 union/* */ select /* */
5.等价替换 and--->&& version-->@@version
6.特殊符号
7.缓冲区溢出
8.十六进制
三.补充其他的注入点
(1)GET 注入
提交数据的方式是 GET , 注入点的位置在 GET 参数部分。比如有这样的一个链接http://xxx.com/news.php?id=1 , id 是注入点。
(2)POST 注入
使用 POST 方式提交数据,注入点位置在 POST 数据部分,常发生在表单中。
(3)Cookie 注入
HTTP 请求的时候会带上客户端的 Cookie, 注入点存在 Cookie 当中的某个字段中。
(4)HTTP 头部注入
注入点在 HTTP 请求头部的某个字段中。比如存在 User-Agent 字段中。严格讲的话,Cookie 其实应该也是算头部注入的一种形式。因为在 HTTP 请求的时候,Cookie 是头部的一个字段。