当前位置: 首页 > news >正文

2025第五届“长城杯”网络安全大赛暨京津冀蒙网络安全技能竞赛 WP Web全

文曲签学

首先随便输入一个指令尝试,发现提示输入help查看帮助

wechat_2025-09-14_151550_431

输入help,发现有list命令查看笔记和read命令读取笔记

wechat_2025-09-14_151618_515

list查看笔记列表,发现HINT,read查看

wechat_2025-09-14_151646_665

关注公众号后提示

微信图片_20250914151710_97_34

写的很明确了,目录穿越加双写绕过

wechat_2025-09-14_151800_160

拿到flag

EZ_upload

随便上传一个文件,跳转至upload.php查看源码

<?php
highlight_file(__FILE__);function handleFileUpload($file)
{$uploadDirectory = '/tmp/';if ($file['error'] !== UPLOAD_ERR_OK) {echo '文件上传失败。';return;}$filename = basename($file['name']);$filename = preg_replace('/[^a-zA-Z0-9_\-\.]/', '_', $filename);if (empty($filename)) {echo '文件名不符合要求。';return;}$destination = $uploadDirectory . $filename;if (move_uploaded_file($file['tmp_name'], $destination)) {exec('cd /tmp && tar -xvf ' . $filename.'&&pwd');echo $destination;} else {echo '文件移动失败。';}
}handleFileUpload($_FILES['file']);
?>

代码审计,就是上传一个名字符合要求的文件到tmp目录下,他会在tmp目录下tar解压这个文件

这个题我自己想肯定是想破头也做不出来的,感谢社团师哥的提示和帮助

这里用到的知识点是软链接,下面做简单介绍

1.介绍

符号链接也称为软链接,是将一个路径名链接到一个文件。软链接文件是一种特别类型的文件,它们是一个文本文件,文件内部只包含了被链接文件的路径名。

2.命令

ln -s 源文件绝对路径 软链接路径

注意源文件的路径必须是绝对路径。

3.用法

比如现在我们在a目录,在这个目录下存有b目录的一个软链接,我们往a目录下的软链接里传文件,相当于向b目录下传文件。本题就是利用这个特点来做。

解题思路

首先明确思路,本题显然只能往tmp里传文件,我们要想往靶机传马,就要在tmp目录下有一个通往/var/www/html的软链接。所以我们创建一个软链接html -> /var/www/html ,然后我们想办法往这个软链接里传马。

这里有点难懂,我看了一会儿也算是研究明白了,还是利用的linux机制

我们可以新建一个名为html的文件夹(注意这个文件夹名字和软链接名字是一样的),然后在这个文件夹里放shell.php写马,打成tar包上传。解压后,shell.php在html文件夹中,而linux就会认为这个php文件是在html软链接中,shell.php通过软链接传到了/var/www/html,也就成功写马可以利用了。

解题

1.创建html软链接

wechat_2025-09-14_153731_076

2.把这个软链接打包成tar包 1.tar

wechat_2025-09-14_153804_719

3.创建html文件夹(因为和软链接重名,可以换一个目录或者直接把软链接删掉,打完tar包后原来的软链接就没用了)

wechat_2025-09-14_155753_993

4.写shell.php并把他放在html文件夹中

wechat_2025-09-14_155833_694

5.将html/shell.php打成tar包(注意一定写这个路径html.shell.php,不能直接写./html或者html)

wechat_2025-09-14_155902_806

6.回到题目,依次上传1.tar和2.tar,访问shell.php,在根目录拿到flag

wechat_2025-09-14_160149_471

SeRce

源码非常简单

<?php
highlight_file(__FILE__);
$exp = $_GET["exp"];
if(isset($exp)){if(serialize(unserialize($exp)) != $exp){$data = file_get_contents($_POST['filetoread']);echo "File Contents: $data";}
} 

exp直接交给ai绕过

?exp=i:01

关键就是后面的file_get_contents

这种类型的题之前做过一次,也是师哥教的,我也想到了那个做法

file_get_contents文件读取rce

利用这种做法,我们需要/proc/self/maps和这个目录中的so文件,放脚本运行。至于我为什么卡住了。。。

因为当时那个题要找libc-2.x.so,而这个题中没有这个,只有libc.so.6,我认为必要文件缺失,于是卡住了。。。

也是长个教训吧

1.读/proc/self/maps

wechat_2025-09-14_160759_688

注意用的时候我们需要里面的每一条换行,所以这里查看源代码再复制

wechat_2025-09-14_160837_057

wechat_2025-09-14_160854_815

2.找到so文件

wechat_2025-09-14_160931_906

3.读so文件

由于直接读的话是乱码,所以我们用filter伪协议base64输出,再用cyberchef下载解base64后的结果即可。

wechat_2025-09-14_161048_040

wechat_2025-09-14_161131_269

4.将maps.txt、download.elf和脚本放在同一目录下

wechat_2025-09-14_161345_044

5.修改脚本,生成payload

在上一次的题目中,我们的cmd是

echo "<?php eval(\$_POST[a]);?>" > /var/www/html/shell.php

测试发现这个目录没有写入权限,所以不能这么用

测试又发现我们可以在tmp下写文件,所以cmd

ls / | tee /tmp/1.txt

运行脚本,得到payload执行。

值得一提的是,本题执行后回显容器不存在,着并非说明靶机过期了,而是已经rce了

wechat_2025-09-14_161925_698

这里注意,如果脚本运行失败,看一下maps.txt是不是从源代码中复制的每一行都是换行的

执行根据回显发现根目录中有flag文件,直接tac /flag是无回显的,也就是没有访问权限

但是我们注意到根目录下有一个readflag,这是一个可执行文件,可以执行读flag的操作

wechat_2025-09-14_162204_050

于是我们的cmd

readflag | tee /tmp/1.txt

拿到flag。

wechat_2025-09-14_162250_753

http://www.wxhsa.cn/company.asp?id=4459

相关文章:

  • FTP替代工具哪个产品好,高效安全之选
  • c++之内存对齐模板类aligned_storage
  • ABC 423先慢慢改吧题解
  • 汇聚层交换机的替换要考虑到的因素
  • git 常见使用
  • python UV 包管理工具安装
  • 什么是网络分区
  • 完整教程:《驾驭云原生复杂性:隐性Bug的全链路防御体系构建》
  • 从机器的角度来说ECS为何性能好
  • 人生最幸福的时刻也就几个瞬间
  • 网络流笔记
  • 实用指南:经典动态规划题解
  • 2025杭电多校(2)
  • latex 打印生僻字
  • CSP-S 2025 游记(The Last CSP ver.)
  • 电机ADC采集
  • 道德经
  • TokenFlow: Unified Image Tokenizer for Multimodal Understanding and Generation - jack
  • digitalworld.local: TORMENT - 实践
  • 8.25-9.2周报六
  • Go by Example(3.Variables)
  • 小程序分包方法
  • 9.3-9.10周报七
  • pyinstaller打包整个文件文件夹和相关exe,三方库
  • Web前端入门第 87 问:JavaScript 中 setInterval 和 setTimeout 细节
  • 基于Python+Vue开发的农产品商城管理系统源码+运行
  • 多人多次并发
  • B. Alternating Current
  • 虚拟电厂运行机制
  • Reinforcing Image Generation with Collaborative Semantic-level and Token-level CoT - jack