HTTP请求头信息的注入

常见http可能被污染的参数有这些

- User-agent 浏览器版本 (少)
- Referer      来源(少)
- X-Forwarded-For 获取ip(高)
- client_ip   获取ip(高)
-cookie      获取cookie值(高)

一. cookie注入

  1. 原理: 在ASP中,request对象获取客户端提交数据常用的是get和post两种方式,同时request对象可以不通过集合来获得数据,即直接使用”request(“name”)”. 但它效率低下,容易出错,当我们省略具体的集合名称时,asp是按QueryString(get),Form(post),Cookie,Severvariable,集合的顺序来搜索的.cookie是保存在客户端的一个文本文件,可以进行修改,这样一来,就可以利用Request.cookie方式来提交变量的值,从而利用系统的漏洞进行注入攻击.
  2. 条件1是程序对get和post方式提交的数据进行了过滤,但未对cookie提交的数据库进行过滤。条件2,在1的基础上还需要程序对提交数据获取方式是直接request(“xxx”)的方式,未指明使用request对象的具体方法进行获取。
  3. 首先 我们需要找到一个注入点,如果是使用get方式提交的参数,要更改成cookie方式提交,我们首先要访问正常的存在注入点的页面,等页面完全打开之后,在开发者环境的console栏中,输入alert(document.cookie=”id=”+escape(“x”)); 这里的“id=”便是注入点中注入参数,x便是页面的参数的数值了,这两处要根据实际情况来定义。写完之后按下回车网页中会弹出一个对话框现在更改好了cookie后我们就要试下能不能正常访问了,现在在另外一个窗口中重新打开那个注入点既是将“id=x”去掉后的,然后看是否能正常访问。如果去掉之后能够继续访问 那么说明可以进行cookie注入,这样就说明程序在使用request对象获取数据的时候并未指明具体使用什么方法来获取,而是直接使用request(“xx”)的方式。
    4.实例 http://sef.xjtu.edu.cn/news_content.asp?id=2074

    二. X-Forwarded-For注入()

    1. X-Forwarded-For是HTTP头的一个字段。它被认为是客户端通过HTTP代理或者负载均衡器连接到web服务端获取源ip地址的一个标准。
    2. X-Forwarded-For注入常见于检测用户ip是否合法,进行sql查询的时没有过滤获取ip的参数。
    3. 利用方法,可以用firefox中的X-Forwarded-For Header插件。或者将抓的头信息的包保存在sqlmap的根路径,比如test.txt,python sqlmap.py -r test.txt –level 3
  4. 实例:http://www.alexa.cn/

    三. User-agent注入

    用户代理(user agent)是记录软件程序的客户端信息的HTTP头字段,他可以用来统计目标和违规协议。在HTTP头中应该包含它,这个字段的第一个空格前面是软件的产品名称,后面有一个可选的斜杠和版本号。并不是所有的应用程序都会被获取到user-agent信息,但是有些应用程序利用它存储一些信息(如:购物车)。在这种情况下,我们就有必要研究下user-agent头存在的问题了。HTTP查询实例:

    1
    2
    3
    GET /index.php HTTP/1.1
    Host: [host]
    User-Agent: aaa’ or 1/*

四. Referer注入

Referer是另外一个当应用程序没有过滤存储到数据库时,容易发生SQL注入的HTTP头。它是一个允许客户端指定的可选头部字段,通过它我们可以获取到提交请求URI的服务器情况。它允许服务器产生一系列的回退链接文档,像感兴趣的内容,日志等。它也允许跟踪那些坏链接以便维护。

例如:

1
2
3
4
5
GET /index.php HTTP/1.1
Host: [host]
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.101 Safari/537.36

Referer: http://www.yaboukir.com'

实例:http://baike.cardbaobao.com/index.php?user-login

五. 防止消息头注入漏洞

  防止HTTP消息头注入漏洞的最有效方法是,不将用户控制的输入插入到应用程序返回的HTTP消息头中。通常我们可以用一些较为安全的方法代替这种行为。
  如果不可避免地要在HTTP消息头中插入用户控制的数据,那么应用程序应采取以下这种双重深层防御方法防止漏洞产认。应用程序应根据情形,对插入的数据进行尽可能严格的确认。例如,如果根据用户输入设定一个cookie值,那么应当限制这个值仅包含字母字符,最大长度为6B。
  应对插入消息头的每一个数据进行过滤,检测可能的恶意字符。实际上,任何ASCII码小于0x20的字符都应被视为可疑的恶意字符,应用程序应拒绝包含这些字符的请求。通过对所有应用程序内容使用 HTTPS,应用程序即可防止攻击者利用任何残留的消息头注入漏洞”毒害”代理服务器缓存。