ARM64下ROP,以及调试技巧总结:

本文详细介绍了在ARM64环境下如何进行Return-Oriented Programming (ROP)的调试,包括环境搭建、依赖库的安装、调试工具gdb-multiarch的使用,以及解决pwntools中asm功能报错的问题。在调试过程中,通过cyclic确定栈溢出长度,寻找gadget,以及构造shellcode来控制程序执行流程。文章还分享了在2018上海CTF的armpwn挑战中应用的ROP技巧。
摘要由CSDN通过智能技术生成

环境搭建:
aarch64依赖库:
apt-get install libc6-arm64-cross

动态需要指定动态库加载路径:
qemu-aarch64-static -L /usr/aarch64-linux-gnu ./arm

安装:gdb-multiarch
sudo apt-get install git gdb-multiarch

调试时,需要启动gdb-multiarch
gdb-multiarch

配置框架:
set architecture aarch64

连接远程端口:
target remote localhost:1234

方笔方便和pwndbg或者peda兼容,需要降低gdb版本:
sudo apt-get remove gdb

各版本gdb:
http://ftp.gnu.org/gnu/gdb/

linux 下安装lantern:
deb文件安装好后,需要安装包:
apt-get install gir1.2-appindicator3-0.1

pwntools 的 asm功能报错的情况–针对arm:
解决方法:
git clone https://github.com/Gallopsled/pwntools-binutils
cd pwntools-binutils
cd ubuntu
sudo ./install_all.sh arm
sudo ./install.sh arm
需要Binutils库支持的框架才行。

调试过程当中,下断点:
具体调试时,刚刚用gdb来target的时候,是先劫持到加载器,我们的要程序还没加载进去。
没开pie可以先下断点,等待劫持即可。
这里出现一个问题:checksec的时候pie为0x400000
先利用:cyclic 200 产生字符串,造成溢出来捕获程序的位置,确定真实的基地址,这个方法会导致确定错误的基址。
cyclic 200确定的基址是:0x410000,这是错误的,真正的基址还是0x400000。
确定基址我们就可以把断点下到任意位置了。
如图:
在这里插入图片描述
真实的基址(错误的),注意看各个区段的属性:
在这里插入图片描述
经过调试,程序加载的基址并不是0x410000,好像是产生异常后,将0x400000的数据拷贝到0x410000的
程序的真正基址还是0x400000,如图:
在这里插入图片描述

列题:
2018上海 ctf 的armpwn。
exp是参考别人的:
调试exp时,先下断点,再调试。

# -*- coding: utf-8 -*-
from pwn import *
import sys
import time
context.binary = "./arm"
binary = './arm'

if sys.argv[1] ==
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值