HTTP参数污染 --- HPP

参考:

  1. 参数污染漏洞(HPP)挖掘技巧及实战案例全汇总
  2. 视频内容

HPP,简而言之,就是给参数赋上多个值。

比如: https://www.baidu.com/s?wd=asdqwe&wd=http参数污染

百度究竟会给出有关 asdqwe 的相关信息,还是 http参数污染 的相关信息,还是两者兼并?事实证明,百度只取第一个关键词 asdqwe,不同的服务器架构会取不同的值

原因:由于现行的HTTP标准没有提及在遇到多个输入值给相同的参数赋值时应该怎样处理,而且不同的网站后端做出的处理方式是不同的,从而造成解析错误

下面是不同服务端所处理的方式

Web服务器 参数获取函数 获取到的参数
PHP/Apache $_GET(“par”) Last
JSP/Tomcat Request.getParameter(“par”) First
Perl(CGI)/Apache Param(“par”) First
Python/Apache getvalue(“par”) All (List)
ASP/IIS Request.QueryString(“par”) All (comma-delimited string)

推荐一个自动识别前后端框架的插件 wappalyzer,chrome、firefox、edge 都有

用处:

  1. 逻辑漏洞:
  • 任意URL跳转

    例如:

    www.famous.website?ret_url=subdomain.famous.website ,由于后端做了限制,当我们把 ret_url 改成别的不同源的域名(如baidu.com)时会报错

    但是我们可以利用HPP,将请求地址变成 www.famous.website?ret_url=subdomain.famous.website&ret_url=baidu.com 时,由于服务器逻辑错误

    使用第一个 ret_url 做校验参数,而第二个 ret_url 参数做跳转目的地址。于是这样便可成功绕过限制,形成任意 URL 跳转

  • 任意密码重置(短信爆破)

    一般重置密码的时候,会发送短信到用户手机

    比如GET/POST传递的参数为:phone=13888888888

    我们一般会去想,能不能发送验证码到自己的手机,于是可以构造成: phone=13888888888,12345678901 或者 phone=13888888888;12345678901 或者 phone={13888888888,12345678901}

    等等一些情况,有时候能通过,但是有些时候会出现 号码不合法 的情况,此时便可以考虑利用 HPP —— phone=13888888888&phone=12345678901,如果恰好服务器用第一个号码验证是否存在该用户,而使用第二个号码发送短信时,我们便可以接管该用户

  1. 绕过 WAF

    原理:当 WAF 检测端与服务器端webapp使用的参数不一致时,便可绕过 WAF 限制

WAF框架:

框架 取值
flask First
django Last
  • SQL注入绕过

方式1:

例如:WAF 端采用 flask 框架而服务器 webapp 端采用 PHP/Apache 框架时,由于 WAF 取第一个参数,app 取第二个参数,利用 HPP 便可绕过 WAF 检测

www.xxx.com/search.php?id=1&id=7 union select 1,2,database()

方式2:

例如:WAF 端只检测单个参数,而服务器 webapp 端会将所有参数合并起来检测

www.xxx.com/search.php?id=1&id=%20union%20&id=select%201,2&id=,database() 利用拼接的方式绕过 WAF

  • XSS

    跟 SQL 注入相似,检测过滤与实际采纳的参数不一致

可能有 HPP 的地方

  1. 很多可能存在越权漏洞的地方,当做了权限验证时,可以试一试提交多个参数
  2. 绕 WAF 的时候

