前言
一个安全设计原则:数据与代码分离原则。他就是专门为了解决注入攻击而产生的。
注入攻击的本质,是把用户输入的数据当做代码执行,有两个关键条件:第一个是用户能够控制输入,第二个是原本程序要执行的代码,拼接了用户输入的数据。
SQL注入
拼接过程很重要,正因此才导致了代码的注入。
在SQL注入的过程中,如果网站的web服务器开启了错误回显,则会为攻击者提供极大地便利。
1盲注
回显关闭后,攻击者必须找到一个方法来验证注入的SQL语句是否得到执行。
通过简单的条件语句,1=2,1=1,根据页面返回是否发生变化,来判断SQL语句是否得到执行,判断SQL注入漏洞是否存在。
2Timing Attack
利用BENCHMARK()函数,可以让同一函数执行很多次,使得结果返回时间比平时要长,通过时间长短的比较,可以判断注入语句是否得到执行成功。
----------找到了SQL注入漏洞,仅仅是一个开始,要发起一个完整的攻击,还有很多事情要做。
数据库攻击技巧
1常见的攻击技巧
猜测数据对应版本技巧,确认表名技巧,读写文件技巧,
2命令执行
在MySQL中,除了导出webshell间接地执行命令外,还可以利用用户自定义函数的技巧,即UDF来执行命令。
3攻击存储过程
在my sqlserver 中,存储过程xp_cmdshell可谓臭名昭著,无数黑客利用他在讲到注入sql server时都是使用它执行系统命令。
除了利用存储过程直接攻击之外,存储过程本身也可能存在注入漏洞。
4 编码问题
要解决这个问题就是要统一数据库,操作系统,web应用所使用的字符集,以避免各层对字符的理解存在差异,统一设置为UTF-8是一个很好的方法。
5SQL Column Truncation
正确的防御SQL注入
要做的就是两件事:
找到所有的SQL注入漏洞
修补这些漏洞。
像 使用预编译语句,绑定变量。
使用存储过程,使用安全的存储过程来对抗注入。
检查数据类型
使用安全函数
数据库自身角度。用该使用最小权限原则,避免web应用直接使用root,dbowner等高级权限账户连接数据库。
其他注入攻击
xml注入,代码注入,CRLF注入("\r","\n");