• 练[FBCTF2019]RCEService


    [FBCTF2019]RCEService


    在这里插入图片描述

    掌握知识

    json字符串格式,命令失效(修改环境变量)–绝对路径使用linux命令,%0a绕过preg_match函数,代码审计

    解题思路

    1. 打开题目链接,发现可以通过json格式传递命令进行命令执行,但是不知道json的键名,输入ls显示无法识别,查看源代码后发现该输入框的name信息为cmd,确定这就是键,构建paylaod{"cmd":"ls"},抓包查看成功回显信息

    image-20231002181922327

    image-20231002181925042

    image-20231002181944684

    1. 发现命令正常执行,准备查看根目录的文件,由于是get传参,所以空格先编码为%20,但是发现回显hacking,经过测试发现是对/进行了过滤

    image-20231002182126152

    image-20231002182206417

    1. 既然不能使用/,那就直接使用cat命令查看一下index.php文件,发现还是不行,尝试更改cat的格式进行绕过,发现还是不行。

    image-20231002182313927

    1. 仔细想想,既然存在过滤,多半碰到的函数都是preg_match,该函数可以通过换行符%0a和数组进行绕过,因为该函数只会匹配第一行数据,除非设置了参数。所以默认为preg_match函数过滤,构建paylaod{%0a"cmd":"cat%20index.php"%0a}。发现还是不行,但是可以执行ls /命令了,证明前面猜测没问题,还绕过来了过滤

    image-20231002182603939

    image-20231002182846896

    1. 那为什么cat命令还不行执行呢,都已经绕过了过滤。其实在没有限制的情况下命令还不能执行,只能是该命令被屏蔽了,但是使用其他查看文件的命令也都不可以。
    2. 那可能就是环境变量被更改了,需要使用命令的绝对路径来执行,也就是/bin/cat。再次构建paylaod{%0a"cmd":"/bin/cat%20index.php"%0a}。成功回显了文件内容,还得到了一个病毒提示…

    image-20231002183305754

    1. 发现过滤函数确实是preg_match,代码的一开始就将环境变量修改了,既然flag不在根目录下,那很可能就在这个环境变量中,查看环境变量目录结构,发现了flag目录,cat命令直接拿下flag

    image-20231002183519851

    image-20231002183510815

    关键paylaod

    {"cmd":"ls"}
    
    {"cmd":"ls%20/"}
    
    {"cmd":"cat%20index.php"}
    
    {%0a"cmd":"ls%20/"%0a}
    
    {%0a"cmd":"cat%20index.php"%0a}
    
    {%0a"cmd":"/bin/cat%20index.php"%0a}
    
    {%0a"cmd":"ls%20/home/rceserive"%0a}
    
    {%0a"cmd":"/bin/cat%20/home/rceserive/flag"%0a}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
  • 相关阅读:
    python基础面试题
    2013年-2018年上市公司审计数据
    vim中粘贴代码片段出现每行新增缩进的解决方法-set paste
    【PTA刷题】请编写函数,求子串(详解+代码)
    Springboot 全局异常、返回实体配置
    以太坊:轻松理解EIP-4844
    ubuntu 系统 怎么判断系统有没有GPU
    leetcode347 前 K 个高频元素
    自己NLP常用框架——自己会调用
    WSL2连接USB设备(以USRP B210为例)
  • 原文地址:https://blog.csdn.net/m0_66225311/article/details/133659302