堆指针越界&堆上布置shellcode|攻防世界pwn进阶区 note-service2

本文介绍了如何利用堆指针越界漏洞在CTF竞赛中布置shellcode并控制程序执行流程。通过分析保护机制、程序功能、IDA逻辑,提出利用思路,包括替换GOT表、关闭NX保护、使用jmp short指令和堆栈数据执行。详细解释了计算jmp指令跳转距离、shellcode布置、传参机制及free GOT表地址的计算过程。
摘要由CSDN通过智能技术生成

前言

目前CTF竞赛中,以堆为背景的pwn题已逐步成为了pwn类型题目中的主流,开始逐步接触堆题,本题涉及到在堆上布置shellcode,并利用堆指针使程序执行流得到控制。

思路分析

0x00.检查保护机制

在这里插入图片描述

Canary found:不能用溢出的方式控制程序执行
NX disabled:堆栈上数据可执行
PIE enabled:地址随机化开启

0x01.查看程序功能

在这里插入图片描述

一个简单的菜单题,add 和 del可以用,show和edit功能不可用

0x02.ida查看逻辑

在这里插入图片描述
在这里插入图片描述
获得以下信息:

  • 堆块最大为8字节,但是我们只能写入7字节的数据
  • 堆指针的下标可以越界

0x03.利用思路

(1)通过堆指针越界,把一些GOT表表项替换成堆指针
(2)因为NX 关闭,堆栈数据可以执行,直接在堆栈上布置shellcode
(3)每个堆块可以写入7个字节的数据,3个字节留作布置jmp short xxx(jmp short占两个字节,对应的机器码是\xeb,xxx对应1字节,且jmp short xxx是相对当前位置寻址),4个字节用于布置shellcode。
(4)要把shellcode分开布置在多个堆块上面。

jmp short xxx 中,xxx=目标地址-当前地址-2

利用过程

0x00.选一段shellcode布置在堆上

mov rdi, xxx   //xxx=&("/bin/sh")  
xor rsi,rsi   //rsi=0,实际可以是mov rsi, 0 但是mov这个命令太长了。下同。占2字节
mov rax, 0x3b //rax=0x3b 占4字节
xor rdx,rdx   //rdx=0 占2字节
syscall //就是syscall调用execve("/bin/sh",0,0)

jmp short 占2个字节
jmp short xxx占3个字节

0x01.计算jmp short指令要跳多少字节

在这里插入图片描述
从chunk0跳到chunk1,
目标地址-当前地址=8+8+8+1+2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值