java代码审计-换行符CRLF注入

        CRLF 的缩写是指回车和换行操作,其中 CR ASCII 中的第 13 个字符,也 写作 \r , LF ASCII 中的第 10 个字符,也写作 \n ,因此 CRLF 一般翻译为回车换行注入漏洞。
什么是CRLF注入漏洞?

        CRLF 即【回车\r+换行\n】的简称,十六进制码为0x0d和0x0a 。在http协议中,http header 与 http body是用两个crlf分隔的,浏览器就是根据这两个crlf来取出http内容并显示出来的 ,当http消息头中的字符串外部可控,攻击者注入一些恶意的换行比如一些会话cookie或者html代码时就会导致存在安全风险。

CRLF注入漏洞演示1

实战环境:vulhub的nginx配置错误导致漏洞

搭建

我用的snap在ubuntu下载安装了docker

参考链接

Vulhub - Docker-Compose file for vulnerability environmentVulhub是一个基于docker和docker-compose的漏洞环境集合,进入对应目录并执行一条语句即可启动一个全新的漏洞环境,让漏洞复现变得更加简单,让安全研究者更加专注于漏洞原理本身。icon-default.png?t=N7T8https://vulhub.org/#/environments/nginx/insecure-configuration/

下载Vulhub.zipicon-default.png?t=N7T8https://github.com/vulhub/vulhub/archive/master.zipgithub链接

git clone GitHub - vulhub/vulhub: Pre-Built Vulnerable Environments Based on Docker-Compose

启动

在项目nginx/insecure-configuration路径下执行以下命令

docker compose up -d

查看docker容器运行状态

sudo docker ps -a

漏洞poc测试

curl -i http://192.168.218.134:8080/%0d%0aheader:header
-i 将显示服务器返回的完整响应信息,包括响应头和响应体

可以看到header增加了

尝试注入xss

http://192.168.218.134:8080/%0d%0a%0d%0a<script>alert(0)</script>

浏览器打开此xss没有执行,此xss没有执行成功。原因是重定向时浏览器不会加载响应体,..... 因该是有可以打xss的方法,笔者暂时没有想到。

漏洞分析

这是nginx配置错误导致的漏洞,这样的配置原本的目的是将http跳到https:。但location后的$url是直接拼接之后的,为用户可控参数,又没有对参数进行过滤,间接导致nginx解析了%0d%0a为一个换行

CRLF注入漏洞演示2
下列 Web 应用程序代码会尝试从一个请求对象中读取整数值。如果数值未被解 析为整数,输入就会被记录到日志中,并附带一条提示相关情况的错误信息。
<%@ page contentType="text/html;charset=UTF-8" language="Java" %> 
<%@ page import="Java.util.logging.Logger" %> 
<%@ page import="Java.util.logging.Level" %> 
<html> 
<head> <title>日志注入</title> 
</head> <body> <% String val=request.getParameter("val"); Logger log = Logger.getLogger("log"); log.setLevel(Level.INFO); try{ int value = Integer.parseInt(val); System.out.print(value); }catch(Exception e){ log.info("Filed to parse val = " + val); } 
%> </body> 
</html>
如果用户为“ val ”提交参数 val=aaa ,则日志会记录以下条目:
INFO:Failed to parse val=aaa
然而,如果攻击者提交字符串val=“aaaa %0a%0aINFO:xxxxx则 日志中就会记录以下条目。
INFO:Failed to parse val=aaa
INFO:xxxxx
显然,攻击者可以通过将未经验证的用户输入写入日志文件,使日志条目被伪造或者恶意信息被注入日志
CRLF注入漏洞演示3

根据重定向的逻辑我写了一个servlet的demo,用来测试

public class RedirectServlet extends HttpServlet {
}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String input = request.getParameter("input");System.out.println(input);response.sendRedirect("success.jsp?message=" + input);}
}

我的servlet配置如下

<servlet><servlet-name>redirectServlet </servlet-name><servlet-class>RedirectServlet </servlet-class>
</servlet><servlet-mapping><servlet-name>redirectServlet </servlet-name><url-pattern>/redirect</url-pattern>
</servlet-mapping>

开始测试

