浅谈asp的request对象与SQL注入

发布时间:2019-12-03编辑:脚本学堂
浅谈asp的request对象与SQL注入

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

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

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

上面6个集合中,ServerVariables、ClientCertificate和Browser的变量是固定了的;而QueryString、From、Cookies的变量可以任意指定。

使用request创建一个实例

在本地web目录新建test.asp文件,内容为:<%=request("b")%>
1:直接访问http://127.0.0.1/test.asp?b=la<b>k</b>e2,浏览器显示lake2
2:构造表单提交结果也如step 1
3:构造表单,GET传递b值为"He",同时POST的b为"She",浏览器显示为"He"。呵呵,按前面的排序有个优先级的
4:Telnet到本地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注入攻击是由于Web应用程序没有过滤用户所提交的有害数据而导致危害服务器的一种攻击手法。说提交数据,自然就跟request有关。

归根结底,ASP下面的SQL注入都是由于request的参数没有过滤或者过滤不严。

网络上就出现的通用的防注入ASP程序--"SQL通用防注入系统"。该程序基本上可以拦截SQL注入。
"SQL通用防注入系统"是个asp文件,只需在有参数提交的文件中include它就是了。
程序过滤的原理是遍历GET和POST参数的值,发现SQL注入关键字(如and、select)就停止正常文件执行。

它遍历GET和POST,也就是Request对象的QueryString和From集合,忽略了Cookies。