码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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

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

    漏洞分析

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

    CRLF注入漏洞演示2
    下列 Web 应用程序代码会尝试从一个请求对象中读取整数值。如果数值未被解 析为整数,输入就会被记录到日志中,并附带一条提示相关情况的错误信息。
    1. <%@ page contentType="text/html;charset=UTF-8" language="Java" %>
    2. <%@ page import="Java.util.logging.Logger" %>
    3. <%@ page import="Java.util.logging.Level" %>
    4. 日志注入
    5. <%
    6. String val=request.getParameter("val");
    7. Logger log = Logger.getLogger("log");
    8. log.setLevel(Level.INFO);
    9. try{
    10. int value = Integer.parseInt(val);
    11. System.out.print(value);
    12. }catch(Exception e){
    13. log.info("Filed to parse val = " + val);
    14. }
    15. %>
    如果用户为“ 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,用来测试

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

    我的servlet配置如下

    
        redirectServlet 
        RedirectServlet 
    
    
    
        redirectServlet 
        /redirect
    

    开始测试

    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

  • 相关阅读:
    谷粒商城十二性能压测
    实验二-----数据库
    docker 安装 redis
    正大数据周五新鲜报 做期货要关注哪块消息?
    科技的成就(三十一)
    java leetcodetop100 (3,4 )最长连续数列,移动零
    战队集结 蓄势而发 | 网安朝阳·西门子白帽黑客大赛
    防御XSS攻击的方法
    学习计划
    ORB-SLAM3的Tracking线程详解
  • 原文地址:https://blog.csdn.net/shelter1234567/article/details/134060921
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号