curl -i http://localhost:8080/redirect?input=123

尝试注入

curl -i http://localhost:8080/redirect?input=123%0d%0aheader:header

 没有换行,没有触发漏洞。

但可以看出来System.out.println 是识别了换行符的,当增加%a的时候

curl -i http://localhost:8080/redirect?input=123%0d%0a%0a%0a%0a%0aheader:header

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/120360.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

找游戏外包开发游戏,有哪些好处呢?

游戏外包开发是将游戏开发的一部分或全部工作交给专业的外部开发团队或公司完成的做法。这种方法有许多潜在的好处&#xff0c;包括&#xff1a; 降低成本&#xff1a;游戏外包通常可以降低游戏开发成本&#xff0c;因为外包开发公司通常可以提供更具竞争力的价格。这是因为它…

「译文」深入了解Kubernetes和Nomad

&#x1f449;️原文链接: https://www.cncf.io/blog/2023/10/23/introduction-a-closer-look-at-kubernetes-and-nomad/ ✍️作者: Rob Newsome &#x1f4dd;Description: stack.io 产品管理主管 Rob Newsome 的特邀文章 在容器编排领域&#xff0c;Kubernetes 和 Nomad 都是…

SpringMVC(下)

1、拦截器&#xff1a; 1、拦截器的配置: SpringMVC中的拦截器用于拦截控制器方法的执行 SpringMVC中的拦截器需要实现HandlerInterceptor <!--配置拦截器--><mvc:interceptors><!--对所有的请求进行拦截--><!--<bean class"com.songzhishu.m…

【2023CANN训练营第二季】——通过一份入门级算子开发代码了解Ascend C算子开发流程

本次博客讲解的代码是Gitee代码仓的Ascend C加法算子开发代码&#xff0c;代码地址为&#xff1a; quick-start 打开Add文件&#xff0c;可以看到文件结构如下&#xff1a; 其中add_custom.cpp是算子开发的核心文件&#xff0c;包括了核函数的实现&#xff0c;展示了如何在Asc…

#力扣:LCP 01. 猜数字@FDDLC

LCP 01. 猜数字 - 力扣&#xff08;LeetCode&#xff09; 一、Java class Solution {public int game(int[] guess, int[] answer) {int cnt0;for(int i0;i<3;i){if(guess[i]answer[i])cnt;}return cnt;} }

Spring Cloud之负载均衡与服务调用(Ribbon)

目录 Ribbon 简介 负载均衡 简介 负载均衡方式 服务端负载均衡 工作原理 特点 客户端负载均衡 工作原理 特点 对比 实现 负载均衡策略 切换负载均衡策略 定制负载均衡策略 超时与重试 单个服务配置 全局配置 服务调用 示例 Ribbon 简介 Ribbon 是 Netfli…

WEB使用百度地图展示某地地址

第一步 进入百度地图开发平台 百度地图开放平台 | 百度地图API SDK | 地图开发 第二步注册 获取AK秘钥&#xff0c;点击【创建应用】进入AK申请页面&#xff0c;填写应用名称&#xff0c;务必选择AK类型为“浏览器端”&#xff0c;JS API只支持浏览器端AK进行请求与访问 下面…

[Leetcode] 0104. 二叉树的最大深度

104. 二叉树的最大深度 题目描述 给定一个二叉树&#xff0c;找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例&#xff1a; 给定二叉树 [3,9,20,null,null,15,7]&#xff0c; 3/ \9 20/ \15 7返回它…

最小二乘法,可视化UI界面

import tkinter as tk import numpy as np import matplotlib.pyplot as plt from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg from pylab import mplmpl.rcParams[font.sans-serif] [FangSong] # 指定默认字体 mpl.rcParams[axes.unicode_minus] False …

雪糕冰淇淋经营配送小程序商城效果如何

雪糕冰淇淋是很多年轻人喜欢的食品之一&#xff0c;市面上的雪糕品牌类型众多&#xff0c;销售模式主要为厂家批发、经销商零售等&#xff0c;由于雪糕冰淇淋的易化性&#xff0c;很多用户会选择就近购买&#xff0c;但制作技术升级和长途冷藏技术下&#xff0c;网购成为另一种…

