前言
这次的青少年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}