SQL注入攻击是黑客对数据库进行攻击的常用手段之一。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。
SQL 注入攻击是黑客对数据库进行攻击的常用手段之一。随着 B/S 模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的 SQL Injection,即 SQL 注入。
SQL 注入攻击属于数据库安全攻击手段之一,可以通过数据库安全防护技术实现有效防护,数据库安全防护技术包括:数据库漏扫、数据库加密、数据库防火墙、数据脱敏、数据库安全审计系统。
SQL 注入攻击会导致的数据库安全风险包括:刷库、拖库、撞库。
注入简介
SQL 注入是从正常的 WWW 端口访问,而且表面看起来跟一般的 Web 页面访问没什么区别,所以市面的防火墙都不会对 SQL 注入发出警报,如果管理员没查看ⅡS 日志的习惯,可能被入侵很长时间都不会发觉。但是,SQL 注入的手法相当灵活,在注入的时候会碰到很多意外的情况,需要构造巧妙的 SQL 语句,从而成功获取想要的数据。
总体思路
·发现 SQL 注入位置;
·判断后台数据库类型;
·确定 XP_CMDSHELL 可执行情况
·发现 WEB 虚拟目录
·上传 ASP 木马;
·得到管理员权限;
例子
某个网站的登录验证的 SQL 查询代码为:
strSQL = "select * FROM users WHERE (name = '" + userName + "') and (pw = '"+ passWord +"');"
恶意填入
userName = "1' OR '1'='1";
与
passWord = "1' OR '1'='1";
时,将导致原本的 SQL 字符串被填为
strSQL = "select * FROM users WHERE (name = '1' OR '1'='1') and (pw = '1' OR '1'='1');"
也就是实际上运行的 SQL 命令会变成下面这样的
strSQL = "select * FROM users;"
因此达到无账号密码,亦可登录网站。所以 SQL 注入攻击被俗称为黑客的填空游戏。
应对办法
从安全技术手段上来说,可以通过数据库防火墙实现对 SQL 注入攻击的防范,因为 SQL 注入攻击往往是通过应用程序来进攻,可以使用虚拟补丁技术实现对注入攻击的 SQL 特征识别,实现实时攻击阻断。
攻击步骤
SQL 注入漏洞的判断
一般来说,SQL 注入一般存在于形如:HTTP://xxx.xxx.xxx/abc.asp?id=XX 等带有参数的 ASP 动态网页中,有时一个动态网页中可能只有一个参数,有时可能有 N 个参数,有时是整型参数,有时是字符串型参数,不能一概而论。总之只要是带有参数的动态网页且此网页访问了数据库,那么就有可能存在 SQL 注入。如果 ASP 程序员没有安全意识,不进行必要的字符过滤,存在 SQL 注入的可能性就非常大。
为了全面了解动态网页回答的信息,首选请调整 IE 的配置。把 IE 菜单-工具-Internet 选项-高级-显示友好 HTTP 错误信息前面的勾去掉。
为了把问题说明清楚,以下以 HTTP://xxx.xxx.xxx/abc.asp?p=YY 为例进行分析,YY 可能是整型,也有可能是字符串。
⒈整型参数的判断
当输入的参数 YY 为整型时,通常 abc.asp 中 SQL 语句原貌大致如下:
select * from 表名 where 字段=YY,所以可以用以下步骤测试 SQL 注入是否存在。
①HTTP://xxx.xxx.xxx/abc.asp?p=YY’(附加一单引号),此时 abc.ASP 中 SQL 语句变成了
select * from 表名 where 字段=YY’,abc.asp 运行异常;②HTTP://xxx.xxx.xxx/abc.asp?p=YY and 1=1,abc.asp 运行正常,而且与 HTTP://xxx.xxx.xxx/abc.asp?p=YY 运行结果相同;
③HTTP://xxx.xxx.xxx/abc.asp?p=YY and 1=2,abc.asp 运行异常;
⒉字符串型参数的判断
当输入的参数 YY 为字符串时,通常 abc.asp 中 SQL 语句原貌大致如下:
select * from 表名 where 字段='YY',所以可以用以下步骤测试 SQL 注入是否存在。
①HTTP://xxx.xxx.xxx/abc.asp?p=YY’(附加一个单引号),此时 abc.ASP 中的 SQL 语句变成了
select * from 表名 where 字段=YY’,abc.asp 运行异常;
②HTTP://xxx.xxx.xxx/abc.asp?p=YY&nb ... 39;1'='1',abc.asp 运行正常,而且与 HTTP://xxx.xxx.xxx/abc.asp?p=YY 运行结果相同;
③HTTP://xxx.xxx.xxx/abc.asp?p=YY&nb ... 39;1'='2',abc.asp 运行异常;
如果以上三步全面满足,abc.asp 中一定存在 SQL 注入漏洞。
⒊特殊情况的处理
有时 ASP 程序员会在程序员过滤掉单引号等字符,以防止 SQL 注入。此时可以用以下几种方法试一试。
①大小定混合法:由于 VBS 并不区分大小写,而程序员在过滤时通常要么全部过滤大写字符串,要么全部过滤小写字符串,而大小写混合往往会被忽视。如用 select 代替 select,select 等;
②UNICODE 法:在ⅡS 中,以 UNICODE 字符集实现国际化,我们完全可以 IE 中输入的字符串化成 UNICODE 字符串进行输入。如+ =%2B,空格=%20 等;URLEncode 信息参见附件一;
③ASCⅡ码法:可以把输入的部分或全部字符全部用 ASCⅡ码代替,如 U=chr(85),a=chr(97)等,ASCⅡ信息参见附件二;
攻击背景
随着计算机技术高速发展,越来越让人们头疼的是面临越来越“变态”和复杂的威胁网站技术,他们利用 Internet 执行各种恶意活动,如身份窃取、私密信息窃取、带宽资源占用等。它们潜入之后,还会扩散并不断更新自己。这些活动常常利用用户的好奇心,在用户不知道或未允许的情况下潜入用户的 PC,不知不觉中,帐户里的资金就被转移了,公司讯息也被传送出去,危害十分严重。2006 年 8 月 16 日,靠前个 Web 威胁样本出现,截止到 2006 年 10 月 25 日,已经产生了第 150 个变种,并且,还在不断地演化下去。
网站威胁的目标定位有多个维度,是个人还是公司,还是某种行业,都有其考虑,甚至国家、地区、性别、种族、宗教等也成为发动攻击的原因或动机。攻击还会采用多种形态,甚至是复合形态,比如病毒、蠕虫、特洛伊木马、间谍软件、僵尸、网络钓鱼电子邮件、漏洞利用、下载程序、社会工程、rootkit、黑客,结果都可以导致用户信息受到危害,或者导致用户所需的服务被拒绝和劫持。从其来源说 Web 威胁还可以分为内部攻击和外部攻击两类。前者主要来自信任网络,可能是用户执行了未授权访问或是无意中定制了恶意攻击;后者主要是由于网络漏洞被利用或者用户受到恶意程序制定者的专一攻击。
常用注入工具
啊 d 注入工具
啊 D 注入工具是一种主要用于 SQL 的注入工具,由彭岸峰开发,使用了多线程技术,能在极短的时间内扫描注入点。使用者不需要经过太多的学习就可以很熟练的操作。并且该软件附带了一些其它的工具,可以为使用者提供极大的方便。
明小子
明小子注入工具是跟啊 D 注入工具功能类似的注入工具,集合了常用上传漏洞的利用,webshell 管理,目录查看等功能。
Pangolin
Pangolin(中文译名为穿山甲)一款帮助渗透测试人员进行 Sql 注入测试的安全工具,是深圳宇造诺赛科技有限公司(Nosec)旗下的网站安全测试产品之一。
Pangolin 能够通过一系列非常简单的操作,达到最大化的攻击测试效果。它从检测注入开始到最后控制目标系统都给出了测试步骤。Pangolin 是国内使用率较高的 SQL 注入测试的安全软件,可以说是网站安全测试人员的必备工具之一。
网络分析
SQL 注入攻击是非常令人讨厌的安全漏洞,是所有的 web 开发人员,不管是什么平台,技术,还是数据层,需要确信他们理解和防止的东西。不幸的是,开发人员往往不集中花点时间在这上面,以至他们的应用,更糟糕的是,他们的客户极其容易受到攻击。
Michael Sutton 发表了一篇非常发人深省的帖子,讲述在公共网上这问题是多么地普遍。他用 Google 的 Search API 建了一个 C#的客户端程序,寻找那些易受 SQL 注入攻击的网站。其步骤很简单:
1,寻找那些带查询字符串的网站(例如,查询那些在 URL 里带有 "SSN")
SqlQuery = "select au_lname,au_fname FROM authors WHERE au_id = '" + SSN + "'"
如果你有像上面这个片断一样的 SQL 编码,那么你的整个数据库和应用可以远程地被黑掉。怎么会呢?在普通情形下,用户会使用一个社会保险号码来访问这个网站,编码是象这样执行的:
' URL to the page containing the above code
' SQL Query executed against the database
select au_lname,au_fname FROM authors WHERE au_id = '172-32-9999'
这是开发人员预期的做法,通过社会保险号码来查询数据库中作者的信息。但因为参数值没有被正确地加码,黑客可以很容易地修改查询字符串的值,在要执行的值后面嵌入附加的 SQL 语句。譬如,
' URL to the page containing the above code
' SQL Query executed against the database
select au_lname,au_fname FROM authors WHERE au_id = '';drop DATABASE pubs --
注意到没有,可以在 SSN 查询字符串值的后面添加“ ';drop DATABASE pubs -- ”,通过 “;”字符来终止当前的 SQL 语句,然后添加了自己的恶意的 SQL 语句,然后把语句的其他部分用“--”字符串注释掉。因为是手工在编码里构造 SQL 语句,最后把这个字符串传给了数据库,数据库会先对 authors 表进行查询,然后把我们的 pubs 数据库删除。“砰(bang)”的一声,数据库就没了!
万一你认为匿名黑客删除你的数据库的结果很坏,但不幸的是,实际上,这在 SQL 注入攻击所涉及的情形中算是比较好的。一个黑客可以不单纯摧毁数据,而是使用上面这个编码的弱点,执行一个 JOIN 语句,来获取你数据库里的所有数据,显示在页面上,允许他们获取用户名,密码,信用卡号码等等。他们也可以添加 update/insert 语句改变产品的价格,添加新的管理员账号,真的搞砸你(screw up your life)呢。想象一下,到月底检查库存时,发现你库房里的实际产品数与你的账目系统(accounting system)汇报的数目有所不同。
免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考;文章版权归原作者所有!本站作为信息内容发布平台,页面展示内容的目的在于传播更多信息;本站不提供任何相关服务,阁下应知本站所提供的内容不能做为操作依据。市场有风险,投资需谨慎!如本文内容影响到您的合法权益(含文章中内容、图片等),请及时联系本站,我们会及时删除处理。