青少年CTF擂台挑战赛2024round#1 web与杂项部分题解

本文讲述了在青少年CTF比赛中遇到的web、PHP后门、XXE注入和SQL注入挑战,包括如何利用MD5碰撞、PHP版本信息和XXE漏洞获取flag,以及通过密码破解解决MISC部分的谜题。
摘要由CSDN通过智能技术生成

前言

        这次的青少年CTF擂台挑战赛,相较于去年,我觉得,今年的web题很适合刚入门的初学者进行攻克,难度属于中等对于初学者来讲,还是需要了解一些web方面稍微深层的知识,并且做题还是需要一些脑洞。话不多说咱们开始。

WEB

EasyMD5

        得到赛题:打开链接:  

发现是两个文件上传的地址;我们查看源代码:

并没有提示的点,那只能先上传个东西,看能跑出什么:

我们随便上传了一个文件,发现提示:Not a PDF! angry!!!!!! get out from my page;所以,我们就上传pdf文件,因为有两个文件上传的点,所以,都需要上传pdf文件:

这里提示我们,两个上传的文件要不一样,所以,我们就选择传两个文件名不一样的pdf文件例如:

顺利弹出回显,提示我们进行md5碰撞,相当于把两个pdf文件里面的内容变成MD5值相等的值,例如:

s878926199a

0e545993274517709034328855841020

s155964671a

0e342768416822451524974117254469

xe开头的即是科学计数法,所以0exxxxx...相当与等于0,故此两个MD5值就会相等;

我们进行传入:

传入之后,顺利拿下flag;

针对于此题,我们还是会注意到,常见MD5的碰撞,会放在php代码审计题,所以与文件上传进行结合着出题,还是打破了以往的出题思路,需要摒弃一些定式思维,跟着提示做,也能做出来。

PHP的后门

得到地址链接,我们进行常规操作,访问查看源代码:

我们在源代码里面并没有找到直接提示的信息,但是首页界面提示:

你应该知道这是哪个版本的PHP吧!

那我们直接用nikto扫一下,看看php的版本:

我们就得到了php的版本:PHP/8.1.0-dev

结合题目PHP的后门,我们猜测,是PHP/8.1.0-dev此版本下的一个漏洞,百度搜一梭子:

PHP-8.1.0-dev 后门命令执行漏洞复现_php/8.1.0-dev-CSDN博客

得到payload:

User-Agentt: zerodiumvar_dump(2*3)
User-Agentt: zerodiumsystem(“cat /etc/passwd”)

因为我们是要读取flag的值,所以我们就把payload改成:

User-Agentt: zerodiumsystem(“cat /flag”)

抓包进行修改:

就得到了flag

写命令的时候一定要注意末尾加;不然会报错。

PHP的XXE

题目描述:

XXE(XML External Entity)是一种针对XML解析器的攻击技术,也被称为XML外部实体注入攻击。当应用程序解析用户提供的XML输入时,如果没有正确地配置或过滤外部实体,攻击者可以利用这一漏洞执行恶意操作。

XML允许在文档中定义和使用外部实体,这些实体可以从外部资源(如文件、网络URL等)中获取数据。如果应用程序解析了包含恶意外部实体的XML输入,并且未对外部实体进行适当的处理或限制,攻击者可能会读取敏感文件、执行远程代码或进行其他恶意活动。

就是对xxe的一个基本的解释:我们也确定了基本的思路:就是进行xxe的攻击注入:

拿到链接:

就是一个phpinfo的一个界面,找了一圈也没找到xxe注入的点:

我们就尝试在此界面进行xxe的注入:抓包进行注入:

注入payload:

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE xxe[ 
    <!ELEMENT test ANY >    
    <!ENTITY xxe SYSTEM "file:///flag" >]>    
<test>
    <name>&xxe;</name>                    
</test>        
     

PS:[Vulhub] PHP环境 XML外部实体注入漏洞(XXE)_phpxxe-CSDN博客

如果不会,可以去这个博客进行学习查看:

我们直接对首页进行注入发现并不行;

所以我们需要考虑在子级域名下可能会注入成功:

目录下有dom.php、index.php、SimpleXMLElement.php、simplexml_load_string.php其中dom.php、SimpleXMLElement.php、simplexml_load_string.php均可触发XXE漏洞。

故此:

就得到了flag。

Easy_SQLi

看名字,就知道要sql注入了:

得到链接:

常见的登录界面,直接sqlmap一梭子,先去抓个包

因为是POST登录方式,所以我们把抓到的包进行保存为1.txt

现在就要sqlmap开始跑了:

得到时间盲注,我们现在在进行爆库:

得到了库名:flag可能会在qsnctf或者test里面:

一个一个尝试:

所以在qsnctf里面,就已经出来了flag。

初次扫描的时候,由于选择的是时间盲注,sqlmap跑的速度并不是很快,还是需要耐心一点等待即可。

MISC

CTFer Revenge

下载得到附件,

第一眼也看不出来什么,但是管道符很吸引人,有点像wenhex打开文件之后的界面,但是管道符应该在右边,所以猜测文本内容应该是被颠倒了:

直接逆序输出:

# 打开原始文件并读取内容
with open('1.txt', 'r', encoding='utf-8') as file:
    content = file.read()

# 逆向输出内容到新的txt文件
with open('2.txt', 'w', encoding='utf-8') as file:
    file.write(content[::-1])

查看新的内容:

果不其然,就是我们猜测的那样,现在我们需要把每行的16进制数据提取出来:

# 打开输入文件和输出文件
with open('2.txt', 'r') as input_file, open('3.txt', 'w') as output_file:
    # 逐行读取输入文件内容
    for line in input_file:
        # 找到第一个管道符的位置
        pipe_index = line.find('|')
        # 如果找到管道符,则提取16进制数据
        if pipe_index != -1:
            hex_data = line[9:pipe_index].strip()
            # 写入提取的16进制数据到输出文件
            output_file.write(hex_data + '\n')

得到:

我们在打开winhex,新建一个项目:

把提出来的16进制数据复制到里面:

保存,取名为1.rar,因为PK文件头,应该是很熟悉了:

解压发现需要密码,伪加密先观察,再去爆破:

发现并不是伪加密,查看winhex内容时:发现:

直接爆破:

得到密码:z12345

解压得到:flag.png

挨着读即可:flag:qsnctf{b414e3e3a6449ddba0997db259203eb7} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值