先附上题目:BUUCTF在线评测
放到我们的虚拟机上checksec一下,64位程序,拥有RWX段。
Arch: amd64-64-little
RELRO: Partial RELRO
Stack: No canary found
NX: NX disabled
PIE: No PIE (0x400000)
RWX: Has RWX segments
接下来放到IDA里f5一下,可以看到主函数读了一个0x64大小的name,又gets一个text
int __cdecl main(int argc, const char **argv, const char **envp)
{
char text[30]; // [rsp+0h] [rbp-20h]
setvbuf(stdout, 0LL, 2, 0LL);
puts("tell me your name");
read(0, name, 0x64uLL);
puts("wow~ nice name!");
puts("What do you want to say to me?");
gets(text, name);
return 0;
基本思路可知ret2shellcode,shellcode我们需要自己构造,vmmap发现name所在的段可读可写可执行,那么我们就可以在name处写上我们的shellcode,再用gets栈溢出来跳转到name的地址实现攻击。
exp:
from pwn import *
context(os = 'linux

本文探讨了一种针对64位程序的安全漏洞利用技术,即RET2Shellcode攻击。通过分析程序的内存布局,发现存在RWX段,可以写入并执行shellcode。实验中使用IDA进行反汇编,找到关键函数调用,然后构造payload,通过栈溢出将控制流导向name段的shellcode,从而实现远程代码执行。最终,通过python的pwn库发送payload,成功交互并获得shell。
最低0.47元/天 解锁文章
928

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



