lake2的专栏

千秋邈矣独留我,百战归来再读书

原创 Request废话连篇收藏

新一篇: 突破一流信息监控拦截系统进行SQL注射 | 旧一篇: ASP.NET下使用WScript.Shell执行命令

Request对象探讨

RequestASP里的一个内部对象,用于获取HTTP请求中传递的任意信息(如头信息、表单数据、cookies等等)。所以这是在ASP里面最常用的内部对象,常用来获得GET方式提交的数据(Request.QueryString)、表单POST提交的数据(Request. Form)和CookiesRequest.Cookies)。

我们用Request对象可以指定获取某个特定方式提交的数据。比如我们用这段代码获得通过POST提交的数据lake2的值:request.Form("lake2");而request.queryString("CSDN")获得GET方式提交的CSDN的值。

对于获取HTTP数据,ASP还给了我们一个更简单的方法:request(key),即直接使用request而不指定数据集合。此时ASP会依次在QueryStringFromCookiesServerVariablesClientCertificateBrowser中检查匹配的数据,若发现则返回数据。

上面6个集合中,ServerVariablesClientCertificateBrowser的变量是固定了的;而QueryStringFromCookies的变量可以任意指定。想不到Cookies可以拿来传递任意数据,以前倒没有注意。

OKtest一下先。在本地web目录新建test.asp文件,内容为:<%=request("b")%>

Step 1:直接访问http://127.0.0.1/test.asp?b=la<b>k</b>e2,浏览器显示lake2

Step 2:构造表单提交结果也如step 1

Step 3: 构造表单,GET传递b值为“He”,同时POSTb为“She”,浏览器显示为“He”。呵呵,按前面的排序有个优先级的

Step 4Telnet到本地80端口,构造HTTP请求如下(注意Cookies哦):

GET /test.asp HTTP/1.1

Accept: */*

Accept-Language: zh-cn

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; TencentTraveler ; .NET CLR 1.1.4322)

Host: 127.0.0.1

Connection: Keep-Alive

Cookie: b=lake2 , Success !

在一堆服务器响应数据之后,我们看到了“lake2,Success!”(Q:为什么空格不见了?A:因为未对提交的空格进行URL编码)。

到此,我们已理论和实际相结合的证明了Cookies可以拿来传递数据。

Request对象与SQL注射

现在把话题转一下,我们来说说SQL Injection

SQL注射攻击是由于Web应用程序没有过滤用户所提交的有害数据而导致危害服务器的一种攻击手法。注意咯,这里涉及到提交数据,自然要跟刚才说了一大堆的request联系上啊。

归根结底,ASP下面的SQL注射都是由于request的参数没有过滤或者过滤不严。当然,程序员不是安全专家,他们可能不知道如何过滤。

于是,网络上就出现了通用的防注射ASP程序——“SQL通用防注入系统”。经过一段时间和几个作者的改进,该程序已经比较完善了,基本上可以拦截SQL注射(但是,个人认为它的过滤方式太严,造成许多不便)。“SQL通用防注入系统”是个asp文件,只需在有参数提交的文件中include它就是了。程序过滤的原理是遍历GETPOST参数的值,发现SQL注射关键字(如andselect)就停止正常文件执行。

嘿嘿,它遍历GETPOST,也就是Request对象的QueryStringFrom集合,忽略了Cookies

现在,我们假设有一个SQL Injection漏洞百出的ASP程序,具备网络安全知识的管理员同学在网上下载并使用了传说中的“SQL通用防注入系统”,但是很不幸,ASP程序中所有获取参数都是使用的request(key)……(呵呵,眼看着一个个封锁被突破,那是很enjoy的事情^_^

这里仅仅是假设而已,至于实际中到底有多少ASP程序员喜欢用request(key) 来获取数据就不得而知咯。

发表于 @ 2005年09月10日 20:24:00|评论(loading...)|编辑

新一篇: 突破一流信息监控拦截系统进行SQL注射 | 旧一篇: ASP.NET下使用WScript.Shell执行命令

评论

#说两句 发表于2005-12-07 17:32:00  IP: 60.166.3.*
这玩意只能糊弄菜B
稍微懂点ASP的程序员写代码都会以Request.方法()来获取指定值的。
#haicao 发表于2005-12-10 10:09:00  IP: 125.213.8.*
稍微懂点ASP的程序员都不会用什么通用防注入这东西。
我就喜欢用request方法。觉得get跟post方法改来改去很烦,喜欢直接用request,但作一些字符过滤比如转全角什么的,
#lake2 发表于2005-12-10 10:46:00  IP: 125.71.2.*
嗯,haicao兄说的是。通用防注入用的也不多,一般是小网站用;转全角可以,但是转了全角也有问题,比如发一些代码,其他人复制粘贴去试的时候就有点郁闷……
#韩涛 发表于2006-01-21 22:58:00  IP: 218.28.29.*
我的最爱是你啊?
你知道吗?
我想你是知道的!
对吗?
#234 发表于2006-02-25 11:37:00  IP: 219.139.177.*
其他人复制粘贴去试的时候就有点郁闷
#HFH 发表于2006-03-27 21:51:00  IP: 222.210.40.*
lake2大哥,感谢你,让我在这里学习这么多知识了~!
#HFH 发表于2006-03-27 22:22:00  IP: 222.210.40.*
这就是COOKIE的另类注入了吧..
呵呵,今天学到了新的技术了....马上测试去..!!!
谢谢lake2哥!
#nancy 发表于2006-06-08 22:38:00  IP: 60.7.89.*
谢谢,正学习这个
#飘落枫叶 发表于2006-06-18 12:31:00  IP: 60.216.223.*
呵,我就喜欢用Request,只要字符过滤的严格一下,再转一下编辑,应该不会有事的吧~谁叫她长的漂亮,又方便呢,哈.
发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © lake2