如发现有乱码,
请直接从这里浏览原文
正文摘录:图2上次逃课的同学很多,因此,我们再简单提示一下。选择“查询”选项,双击“在设计视图中创建查询”,在“显示表”的对话框中单击关闭,关闭该对话框。选择主菜单栏下的“SQL视图”,在显示的窗口中输入相应的查询语句,然后单击“运行”按钮。在查询对话框中依次执行下面三条查询语句:返回结果如图3所示。上面三条语句的意思对于在学堂里认真听讲的菜菜来说,应该都知道是什么意思吧。其中第二条语句中where后面的查询条件“id=landl=l”,如果存在id为l的记录就会返回“真”,查询得到id为l的用户名t第三条语句中where后面的查询条件“id=landl=2”,无论如何也不会返回“真”,所以得不到任何记录信息。在一般的asp页面的条件查询中,如果条件查询返回“真”,就能得到想要查询的信息而返回正常的页面,如果条件查询返图3回“假”,就得不到想要查询的信息而返回异常的页面,这就是根据返回页面信息的正误来判断注入是否存在的原理。如果把whcre后面的查询条件“andl=l”换成我们上次课介绍的手工注入的语句,那么就能根据返回的信息猜解数据库中的内容了。二、AsP中注入漏洞是如何发生的在文章之前我们曾经说过“注入漏洞主要是程序员在编写脚本程序时对特殊字符过滤的不完全而引起的”,要想理解这句话的虑思,最好的方法就是“自己写个存在漏洞的AS【]页面,然后分析一下程序足如何得到客户端提交的变量,以及获得变量后带入SQL查询语句直到如何执行SQL查询的过程”。为了照顾小菜们的ASI’水平,我先写个简单的,把下面代码保存为ceshi.asp。l_j镀。,j,。,。。i?。一馥帆sl’tr;SOL—d“一li彭。。request(“id”'s猷oonR。Setver·CresteObieC。t《’Aoa08jcannec期on“’llcono·Open(”Provjde)。=Micr。0SOft.一Jet.oi__.EOB.4_0~DetaSburce=“&”E:\web\mdb.mdb”)’这个代码看起来足不是很熟悉啊,和我们在讲暴库知识的时候数据库的连接文件是不是很象啊。以前还有人抱怨前面的知识没有用,这下用到了吧,忘了的菜菜请叫去后好好的翻翻前面的笔记。id=request(”id'’),取得提交的id变量附值给id;setoonn----Server.CreateObjsot(“ADODB.Connection“),创建一个数据库连接对象,想要连接数据库都要创建这个对象;conn.Open,打开数据库连接,也就是连接数据库lProvider=Microsoft。Jet.OLEDB.4.OIDataSogroe----J’&”E:\web\mdb.mdb,数据库连接的字符串,其中Microsoft..1et.OI.EDB.4.0表示要连接access数据库,E:\web\、mdb.mdb就是数据库的绝对路径,str‘SQL=”select女fromsdminwhereid=”&id,要执行的SQL查询语句Irs.Open,执行SQL查询lresponse.write(rs(2)),把对应jd的用户名显示出来。表面卜看这是一个很正常的程序,很多AsP方面的教科书中也是这样写的,这也是注入漏洞广泛流行的一个原州。但是问题就在这儿出现了:广¨reque8t(,.idll)‘strSOL“。。㈨。fromsdmir’whe‘。肘&‘。J由于id是我们自己定义提交的内容,可以任意构造id的值提交,而在下面的语句巾直接把request(”id”)取得的值J扫“&”连接符连接到了SQI。查询语句后面,这就是问题的所住。我们举个例子来说明,如果我们提交http://127.0.0.1/ceshj.asp?id=l,在ASP页面中经过广硼:recluest(1.i㈣8trSOL.:”select+fromedminwhereid=’。&-d以后12荨ll,{ddnn88:1『l翠#dddeeerrreeehhhwwwnnnmmmddd8a8mmmOOOrrrff‘eeemmm8自annnLttCCCe争eeeeS8S厂
阅读此文(图):
在线翻阅