一步一步pwn路由器之radare2使用实战
前言
本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274
前文讲了一些 radare2 的特性相关的操作方法。本文以一个 crackme 来具体介绍下 radare2 的使用
程序的地址: 在这里
正文
首先使用 radare2 加载该程序。使用了 aaa 分析了程序中的所有函数。使用 iI 查看二进制文件的信息。可以看到是 32 位的。

使用 aaa分析完程序后,可以使用 afl 查看所有的函数。

直接跳到 main 函数看看逻辑

不习惯看文本模式的汇编的话,可以使用 VV 进入图形化模式

拿到个程序,我会首先看函数调用理解程序的大概流程。比如这里先调用了 printf 打印了一些提示信息,然后使用 scanf 获取我们的输入,分析 scanf的参数
| 0x080484cc 8d45fc lea eax, [local_4h]
| 0x080484cf 89442404 mov dword [local_4h_2], eax
| 0x080484d3 c70424348604. mov dword [esp], 0x8048634 ; [0x8048634:4]=0x6425
| 0x080484da e851feffff call sym.imp.scanf ; int scanf(const char *format)
我们可以知道0x8048634 是我们的第一个参数, local_4h是我们的第二个参数。看看 0x8048634 存放的是什么。

所以程序需要我们输入的是一个 整数,然后把它存在 local_4h里面了。那我们就可以把 local_4h 变量改下名字。这里改成 input

继续往下看发现 input 变量后来没有被处理直接传到了 test 函数。他的第二个参数是这样生成的

为了获得这个参数我们有很多方法,比如 我们可以直接静态分析,或者用 gdb 调试这都很容易得到结果。
这里正好试试 radare 的模拟执行功能。使用该功能我们需要先分析要模拟执行的代码对环境的依赖,比如寄存器的值,内存的值等,然后根据依赖关系修改内存和寄存器的值来满足代码运行的上下文。
在这里这段代码只对栈的内存进行了处理。那我们就先分配一块内存,然后用 esp 刚刚分配的内存。由于这里一开始没有对内存数据进行读取,所以我们直接使用分配的内存就好,不用对他进行处理。
首先我们跳到目标地址,然后使用 aei 或者 aeip 初始化虚拟机堆栈,然后使用 aer 查看寄存器状态。

然后分配一块内存作为栈内存,给程序模拟执行用。

在 0xff0000 分配了 0x40000 大小的内存。然后把 esp 和 ebp 指到这块内存里面。

然后我们让模拟器运行到 0x0804850c 也就是调用 test 函数的位置处,查看他的参数,可以看到第二个参数的值就是 0x00052b24

最后我们进去 test 函数里面看看

就是判断 参数一 和 参数二 是否一致,所以这个 crackme 的 key 就是 0x00052b24 十进制数表示 338724.

成功
总结
radare2 的模拟执行功能是通过 esil 来实现的,粗略的试了一下感觉还是挺不错的感觉和 unicorn 有的一拼,不过radare2也是有 unicorn的插件的。
参考:
http://radare.org/r/talks.html
https://github.com/radare/radare2book
https://codeload.github.com/radareorg/r2con/
一步一步pwn路由器之radare2使用实战的更多相关文章
- 一步一步pwn路由器之rop技术实战
前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 这次程序也是 DVRF 里面的,他的路径是 pwnable/She ...
- 一步一步pwn路由器之radare2使用全解
前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 radare2 最近越来越流行,已经进入 github 前 25了 ...
- 一步一步pwn路由器之wr940栈溢出漏洞分析与利用
前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 这个是最近爆出来的漏洞,漏洞编号:CVE-2017-13772 固 ...
- 一步一步pwn路由器之环境搭建
前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 正式进入路由器的世界了.感觉路由器这块就是固件提取,运行环境修复比 ...
- 一步一步pwn路由器之栈溢出实战
前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 本文以 DVRF 中的第一个漏洞程序 stack_bof_01 为 ...
- 一步一步pwn路由器之uClibc中malloc&&free分析
前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 栈溢出告一段落.本文介绍下 uClibc 中的 malloc 和 ...
- 一步一步pwn路由器之路由器环境修复&&rop技术分析
前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 拿到路由器的固件后,第一时间肯定是去运行目标程序,一般是web服务 ...
- 简单实例一步一步帮你搞清楚MVC3中的路由以及区域
我们都知道MVC 3 程序的所有请求都是先经过路由解析然后分配到特定的Controller 以及 Action 中的,为什么这些知识讲完了Controller Action Model 后再讲呢?这个 ...
- 【计算机网络】一步一步学习IP路由流程
TCP/IP协议簇是目前互联网应用最广的协议栈,谈到TCP/IP协议栈就不能不讲一讲IP路由的问题,因为在我们使用的网络通信中几乎每时每刻都在发生着IP路由的事件…….当你在网络世界中还是一位新手的时 ...
随机推荐
- java基本语法一
1 关键字和保留字 1.1 关键字 关键字的定义:被java语言赋予了特殊含义,用做专门用途的字符串(单词). 关键字的特点:关键字中的所有字母都是小写. 1.2 保留字 java保留字:现有Java ...
- 数据?算法-> which is important?
谷歌的强不是强在 PageRank 算法,而在于它是第一个在排名时把链接——而不只是文字和标题——考虑进去的.又以自己教的数据挖掘课为例.他让学生以 Netflix 用户对一万八千多部电影的打分为基础 ...
- Sublime Text 3快捷键的使用技巧(python)
Sublime Text 3非常实用,但是想要用好,一些快捷键不可或缺,所以转了这个快捷键汇总. 先拉出来说几个切身体会最常用, Ctrl+Z 撤销. Ctrl+Y 恢复撤销 Alt+Shift+2 ...
- java对象流与序列化
Object流,直接把obj写入或读出. 前言: 比如 画图的程序,咣当画一个三角形出来,咣当画一正方形出来.然后存盘,当你下次再打开软件的时候三角形.方块还在原来的位置上.如果用面向对象的思维,三角 ...
- Php开发银行接口之浦发银行
Php开发银行接口之浦发银行 (提示:下面的经验都是按照开发文档一步一步踩坑过来的,但是不能不看开发文档!!!) 第一步:开发准备 1,安装java,百度下载JDK很方便(我自己网盘有,然后配置环境变 ...
- linux中查找某端口,并关闭对应的端口
1,netstat -ntlp (n表示不反向域名杰斯 t表示查看tcp协议的连接 l查看正在监听端口 p获取进程号和端口) 2,然后直接kill -9 端口号 参考全文:https://linux ...
- 基于TrueLicense实现产品License验证功能
受朋友所托,需要给产品加上License验证功能,进行试用期授权,在试用期过后,产品不再可用. 通过研究调查,可以利用Truelicense开源框架实现,下面分享一下如何利用Truelicense实现 ...
- Maven 设置阿里巴巴发布版本仓库
打开 pom.xml 在里面添加以下代码就能顺利在阿里上面下载所需要的 jar 包文件: <!--设置 Maven 组件仓库 --> <repositories> <!- ...
- 1000. A-B
1000. A-B -----> http://soj.me/1000 Constraints Time Limit: 1 secs, Memory Limit: 32 MB Descripti ...
- C 语言 static、extern与指针函数介绍
1.exit(0)正常退出程序 exit(1)程序异常时退出程序 2.static(静态变量)修饰局部变量 在局部变量使用static修饰,会延长局部变量的存在期.但我们需要注意一下几点: 虽然sta ...