几年前,SQL注入在世界范围内很流行,但现在,SQL注入仍然是最流行的攻击方法之一,开发人员为此头疼。当然主要是因为注入攻击的灵活性,一个目的,多条语句,多种编写方法。SQL注入可以分为工具和手工两种。由于自动化,工具通常比手动注入效率高得多,但与手动注入相比,它们受到限制,因为它们没有针对性。
所有的输入都可能是有害的,有参数的地方都可能存在SQL注入。但是由于浏览器的限制,网站协议中的一些隐藏链接、API调用和参数往往被忽略。那么如何进行全面的SQL注入挖掘呢?在渗透测试中,无论注入工具多么强大,都会有局限性,手动注入可以解决这个弱点。当然,手动注入需要渗透者对数据库的语法有一定的了解。但是由于SQL注入的灵活性和多样性,如果详细讨论的话,恐怕可以写成单本书了。在这里,作者将选择最具代表性的例子进行论证。
注入遇到的一个常见情况是注入得到的加密密文无法求解。为了解决这个问题,这里解释几种可行的方法。(1)使用国外的搜索引擎,往往会有意想不到的收获,最常见的是Google。(2)用Whois查出管理员邮箱,然后发邮件通知管理员更改密码。邮件内容无非是“我们是XXX检测中心,你的网站有风险。请立即更改管理员密码……”。(3)分析Cookie。有时加密的密文会出现在cookies中。这种情况下,cookies中的密文可以直接被管理员的密文替换。(4)在特定的注入环境中,原始密文有时可以被新密文替换。当然这种方法的执行条件比较苛刻,实践中很少遇到。
(5)使用密码检索功能。使用秘密安全问题来检索密码是很常见的。在这种情况下,可以注入秘密安全问题的答案,然后使用密码检索功能成功登陆目标帐户。(6)逻辑缺陷。比如一些登录功能、修改功能、密码检索功能等都是以密文的形式直接在数据包中传输的。这时可以用密文代替,这样就可以登录并更改密码了。
如何防护SQL注入攻击呢?
1.对代码进行过滤非法符号如</?&>之类的,对一些脚本标签scrpt以及img或frame都进行过滤和替换。
2.对一些函数变量直接进行强制定义,比如金额函数这里直接限定只能写入正整数类型的数值,那么其他的参数像姓名的话可以直接限定到只允许写入中文和英文的数值,其他的以此类推。
3.对一些带入数据库查询和更新的语句,一定要看看get或post过来的数据参数是否是直接把参数类型锁定好了的,防止被注入恶意语句导致被攻击。
4.如果对着代码方面的问题不懂得话可以到网站安全公司去寻求帮助,国内如SINESAFE,鹰盾安全,绿盟,启明星辰等等。