HTTP参数污染学习
HTTP参数污染 --- HPP
参考:
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 都有
用处:
- 逻辑漏洞:
任意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,如果恰好服务器用第一个号码验证是否存在该用户,而使用第二个号码发送短信时,我们便可以接管该用户
- 绕过 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 的地方
- 很多可能存在越权漏洞的地方,当做了权限验证时,可以试一试提交多个参数
- 绕 WAF 的时候
HTTP参数污染学习的更多相关文章
- 学习笔记 HTTP参数污染注入
HTTP参数污染注入源于网站对于提交的相同的参数的不同处理方式导致. 例如: www.XX.com/a?key=ab&key=3 如果服务端返回输入key的值,可能会有 一: ab 二:3 三 ...
- HTTP参数污染
HTTP Parameter Pollution简称HPP,所以有的人也称之为“HPP参数污染”. 一篇很不错关于HPP参数污染的文章:http://www.paigu.com/a/33478/235 ...
- 机器学习&数据挖掘笔记_23(PGM练习七:CRF中参数的学习)
前言: 本次实验主要任务是学习CRF模型的参数,实验例子和PGM练习3中的一样,用CRF模型来预测多张图片所组成的单词,我们知道在graph model的推理中,使用较多的是factor,而在grap ...
- 机器学习算法中如何选取超参数:学习速率、正则项系数、minibatch size
机器学习算法中如何选取超参数:学习速率.正则项系数.minibatch size 本文是<Neural networks and deep learning>概览 中第三章的一部分,讲机器 ...
- HTTP参数污染【转】
HTTP参数污染注入源于网站对于提交的相同的参数的不同处理方式导致. 例如: www.XX.com/a?key=ab&key=3 如果服务端返回输入key的值,可能会有 一: ab 二:3 三 ...
- 通过HTTP参数污染绕过WAF拦截 (转)
上个星期我被邀请组队去参加一个由CSAW组织的CTF夺旗比赛.因为老婆孩子的缘故,我只能挑一个与Web漏洞利用相关的题目,名字叫做”HorceForce”.这道题价值300点.这道题大概的背景是,你拥 ...
- WEB安全番外第一篇--其他所谓的“非主流”漏洞:URL跳转漏洞与参数污染
一.URL跳转篇: 1.原理:先来看这段代码: <?php if(isset($_GET["url_redircetion_target"])){ $url_redirect ...
- 【sqli-labs】【jsp/tomcat】 less29 less30 less31 less32 (GET型利用HTTP参数污染的注入)
sqli-labs带了几个Java版本的web注入,在tomcat-files.zip里 以Less29为例,查看源码,可以看出请求最后还是提交给了php应用,难怪less29文件夹下有一个没有任何防 ...
- SpringMVC参数绑定学习总结【前后端数据参数传递】
目录 1. 绑定机制 2. 支持的数据类型 3. 参数请求中文乱码解决 4.自定义类型转换器 5.最后参数绑定学习小结 SpringMVC作为Controller层(等价servlet和struts中 ...
随机推荐
- CELF算法原理
影响力传播模型中的独立层叠模型(independent cascading model,IC模型),影响力传播过程中,种子的影响力具备子模性(submodularity),即种子的边际影响力增量会呈现 ...
- 关于Dev-C++一种引用头文件<iostream>问题(暴力解决)
问题情况如下,因个人水平有限,不知道具体原因是啥,当引用头文件<iostream>时会出现如下问题,经排查,并不是头文件本身的问题,有可能是Dev哪一个文件被改动了,或者设置出了问题(前者 ...
- ZooKeeper未授权漏洞
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作.最终, ...
- eclipse 界面复原
Windows-----Perspective-----Reset perspective
- (Java实现) 洛谷 P1042 乒乓球
题目背景 国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及.其中1111分制改革引起了很大的争议,有一部分球员因为无法适应新规则只能选择退役.华华就是其中一位,他 ...
- (Java实现) 最大团问题 部落卫队
首先介绍下最大团问题: 问题描述:给一个无向图G=(V,E) ,V是顶点集合,E是边集合.然后在这顶点集合中选取几个顶点,这几 个顶点任意两个之间都有边在E中.求最多可以选取的顶点个数.这几个顶点就构 ...
- Java实现 LeetCode 207 课程表
207. 课程表 现在你总共有 n 门课需要选,记为 0 到 n-1. 在选修某些课程之前需要一些先修课程. 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1] ...
- Java实现 LeetCode 72 编辑距离
72. 编辑距离 给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 . 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字 ...
- Java实现 洛谷 P1579 哥德巴赫猜想(升级版)
题目背景 1742年6月7日哥德巴赫写信给当时的大数学家欧拉,正式提出了以下的猜想:任何一个大于9的奇数都可以表示成3个质数之和.质数是指除了1和本身之外没有其他约数的数,如2和11都是质数,而6不是 ...
- JVM 由哪些部分组成?
JVM 由哪些部分组成? 解析:这是对 JVM 体系结构的考察 答:JVM 的结构基本上由 4 部分组成: 类加载器,在 JVM 启动时或者类运行时将需要的 class 加载到 JVM 中 执行引擎, ...