HTTP头注入
- HTTP Header概述
- HTTP报文类型
- HTTP请求方法
- HTTP Header内容
- HTTP Header注入
- HTTP Header注入实例
- User-Agent注入
- XFF注入
HTTP Header概述
HTTP报文类型
- 请求报文:由客户端发送给服务器的消息,其组成包括请求行,请求头和请求体。
- 响应报文:由服务器回复给客户端的消息,其组成包括状态行,响应头,和响应体。
HTTP请求方法
GET:请求指定的页面信息,并返回实体主体。
HEAD:类似于GET请求,只不过返回的响应中没有具体的内容,用于获取报头。
POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立或已有资源的修改。
PUT:从客户端向服务器传送的数据取代指定的文档内容。
DELETE:请求服务器删除指定的页面。
CONNECT :HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。OPTIONS允许客户端查看服务器的性能。
TRACE:回显服务器收到的请求,主要用于测试或诊断。
PATCH:是对PUT方法的补充,用来对已知资源进行局部更新。
HTTP Header内容
- User-Agent:使服务器能够识别客户端使用的浏览器和操作系统,浏览器版本等(很多数据量大的网站记录客户使用的操作系统和或者浏览器版本等存入数据库中)
- Cookie:网站为了辨别用户身份、进行session跟踪而存储在用户本地终端上的数据。(通常都是加密过的)
- Host:客户端指定自己想访问的Web服务器的域名/IP和端口号。
- X-Forward-For:简称XFF头,代表客户端(HTTP请求端)的真实IP(通常一些网站的防注入功能会记录请求端的真实IP地址并且写入数据库或者是记录:某个文件[通过XFF头可以实现伪造IP])。
- Client-IP:原理同XFF。
- Referer:浏览器向Web服务器表名自己是从哪个页面链接过来的。
HTTP Header注入
后台开发人员有时为了验证可u护短的HTTP Header(好比常用的Cookie验证等)或者通过HTTP Header头信息,获取客户端的一些信息(比如User-Agent、accept字段等),会对客户端HTTP Header进行获取并且使用SQL语句进行处理,如果此时没有足够的安全考虑,就可能导致基于HTTP Header的漏洞注入。
HTTP Header注入的前提条件:
- 能够对请求头消息进行修改
- 修改的请求头信息能够带入数据库执行
- 数据库没有对输入的请求头做过滤
常见的HTTP Header注入类型: - Cookie注入:服务器对cookie字段进行获取,以验证客户端的身份。
- Referer注入:服务器记录referer字段用于统计网站的点击量。
- User-Agent注入:服务器记录访问者的浏览器操作系统版本。
- XFF注入:记录客户端的真实IP,然后写入数据库
HTTP Header注入实例
这里使用Less-18进行测试,首先查看一下Less-18的源码文件:
现在uagent和IP是没有做限制的,所以这两个字段存在注入点。
User-Agent注入
首先打开Less-18:
进入数据库查看uagent字段进行查看,发现刚才输入的部分,浏览器信息包括操作系统都被记录下来了。
接着打开BurpSuite进行信息拦截,然后将信息发送到Repeater进行重放测试:
现在可以猜测要输入的值有三个,并且有括号要进行闭合,简单模型可以是: 1’,1,1)然后后面加个#进行注释掉就可以,再进行测试:
说明这个输入方式没问题,接下来就可以进行爆库了,既然返回了错误语句,那就可以使用报错注入的方式进行注入,好比extractvalue(),updatexml()、floor()函数等:
使用extractvalue函数,将database()纳入其中,库名就直接爆出来了,其余的信息都可以用此方法。
XFF注入
XFF注入原理就是使用BurpSuite找到一个在XFF能够回显的文件,然后BurpSuite去修改XFF字段的信息,通过报错的内容进而判断其中内容,步骤同User-Agent类似。