各种应用攻击中,注入攻击是被利用最多的,也是危害最大的,同时,相对而言,也是比较容易集中处理的漏洞类型,通过SAST(静态代码扫描工具)也是很容易发现的。 因此此类漏洞的发现与处理对于系统的安全与稳定非常重要。但是,由于注入攻击的漏洞类型比较多,一种攻击类型在不同的系统预防方法还不一样,这就导致了比较大的困难来预防注入漏洞。
这里根据统计的注入漏洞类型,把危险的字符列举出来,把相关的处理编码方法也列出来,希望对于注入漏洞类型的攻击的预防能够有所帮助。这里虽然列出了可能的危险字符,但是一般还是不建议使用输入验证的方法,除非,能够采用白名单的方法验证某些请求中的参数。
攻击类型 | 危险字符 | 编码方法 | 例子 | 系统类型 | 说明 |
SQL注入 | ‘ | 添加一个单引号转义 | 例如:' -> '' | Oracle | Oracle 可以通过ESCAPE指定转义字符,例如: SELECT * FROM users WHERE name LIKE '%/_li' ESCAPE '/' |
' \ | 添加一个\转义 | 例如:‘ -> \' | MySQL | ||
' | 添加一个单引号转义 | 例如:' -> '' | SQL Server | ||
% _ [ ] | 使用中括号[]转义 | 例如:% -> [%] | MySQL | ||
% _ { } | 使用大括号{}转义 | 例如:% ->{%} | Oracle | ||
% _ [ ] | 使用中括号[]转义 | 例如:% -> [%] | SQL Server | ||
LDAP注入 | * ( ) \ NUL | 反斜杠“\”再加上字符的16进制ASCII值 | 例如: * -> \2a | ALL | NUL是空字符,所以LDAP注入的判断需要注意\的处理? 可以先不考虑此字符 |
XSS | & < > “ ’ / | HTML编码 | 例如: & -> & | ||
" NUL \ | JavaScript 编码 | 例如: ; -> \x3b 或者 \u3b | |||
Xpath注入 | & < > “ ’ | HTML编码 | 例如: & -> & | 需要注意 & 怎么处理? 可以先不考虑此字符 | |
JSON注入 | ` | 使用反斜杠+x16进制 | 例如: " -> \x22 | ||
使用反斜杠+ 转义字符 | 例如: " -> \“ \ -> \\ | 一般用这种编码比较多 | |||
XML注入 | < > “ ’ | HTML编码 | 例如: < -> < | ||
OS命令行注入 | ; | & | \ 转义 | 例如: | -> \| | Unix | 如果这些字符出现在双引号“或者反单引号`内,不需要编码 |
^ 转义 | 例如: | -> ^| | Windows | 如果这些字符出现在双引号之内,就不需要编码 | ||
’ “ | 添加一个\转义 | 例如:' -> \' | Unix | ||
" | 双引号,添加一个双引号 | 例如:“ -> ”“ | Windows | ||
正则表达式注入 | 只要NetWorkBad,就可能,所以不需要特殊处理 | ||||
脚本引擎代码注入 | 只要NetWorkBad,就可能,所以不需要特殊处理 | ||||
JNDI引用注入 | 只要NetWorkBad,就可能,所以不需要特殊处理 | ||||
表达式语言注入 | 默认不需要特殊处理 | ||||
HTTP Header注入 | \r\n | 编码可以采取16机制或者base64等都可 | 只要有\r\n就报,所以不需要特殊处理 | ||
HTTP Cookie注入 | \r\n | 编码可以采取16机制或者base64等都可 | |||
SMTP Header注入 | \r\n | 编码可以采取16机制或者base64等都可 | |||
日志伪造 | \n | 只要有\n就报,所以不需要特殊处理 | |||
IMAP命令行注入 | \r\n | 只要有\r\n就报,所以不需要特殊处理 | |||
POP3命令行注入 | \r\n | ||||
SMTP邮件命令行注入 | \r\n | ||||
HTTP参数污染 | & | URL编码 | 例如: & -> %26 | 只要有&就报,不需要特殊处理 | |
XML实体注入 | 只要允许XML实体解析,就会出现,所以不需要特殊处理。 除非检测是否含有 <!ENTITY 关键字 | ||||
XQuery注入 | ‘ " & | HTML编码 | 例如: & -> & | ||
XSLT注入 | & < > " ' | HTML编码 | 例如: & -> & | 只要是networkbad,就有可能。否则,需要关键控制。 | |
NoSQL注入 | $ ' | 没有转义和编码 | ' -> \' | 只要有就可能有漏洞 | |
路径遍历 | .. / \ ~ | 没有编码 | windows系统下,还需要关注%,例如:%SystemRoot% |
可能有某些漏洞类型有所遗漏或者有列举不正确的地方,希望看到的同学能够指正。 谢谢!
参考:
SQL Injection - SQL Server | Microsoft Learn
https://github.com/unicornsasfuel/sqlite_sqli_cheat_sheet
How does XML External Entity Injection (XXE) impact customers? | Packetlabs
https://www.balisage.net/Proceedings/vol7/html/Vlist02/BalisageVol7-Vlist02.html
https://www.acunetix.com/blog/web-security-zone/nosql-injections/