ASP程序服务端获得客户端值的方式及处理过程(绕过防注入)

Request 对象在HTTP请求期间,检索客户端浏览器传递给服务器的值。

语法
Request[.collection|property|method](variable) 
 
集合

ClientCertificate存储在发送到 HTTP 请求中客户端证书中的字段值。
CookiesHTTP 请求中被发送的 cookie 的值。
FormHTTP 请求正文中表格元素的值。
QueryStringHTTP 中查询字符串中变量的值。
ServerVariables预定的环境变量的值。

注释

如果指定的变量不是上述的五个集合中的一个,Request 对象返回 EMPTY。

可以通过调用 Request(variable) 直接使用所有的变量,而不需要集合的名称。正因为这样,Web 服务器可以按照下面的顺序搜索集合。

  1. QueryString

  2. Form

  3. Cookies

  4. ClientCertificate

  5. ServerVariables

如果同名的变量出现在多个集合中,Request 对象返回遇到的第一个实例。

建议在涉及 ServerVariables 集合的成员时使用全名。例如,不用 Request.(AUTH_USER) 而用Request.ServerVariables(AUTH_USER) 。


QueryString 集合检索HTTP查询字符串中变量的值(GET方式提交的参数)。HTTP查询字符串由问号 (?) 后的值指定。

示例

客户端请求

/scripts/directory-lookup.asp?name=fred&age=22
 

results in the following QUERY_STRING value.

name=fred&age=22.
 

QueryString 集合将包含 name 和 age两个成员。例如:

Welcome,  <%= Request.QueryString("name") %>. 
Your age is  <%= Request.QueryString("age") %>.
 

如果使用下面的脚本

The unparsed query string is:  <%=Request.QueryString %>
 

将输出

The unparsed query string is: name=fred&age=22

Form 集合包含POST方法发送到服务端的表单(form)中的值。
示例
<FORM ACTION = "/scripts/submit.asp" METHOD = "post">
<P>Your first name: <INPUT NAME = "firstname" SIZE = 48>
<P>What is your favorite ice cream flavor: <SELECT NAME = "flavor">
<OPTION>Vanilla 
<OPTION>Strawberry 
<OPTION>Chocolate 
<OPTION>Rocky Road</SELECT>
<p><INPUT TYPE = SUBMIT>
</FORM>

下列的请求正文可以从该脚本中发送。

firstname=James&flavor=Rocky+Road
 

可以使用下面的脚本。

Welcome,  <%= Request.Form("firstname") %>. 
Your favorite flavor is <%= Request.Form("flavor") %>.
 

下面的输出就是结果。

Welcome, James. Your favorite flavor is Rocky Road.
 

如果使用下面的脚本

The unparsed form data is:  <%= Request.Form %> 
 

结果为

The unparsed form data is:  firstname=James&flavor=Rocky+Road

Cookies 集合允许用户检索在 HTTP 请求中发送的 cookie 的值。

注释

可以通过包含一个 key 值来访问 cookie 字典的子关键字。如果访问 cookie 字典时未指定 key,则所有关键字都会作为单个查询字符串返回。例如,如果 MyCookie 有两个关键字, First  Second ,而在调用 Request.Cookies时并未指定其中任何一个关键字,那么将返回下列字符串。

First=firstkeyvalue&Second=secondkeyvalue
 

如果客户端浏览器发送了两个同名的 cookie,那么 Request.Cookie 将返回其中路径结构较深的一个。例如,如果有两个同名的的 cookie,但其中一个的路径属性为 /www/ 而另一个为 /www/home/,客户端浏览器同时将两个 cookie 都发送到 /www/home/ 目录中,那么 Request.Cookie 将只返回第二个 cookie。


编码问题


http://127.0.0.1:8080/1.asp?%50=dd%50&ll=we%50     #%50是P编码


cookies设为:h%50=we%50
<%
response.write Request.QueryString
response.write "<br>"
response.write Request.ServerVariables("QUERY_STRING")
response.write "<br>"
response.write Request("P")&Request("ll")
response.write "<br>"
response.write Request.Cookies
%>

程序输出
%50=dd%50&ll=we%50
%50=dd%50&ll=we%50
ddPweP
hP=weP


<%
response.write  Request.Form("tP")
%>

post t%50=dd%50
输出
ddP

<%
response.write  Request.Form
%>

post t%50=dd%50

输出
t%50=dd%50


即Request.QueryString和Request.ServerVariables("QUERY_STRING")字符串原样输出,参数名和值编码的字符都不进行转换,而Request("P")和Request.Cookies对编码的参数名和值都进行转换。Request.Form集合同样不转换编码,但Request.Form("参数名")的形式转换编码。


不规则包问题

GET /Downloadshow.asp HTTP/1.1 
HOST:XXXXXXXXXXXXXXXX 
Content-Length: xx 
Content-Type: XXXXXXXXXXXXXXXXXX 

ID=111 

用nc提交如上的http包时,Request.QueryString和Request.ServerVariables("QUERY_STRING")无法收到ID及值,但Request("ID")可以收到。

总结:Request对象的五个集合、取值顺序、解码方式以及不规则HTTP包为绕过一些防注入程序提供了方法。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值