VB.NET 三层登录系统实战:从设计到部署全流程详解

目录 前言&#xff1a; 什么是三层 为什么要用到三层: 饭店→软件 理解: 过程: 1.三层包图: 2.数据库 3.三层项目 4.用户界面 5.添加引用 代码实现: Entity层 BLL层 DAL层 UI层 总结: 前言&#xff1a; 什么是三层 三层就是把各个功能模块划分为表示层&#…

【从瀑布模式到水母模式】ChatGPT如何赋能软件研发全流程

文章目录 &#x1f384;前言&#x1f354;本书概要&#x1f33a;内容简介&#x1f33a;作者简介&#x1f33a;专家推荐&#x1f6f8;读者对象&#x1f354;彩蛋 &#x1f384;前言 计算机技术的发展和互联网的普及&#xff0c;使信息处理和传输变得更加高效&#xff0c;极大地…

安全和便捷:如何将运营商二要素API应用于实名制管理中

引言 随着互联网的快速发展&#xff0c;数字化身份验证和实名制管理变得越来越重要。在金融、电子商务、社交媒体等领域&#xff0c;确保用户身份的安全和准确性至关重要。运营商二要素核验API成为了实名制管理的有力工具&#xff0c;它不仅能够提供高水平的安全性&#xff0c…

C语言实现DFS和BFS

DFS&#xff08;深度优先搜索&#xff09;和BFS&#xff08;广度优先搜索&#xff09;是图论中常用的两种搜索方式。下面将介绍如何使用C语言实现DFS和BFS算法。 深度优先搜索&#xff08;DFS&#xff09; DFS算法是一种用于遍历或搜索树或图的算法。 该算法从根结点开始&…

JVM进阶(2)

一)方法区: java虚拟机中有一个方法区&#xff0c;该区域被所有的java线程都是共享&#xff0c;虚拟机一启动&#xff0c;运行时数据区就被开辟好了&#xff0c;官网上说了方法区可以不压缩还可以不进行GC&#xff0c;JAVA虚拟机就相当于是接口&#xff0c;具体的HotSpot就是虚…

虹科案例 | 使用虹科MSR147WD测试自行车背包的热生理舒适性

使用虹科MSR147WD测试自行车背包的热生理舒适性 在进行运动活动时&#xff0c;佩戴背包会对穿戴者的舒适度产生影响&#xff0c;并且也会对热调节产生影响&#xff0c;类似于一件服装的作用。为了优化背包的材料和设计属性&#xff0c;我们利用MSR Electronics GmbH的微型数据记…

Java实现Csv文件导入导出

Java实现Csv文件导入导出 什么是.csv文件&#xff1f; CSV&#xff08;Comma-Separated Values&#xff0c;逗号分隔的值&#xff09;是一种简单、实用的文件格式&#xff0c;用于存储和表示包括文本、数值等各种类型的数据。CSV 文件通常以 .csv 作为文件扩展名。这种文件格…

C语言编写图形化界面-创建按钮-为其指定样式

文章目录 前置章节指定窗口样式给按钮加边框扁平化按钮复选框样式按钮自动复选框 单选按钮三态按钮自动三态按钮 默认按钮样式&#xff08;对话框Enter键&#xff09; 设置按钮位置和大小封装函数 前置章节 开始之前&#xff0c;需要学习以下章节&#xff1a; 创建窗口 窗口过…

力扣第435题 无重叠区间 c++ 贪心思维

题目 435. 无重叠区间 中等 相关标签 贪心 数组 动态规划 排序 给定一个区间的集合 intervals &#xff0c;其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量&#xff0c;使剩余区间互不重叠 。 示例 1: 输入: intervals [[1,2],[2,3],[3,4],[1,…

Python的Pandas库(二)进阶使用

Python开发实用教程 DataFrame的运算 DataFrame重载了运算符&#xff0c;支持许多的运算 算术运算 运算方法运算说明df.add(other)对应元素的加&#xff0c;如果是标量&#xff0c;就每个元素加上标量df.radd(other)等效于otherdfdf.sub(other)对应元素相减&#xff0c;如果…