-
pwnable.kr - GOT overwrite
这是一道pwnable.kr上的题: ssh passcode@pwnable.kr -p2222 (pw:guest) 进入之后可以查看题目的源码: #include <stdio.h> #include <stdlib.h> void login(){ int passcode1; int passcode2; printf("enter passcode1 : "); scanf("%d", passcode1); fflush(stdin); // ha! mommy told me that 32bit is vulnerable to bruteforcing :) printf("enter passcode2 : "); scanf("%d", passcode2); printf("checking...\n"); if(passcode1==338150 && passcode2==13371337){ printf("Login OK!\n"); system("/bin/cat flag"); }...
-
iOS App Thinning
App Thinning 原因: 在AppStore使用蜂窝更新下载的限制是不能超过150MB,项目大小已经接近临界值,所以需要尽量的减小包体积 苹果官方瘦身方法: On-Demand Resources On-Demand Resources Essentials 将图片、音频等资源文件分离出来,开发阶段将资源按照ResourceTag区分,存放在苹果的服务器上。App按需要发起请求,由操作系统来管理下载和存储。App拿到这些资源后释放请求。 下载的资源在多个启动周期内一直存放在设备上,访问更快。 优点: 包体积更小,设备能有更多的存储空间 Lazy loading (Game -> level -> download current resources) 很少使用的资源可以放在服务器 (Tutorial) 请求内购资源 缺点: 惊!资源需要从苹果服务器下载! 资源需要按tag区分,制定相应的配置策略 代码中管理何时下载,何时释放等,增加资源管理的复杂度 不适用于项目,资源占比本来就不大 Slicing (iOS9之后) Slicing本身并不需要我们做任何事情。 因为上传的包,包括二进制文件和资源文件等都具有Universal的性质,Slicing所做的就是根据设备种类切分资源。 iOS8下载的仍然是Universal包。 IPA文件结构: target resources: 图片、音频、其他静态库包含的bundle Frameworks(里面都是动态库,占了很大的比例,包含swift系统库和第三方库) 权限和配置文件: info.plist, entitlement.plist… Plugins: Widget组件等 其他: 字体文件、国际化的字符串文件、CodeSignature等 // 按文件大小排序...
-
ROP Exploit实验 2
前言 本实验较上一篇,漏洞利用的根本原理没变,只是流程复杂了点。本实验使用的是一个不开源的程序,可以在这里下载。环境依然是iOS 7.0.1的iPhone4。 窥探程序 先直接运行下这个程序看下它做了些什么: Jins:~/Code root# ./roplevel3 Welcome to ROPLevel3 by @bellis1000 0Select an option: [1] Function [2] Function (internal) [3] Exit 1 Hello world! Welcome to a function - an function that does absolutely nothing! Select an option: [1] Function [2] Function (internal) [3] Exit 2 You do...
-
ROP Exploit实验 1
概述 本文主要是通过简单的实验来弄清楚ROP Exploit的一些基本原理。不正之处欢迎指正。 简单回顾下上一篇ARM环境下的漏洞利用的关键知识点: 通过运行程序后输入一个指定格式的字符串,利用某些函数不检查字符串长度的缺陷,栈溢出后覆盖到函数入口push到栈上的PC值。所以该值pop回PC的时候,读取到了你输入的字符串中的值。将目标函数入口地址替换到你输入字符串中的指定位置,使PC读取该目标函数入口地址即可实现非正常跳转。 但是通常不太可能只是简单的跳转到一个指定函数,而是需要跳转多个函数来达到漏洞利用的目的。即跳转A再跳转B再跳转C等等。如何实现呢?我们已经能跳转到一个函数,如何在这个函数中使PC包含其他函数入口的地址呢? 实验环境:iPhone4 iOS7.1.2 一个有漏洞的程序 先打造一个存在漏洞的程序,这个程序有两个我们可以利用的函数change和secret #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> char command[] = "date"; void change() { strcpy(command, "ls"); printf("command changed.\n"); } void secret() { printf ("executing command ...\n"); system(command); } int main() { printf("Welcome to ROPLevel 1 for ARM!\n"); char buff[12];...
-
ARM环境下的漏洞利用
前言 本文是边翻译边跟做实验完成的,主要是ARM环境下的漏洞利用的基础,太基础!很适合入门。大牛请绕行! 原文是在iPhone4的终端上完成所有操作的,我觉得麻烦就改成在电脑上操作了,截图已全部换成自己的。 原文作者Twitter:@bellis Part 1: 准备工作 这篇教程讲的是ARM平台上漏洞利用的基础。主要针对一些对漏洞利用和黑客行为感兴趣的初学者,所以在阅读本文之前不需要有太多相关的知识。但是你应该明白一些基础的内容:CPU是怎么工作的,二进制,十六进制,什么是汇编代码以及C语言编程。 为了跟随这篇教程,你需要一台32位的ARM设备。由于我的主要工作集中在iPhone和iOS上,所以我在这个教程中使用的是一台iPhone4设备。这台设备有一个Apple A4(S5L8930X)芯片——一个ARMv7(32位)的处理器。 如果你有一台64位(ARM64)的设备,你仍然可以尝试跟着一起做,但是可能会出现一些复杂情况,会碰到些困难。 在开始之前你需要安装一些工具,这些工具能让你在设备上编译和调试C代码。添加http://cydia.radare.org到你的Cydia源,然后安装radare2-arm32。这样你的设备上就安装了radare调试器,它对于分析代码,和反编译程序了解程序工作是非常有用的。 同样还需要添加源http://coolstar.org/publicrepo,安装LLVM+Clang。这个程序能够使你无需电脑的帮助,在设备上直接编译C程序。你同样还需要一个SDK(软件开发工具包)。我当前在设备上使用的是iPhoneOS8.1sdk。你可以在网上下载一个或者通过Xcode移动到你的设备上。 还有两样必要的东西:iFile和Terminal(我使用的是MTerminal)。我假设大多数人已经安装了这两个应用。 Part 2: 创建一个有漏洞的程序 开始这个实验前,我们需要一个有漏洞的程序让我们能够操作和利用,这被称为漏洞利用(exploitation)。漏洞利用经常用于控制或者劫持进程的执行流程,让它做些它本不会做的事。在iOS越狱过程中,内核的漏洞利用用于重新安装iOS的文件系统比如R/W,允许在设备上执行未签名的二进制文件等等。这个教程中的漏洞利用是非常基础的,比真实世界中所碰到的情况(比如iOS越狱等等)简单的多。但是我主要就是讲解漏洞利用的基础,因此如果你感兴趣的话,这应该是你开始的好地方。 下面就是我们将要进行漏洞利用的程序源码: #include <stdio.h> #include <stdlib.h> void secret() { printf("You shouldn't be here ;P\n"); system("ls -la /"); } int main() { char buff[12]; gets(buff); printf("You entered %s\n", buff); return 0; } 通过iFile(或者Terminal)创建一个hello.c文件,将上面的代码复制进去。 但愿你有些C语言基础。如果没有,我会简要的解释下这个程序做了什么。...
-
IDA Plug-in - FRIEND
FRIEND作为IDA的一款插件,可以提升反汇编的效果,并且能够在IDA中显示寄存器/指令的提示文档,使IDA更加得心应手。 一、安装事项 本实验安装环境: MacOS 10.12.6 Xcode 8.3.3 IDA 6.8 安装过程: 下载FRIEND:FRIEND下载地址 FRIEND插件依赖两个SDK:idasdk和hexrays_sdk,编译前需要先下载这两个SDK,将内容拷贝到相应目录。否则会出现编译失败。 定位到FRIEND目录下,执行以下命令: $ mkdir _build $ cd _build $ cmake [-DUSE_HEXRAYS=OFF] .. $ make 在_build目录下可以看到相应的二进制文件已经生成: 插件生成之后,按照原文的描述,需要复制到/Applications/IDA Pro 6.95/idabin/plugins这个目录,但是我发现保存到idabin/plugins之后打开ida是找不到这个插件的,我实际保存到的目录是/Applications/idaq.app/Contents/MacOS/plugins 再重新打开IDA,点击Edit –> Plugins就可以看到FRIEND插件了。 二、插件的配置 接上一步骤,点击FRIEND,进入插件配置界面: 选择你想要关联的说明文档。在/FRIEND-master/Configurations目录下有两个XML文件,这里我们选择AArch64_armv8arm_k.xml。导入后,选择自己想要文档化的内容,并勾选下面三个勾,允许做处理器扩展、允许显示提示、允许显示函数概要。点击OK。 配置完成后,来看看效果: 指令/寄存器的解释,再也不用手动去搜了: 指令更明了: 显示函数的概要: 三、编辑提示文档 FRIEND还提供了编辑提示文档的功能。使用FRIEND中提供的工具FRIEND Hint Editor对/FRIEND-master/Configurations/AArch64_armv8arm_k.xml进行编辑。 这个工具也在FRIEND-master/目录下,同样也需要手动创建: $ cd HintEditor/HintEditor/ $ mkdir _build...