HTTP参数污染学习的更多相关文章

  1. 学习笔记 HTTP参数污染注入

    HTTP参数污染注入源于网站对于提交的相同的参数的不同处理方式导致. 例如: www.XX.com/a?key=ab&key=3 如果服务端返回输入key的值,可能会有 一: ab 二:3 三 ...

  2. HTTP参数污染

    HTTP Parameter Pollution简称HPP,所以有的人也称之为“HPP参数污染”. 一篇很不错关于HPP参数污染的文章:http://www.paigu.com/a/33478/235 ...

  3. 机器学习&数据挖掘笔记_23(PGM练习七:CRF中参数的学习)

    前言: 本次实验主要任务是学习CRF模型的参数,实验例子和PGM练习3中的一样,用CRF模型来预测多张图片所组成的单词,我们知道在graph model的推理中,使用较多的是factor,而在grap ...

  4. 机器学习算法中如何选取超参数:学习速率、正则项系数、minibatch size

    机器学习算法中如何选取超参数:学习速率.正则项系数.minibatch size 本文是<Neural networks and deep learning>概览 中第三章的一部分,讲机器 ...

  5. HTTP参数污染【转】

    HTTP参数污染注入源于网站对于提交的相同的参数的不同处理方式导致. 例如: www.XX.com/a?key=ab&key=3 如果服务端返回输入key的值,可能会有 一: ab 二:3 三 ...

  6. 通过HTTP参数污染绕过WAF拦截 (转)

    上个星期我被邀请组队去参加一个由CSAW组织的CTF夺旗比赛.因为老婆孩子的缘故,我只能挑一个与Web漏洞利用相关的题目,名字叫做”HorceForce”.这道题价值300点.这道题大概的背景是,你拥 ...

  7. WEB安全番外第一篇--其他所谓的“非主流”漏洞:URL跳转漏洞与参数污染

    一.URL跳转篇: 1.原理:先来看这段代码: <?php if(isset($_GET["url_redircetion_target"])){ $url_redirect ...

  8. 【sqli-labs】【jsp/tomcat】 less29 less30 less31 less32 (GET型利用HTTP参数污染的注入)

    sqli-labs带了几个Java版本的web注入,在tomcat-files.zip里 以Less29为例,查看源码,可以看出请求最后还是提交给了php应用,难怪less29文件夹下有一个没有任何防 ...

  9. SpringMVC参数绑定学习总结【前后端数据参数传递】

    目录 1. 绑定机制 2. 支持的数据类型 3. 参数请求中文乱码解决 4.自定义类型转换器 5.最后参数绑定学习小结 SpringMVC作为Controller层(等价servlet和struts中 ...

随机推荐

  1. SpringMVC入门总结

    一.SpringMVC的好处? 1,基于注解,stuts2虽然也有注解但是比较慢,没人用更多的时候是用xml的形式 2,能与spring其它技术整合比如说webflow等, 3,获取request及s ...

  2. S32K142学习记录_SDK手动导入

    这几天和一位工程师讨论ADC+PDB学到了很多,当然很多的时候都是我在听, 毕竟新手,顺便其中提出自己的疑问,讨论会让你学到很多 有空会将讨论整理出来 因为demo板还没有到,只能看着大佬的程序对着手 ...

  3. [安卓基础]011存储数据(中)——sqlite语法介绍

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  4. PHP AES加解密(兼容php5,php7)

    最近在工作中负责对接API,对方要求对业务数据进行AES 算法(256,ECB,补码方式:PKCS5Padding)加密. 加密算法要求如下: 算法AES/ECB/PKCS5Padding 密钥长度2 ...

  5. Rocket - util - Counters

    https://mp.weixin.qq.com/s/q7R2Dn9p9cch_ABN4raReQ   介绍几种计数器的实现,以及其中的一点小细节.   ​​   1. ZCounter   ​​   ...

  6. jchdl - GSL实例 - Concat

    https://mp.weixin.qq.com/s/oJY6Xj9_oM1gSmvH_dHkJg   Concat节点把多根输入线线组合成一排线输出.   参考链接 https://github.c ...

  7. 【jQuery】全功能轮播图的实现(本文结尾也有javascript版)

    轮播图 图片自动切换(定时器): 鼠标悬停在图片上图片不切换(清除定时器) 鼠标悬停在按钮上时显示对应的图片(鼠标悬停事件) 鼠标悬停在图片上是现实左右箭头 点击左键切换到上一张图片,但图片为第一张时 ...

  8. Java实现 LeetCode 397 整数替换

    397. 整数替换 给定一个正整数 n,你可以做如下操作: 如果 n 是偶数,则用 n / 2替换 n. 如果 n 是奇数,则可以用 n + 1或n - 1替换 n. n 变为 1 所需的最小替换次数 ...

  9. Java实现 LeetCode 306 累加数

    306. 累加数 累加数是一个字符串,组成它的数字可以形成累加序列. 一个有效的累加序列必须至少包含 3 个数.除了最开始的两个数以外,字符串中的其他数都等于它之前两个数相加的和. 给定一个只包含数字 ...

  10. Java实现偶数矩阵(Even Parity, UVa 11464)

    偶数矩阵(Even Parity, UVa 11464) 问题描述 给你一个n×n的01矩阵(每个元素非0即1),你的任务是把尽量少的0变成1, 使得每个元素的上.下.左.右的元素(如果存在的话)之和 ...