SQL注入攻击——这个让许多站长汗颜的入侵方式,曾经毁灭了数以千计的网站。当国外的黑客们信手玩弄SQL攻击时,国内互联网还处于风平浪静的态势,但当中国黑客们真正开始注入之旅时,绝大多数网站的噩梦随之而至。你可能会怀疑国内站长们所作的安全工作,但事实上,做好SQL攻击防范是非常复杂的,因为它的变数太多,手法更加灵活。
SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别, 所以目前市面的防火墙都不会对其发出警报,如果管理员没查看日志的习惯,可能被入侵很长时间都不会发觉。就国内的注入流程基本是:
1.首先检测一个SQL注入点
2.使用集成化工具注入
3.得到数据库
4.获得管理员权限并试图上传网页木马
5.获得整站权限,甚至是服务器ROOT
一、战争刚刚开始
大家都知道,随着动态语言的出现以及交互式模型的广泛应用,程序员开始越来越倾向这种高效率、高集成度的方式开发网站。但很多程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患,比如对特殊变量的过滤,对一些特殊字符的屏蔽等等。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。
尽管服务器返回了一些错误信息,但只要有信息,黑客就可以通过信息的提示进行枚举和循环测试,知道出现不同的信息出现,这是SQL注入的标志方法,以此来猜解出管理员的密码或者数据库名称。上面我们说过,SQL注入的手法相当灵活,在注入的时候会碰到很多意外的情况。能不能根据具体情况进行分析,构造巧妙的SQL语句,从而成功获取想要的数据,是高手与“菜鸟”的根本区别。
二、进攻套路
如果你的网站某个页面不幸被黑客发现注入点,那接下来发生的事情的确会非常恐怖。首先,有很多专业级的注入工具(比如Domain)会帮助黑客来直接分析并入侵。我们还是先简单介绍一下一种基本入侵的方式。
一般来说,SQL注入一般存在于形如:HTTP://xxx.xxx.xxx/123.asp?id=XX等带有参数的ASP动态网页中,有时一个动态网页中可能只有一个参数,有时可能有多个参数。如果我们确定是带有参数的动态网页且此网页访问了数据库,那么就有可能存在SQL注入。如果ASP程序员没有安全意识,不进行必要的字符过滤,存在SQL注入的可能性就非常大。
刚才提到了错误提示信息,为了全面了解动态网页回答的信息,首选请调整IE的配置。把IE高级设置中的“显示友好HTTP错误信息”前面的勾去掉,这样IE就会完整的将错误信息展示出来了。
接着在链接地址后面加个“'”,回车看看是否有错误提示?如果没有,加上“ and 1=1”呢?当然这只是两个最基本的方法,灵活也正是灵活在这里,千奇百怪的参数和特殊字符让数据库和程序防不胜防,直到检验出它的软肋。
事实上,配合筛选,我们就可以猜出数据库名称。而这一切已经被专门的注入工具包含了。只要把链接输入,它就会自动分析出网站的数据库,进而猜解里面的表。猜解出管理员的名称和密码就好办了(如果密码被加密过,用COOKIES伪装吧)。一般在整站的后台中,都会有上传文件的选项,如果能直接上传ASP文件最好,遗憾的是,稍有安全防范意识的程序员都不允许这样上传,毕竟还有FTP。一般可能只允许JPG、GIF等图片格式,现在有很多CER的木马,可以轻松突破这里。
上传了ASP木马,就等于控制了整个虚拟目录,如果服务器管理员粗心大意,你甚至可以管理整个服务器,这就是早期出现通过旁注方式来入侵的目的。但不管怎样,至少你被上传木马的站点是挂了,更改文件、下载数据库……ASP木马的功能比FTP甚至还强大。
三、防范策略
既然SQL攻击方法灵活,那防范起来自然有难度。但还是有一些规律可循,以不变应万变。在设计或者维护 Web 网站时,程序员应该尽自己最大可能来过滤关键字符,这是SQL入侵的首要步骤,从这关把握住是相当必要的。程序员可以设计两个页面:一个是HTML页面,另一个ASP动态页面。这也就是为什么在今天看到越来越多静态页面地址的网站,其实在背后,仍然是通过ASP或者其它动态方式进行数据库操作的。
为了减轻危害,还可以限制用程序所用的数据库访问帐号权限。一般来说,应用程序没有必要以sa的身份访问数据库。给它的权限越少,你的网站越安全!你还可以考虑分别给每个需要访问数据库的对象分配只拥有必需权限的帐号,以分散安全漏洞。当然,这对于绝大多数的“黑客”来说意义不大,因为整个注入过程全由软件代劳了。他们就等着上传木马了。
所以,控制文件上传是非常必要的。你应该想尽一切办法让用户少上传文件,严格控制文件类型,并且做到后台也如此。ASP木马并不仅仅是ASP后缀的文件,越来越高级的技术会慢慢让其更加难以防范,长期上讲,拒绝上传文件还是很有必要的。比如,有些程序员喜欢用排除法来防止木马,它让程序遇到ASP、EXE等程序是就隔离并阻止上传,与其这样,不如用反向过滤方法。如只允许JPG图像上传,这样不管有什么新格式的木马出现,只要不是JPG格式的,就都会被禁止上传。
还有就是需要提醒你的服务商,让他做好安全工作,至少虚拟目录间不要随意跨越,权限设置很关键。当然你也要经常查看FTP目录,看看是否有可疑的文件。网上有一种ASP文件,上传以后访问可以自动检测虚拟目录中是否包含ASP木马,感兴趣的朋友可以试试看,但这种方法并不是包治百病。
总体来说,SQL注入攻击可谓易攻难防。这也是为什么它经久不衰的原因,虽然目前SQL注入漏洞越来越少,程序员编写的程序也越来越完善,但安全无止境,还是会出现很多网站遭遇SQL注入攻击的问题,打个比方,SQL攻击就像DOS攻击一样,慢慢地在平民级普及开来,这种力量不容小觑。