注入
随着B/S模式应用开发的发展,使用该模式编写程序的程序员越来越来越多,但是由于程序员的水平参差不齐,相当大一部分应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想要知的数据,这个就是所谓的SQLinjection,即sql注入式攻击。
脚本注入攻击者把SQL命令插入到WEB表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令,在某些表单中,用户输入的内容直接用来构造动态的SQL命令,或作为存储过程的输入参数,从而获取想得到的密码或其它服务器上的资料。
注入原理:
所谓的SQL(结构化查询语言)注入,简单来说就是利用SQL语句在外部对SQL数据库进行查询,更新等动作。首先,数据库作为一个网站最重要的组件之一(如果这个网站有数据库的话),里面是储存着各种各样的内容,包括管理员的账号密码,
网站的配备内容等,一旦里面的数据被某人获得或者是被修改,那么那个人就可能获得整个网站的控制权。至于怎么获得这些数据,那些MSSQL弱口令的就不说,剩下的最有可能就是利用注入漏洞。
当用户在网站外部提交一个参数进入数据库处理,然后把处理后的结果发给用户,这个是动态网页最常见的,但是这个参数一旦没有被过滤,使得我们自己构造的sql语句也可以和参数一起参与数据库操作的,那么SQL注入漏洞就会产生
一个网站上存在外地数据提交是很正常的,一般都是用参数接受(request),然后再进行处理,而涉及于数据库操作的却占了很大的一部分。例如下面的例子
http://www.poruin.com/1.asp?cs=1
这个地址包含了参数1,以及传递该参数的变量cs,意思就是,在http://www.poruin.com的文件夹里有一个1.asp文件,1.asp文件内部存在cs变量,作用就是接受有外部提交的一个参数:1,也可以是其他的,那么在1.ASP这个文件里的相关代码一般
就是这样:
…………
cs=Request("id")
sqlsever="select * form xx where id='"&cs&"'"
……………
用request读取id变量的内容,然后进行SQL查询,语句就是 select * from xx where id = 1,这个比较好理解吧,但是我来用最经典的注入漏洞检测方法,在参数后面加上’,地址就变成http://www.poruin.com/1.asp?id=1'
查询语句就变成了sqlserver=select * from xx where id = ‘1’' ,后面多了一个',出现闭合问题,如果没有过滤的那就会提示没有闭合的’。
利用小竹贡献的and 1=1和and 1=2 原理也还是一样
select * from xx where id = 1 and 1=1
select * from xx where id = 1 and 1=2
1=1是成立的,而1=2是不成立的,那么查询结果就是: 真 and 假 最终结果是错
所以,第一个地址返回正常,第二个地址返回不正常,这样就可以检测出有没有漏洞。
再者参数后面跟着的是SQL语句呢,例如更新语句:
Update admin set passwd = 'poruin' where user= 'admin'
url就是:http://www.poruin.com/1.asp?id=1 and update admin set passwd = 'poruin' where user= 'admin'
查询语句就是:select * from xx where id = 1;and update admin set passwd = 'poruin' where user= 'admin'
存在此漏洞的不但是asp access, asp sql server, php mysql ,jsp oracle等都有类似问题。
经济学上的注入:
注入:指新加入经济体的收入流量。与之相对应的是漏出,指脱离经济循环的收入流量。譬如,个人或企业在开户银行增加储蓄存款,对于宏观经济来说是漏出;而银行将这些存款放贷出去,借款者又将其用于实业投资,这就是注入。
如注入大于漏出,则经济活动规模会扩张;
如注入小于漏出,则经济活动规模会收缩。