前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HTTP 头部信息注入小分析

HTTP 头部信息注入小分析

作者头像
Elapse
发布2020-08-17 11:19:21
7890
发布2020-08-17 11:19:21
举报
文章被收录于专栏:E条咸鱼E条咸鱼

在开始正文之前,请允许我用我小学语文水平的语言组织能力来介绍一下何为HTTP头部信息 众所周知,在请求web服务器过程中,会发送一个HTTP包,为应用层的数据包,在数据包中,有web服务器的IP地址,还有你请求的网站路径、文件,其他的就是你(用户)的数据,具体有什么看WEB需要你给什么,一般来说有以下内容

  • 请求类型 分为POST/GET两种
  • User-Agent 用户浏览器标识
  • X-Forwarded-For 来源地址
  • Cookie 用于验证用户信息

具体数据包长什么样可以看下图

那么正题开始,解释了什么是HTTP包后,下面的内容应该不算是什么难以理解的内容,HTTP包有一个部分,叫做头部信息(heards),也就是上面提到的User-Agent这些,在有的环境中,php可能会将这部分的部分内容放到sql查询语句中配合使用,若是这部分没有加防范,那么就可以通过伪造headers头部信息来完成注入

HTTP头部注入我稍微的分了两个类 第一类为通过构造会记录下来验证身份的如X-FORWARDED-FOR这类来绕过/查询 第二类为构造用户使用的应用程序的信息和用户的IP地址这类来绕过/查询

举个第一类的简单的例子

--------分割线--------

下面是一条php中的sql查询语句

代码语言:javascript
复制
$useripaddr=$_SERVER['HTTP_X_FORWARDED_FOR']
$req=mysql_query("select user,password from users where user=’$username’ and password=’$password’ and get_ip=’$useripaddr’);

上面这个php代码,假如xff内容没有做防护的话,就会导致get_ip这一部分被恶意利用 只需要通过将x-forwarded-for内容更改、构造sql语句就好了 例如heards中,X_FORWARDED_FOR :127.0.0.1′ or 1=1# 这样一来,sql查询语句就变成了

代码语言:javascript
复制
select user,password from users where user=’$username’ and password=’$password’ and get_ip=’127.0.0.1' or 1=1#’

第二类的例子就比较麻烦了,因为能举例出来的环境太多,而我又太懒,所以下面给个环境,全靠脑补

第一个PHP名为login.php,用于验证登录信息后返回cookie值 第二个PHP名为value.php,用于输出什么无关紧要的内容

在login.php中,有这么一个操作,若是验证过了用户名密码后,生成一个cookie,然后发送给value.php用户身份验证

代码语言:javascript
复制
生成用户cookie值

setcookie('ant[uname]',$_POST['username'],time()+36000);
setcookie('ant[password]',sha1(md5($_POST['password'])),time()+36000);

Value.php中,有这么一串代码用于查看是否有用户登录的cookie存在

代码语言:javascript
复制
$user_cookie=connect(); #接收login.php发送过来的cookie
$exist_user=check_sqli_login($user_cookie); #验证内容
if(!$exist_user){ #若没有cookie存在,则跳转到上一个登录界面中
    header("location: login.php");
}

这类环境在进行查询或者写入操作时,会先判断你这个用户是否存在于数据库中,若存在,那么才会执行后面查询、写入这些操作

这种方法构造起来就更简单了,你只需要抓取一个登录成功的包,然后将用户名修改为sql注入语句 如 uname=admin 改为 uname=admin’ or 1=1# 这样sql语句就会被恶意注入成

代码语言:javascript
复制
select uname,password from users where username='admin'or 1=1#' and password='xxxxx';

于是就可以绕过了(这里是不正确示范,若真想万能密码绕过得输入一个不存在的用户名使其查询结果到or 1=1那边后得到结果为true就好了)

"头部注入秀就秀在他乱七八糟的"

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 E条咸鱼 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 举个第一类的简单的例子
  • 第二类的例子就比较麻烦了,因为能举例出来的环境太多,而我又太懒,所以下面给个环境,全靠脑补
相关产品与服务
多因子身份认证
多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档