I(oLG"z
P {6^ JL0目前的 Web 应用中,绝大多数都会向用户提供一个接口,用来进行权限验证、搜索、查询信息等功能。比如一个在线银行应用,首先会有对注册客户进行身份验证的登录界面,在正确登录后,会提供更多交互功能,如根据客户的银行卡号信息,查询客户的最近交易、转账细节等。这些都是注入缺陷的最佳利用场景。所谓注入缺陷,就是在上述场景中,用户输入的数据被当做命令和查询的一部分,送到后端的解释器中解释执行。如果用户的输入是正常合法的,Web 应用自然会返回正常合理的结果,但是,如果恶意攻击者,利用输入数据可被后台执行的原理,偷梁换柱,使用非法的输入,脆弱的 Web 应用会怎样呢?51Testing软件测试网/["k3S4Bd*E!I%Hq6B[;n
51Testing软件测试网,D^ eX9c8Q/h,[,x3O;k7\下面我们举一个例子来说明注入缺陷是如何进行的。在一个交易网站中,用户必须输入产品 ID 号才可以查看该产品的详细信息。为了实现这个需求,通常会用 SQL 语句查询数据库来实现。开发人员在编写应用程序时,可能会使用如下的 SQL 语句来实现上述目的(这里仅为示例):51Testing软件测试网\,sarO1lT {F_
UT;Z0ub$WAuZ0 Select * from products where product_id = ‘ + 用户输入的 ID +'51Testing软件测试网~ e1I(s$eM Z*|
51Testing软件测试网Q HV
K ]x;uK这里的 products 是数据库中用来存放产品信息的表,+号表示 SQL 语句需要和用户输入的真实 ID 进行拼接。如果用户输入 325,则该语句在执行时变为:51Testing软件测试网R%CvIR
/kL?6O.dSz
\#WW051Testing软件测试网D;y}d!d*~+MOSelect * from products where product_id = ` 325 `51Testing软件测试网'A,VH-[g,Dg S{
aYLusF `6x0数据库会将 ID 为 325 的产品信息返回给用户。51Testing软件测试网d%k)z;aj0Z][
51Testing软件测试网_J*E,pgs8t,^2) 在界面上,需要用户输入产品 ID 的地方,黑客会输入如下数据:51Testing软件测试网d8z9KNq.`
P)E,{0d$dElT0` or `1`= `151Testing软件测试网-xk F*mL5U9[
Wg2s
51Testing软件测试网0_9}x`l(z'T.[}1}
g
t7T+s.P-lhZ!T0可以看到,黑客并没有输入正常合法的产品编号51Testing软件测试网-~%?QbdLvCk
e3Y(v-y6Z|"^Y(e03) 通过黑客的非法输入,需要执行的 SQL 语句变为:51Testing软件测试网l/^;c3uu~?
51Testing软件测试网N4aQ;D5UZ
@,_gSelect * from products where product_id = ` ` or `1`=`1`51Testing软件测试网6JU'W'b3u6r-?
51Testing软件测试网y
_ a7k)yL可以看出,SQL 语句的意义就完全改变了,当产品 ID 为空或者 1=1 时,返回产品所有信息,而 1=1 是永远成立的条件,因此,黑客并没有输入任何产品编号,就可以返回数据库中所有产品的详细信息51Testing软件测试网TA'}p6NAER
3l8dxh#~'V.\5c0通过这个例子,我们可以看出,注入缺陷是风险非常高的安全漏洞,一旦 Web 应用中给用户提供了需要其输入数据的接口,就有可能遭到攻击,将后台的数据完全暴露在用户的面前51Testing软件测试网@g+Du(j%A