![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
pwn
文章平均质量分 70
ZERO-A-ONE
为什么选择 CSDN,因为厌倦了维护 Blog 服务器、GitHub Page 和图床,最后 CSDN 的MarkDown 支持和 Typora 比较兼容,简单就是生产力
展开
-
使用 Rosetta 在Apple Silicon(M1/2)中调试 X86 程序
因为之前在Apple Silicon启动的 amd64 容器都是以 Qemu 模式运行的,所以无法正常的使用 GDB 进行调试应用程序。但是在之前 Docker 宣布支持了Rosetta on Linux,这就使得我们可以使用Rosetta来启动amd64架构的容器。然后近日有博主发现Rosetta中内置了 GDB 服务,可以使用这个 GDB 服务在amd64架构的容器中调试 amd64 架构的程序首先我们需要在 Docker 中开启Rosetta on Linux。原创 2023-06-13 15:31:17 · 1966 阅读 · 3 评论 -
异架构PWN-TIPS-01
在比赛中我们往往需要编写一些不同架构的shellcode,还好pwntools给我提供了shellcode框架,可以帮助我们方便的书写shellcode。下面以调试32位静态链接的arm架构程序为例,首先我们先使用qemu对应架构的指令工具来启动该程序,由于示例的程序是静态编译的,所以就没有使用。关于手写汇编一些比较取巧的办法是先用对应架构的交叉编译器用C语言写,然后用IDA之类的打开编译器出来的二进制文件,扣下哪些汇编代码即可。在安装qemu后,对于静态链接的arm程序就已经可以直接运行了,使用命令。..原创 2022-09-01 15:12:09 · 991 阅读 · 0 评论 -
查看LIBC版本
如果题目提供了.so文件,可以尝试直接从.so文件中获取GLIBC的版本strings .so | grep "GLIBC"如果要查看系统当前的链接库情况可以如下命令ldd --version如果要查看题目的链接信息,可以如下命令syc@ubuntu:~/Downloads/works$ ldd ./warmup_csaw_2016 linux-vdso.so.1 (0x00007ffed0313000) libc.so.6 => /lib/x86_64-linux-gnu/lib原创 2022-05-24 21:32:23 · 4305 阅读 · 3 评论 -
Pwntools 2022简明手册
Author:ZERO-A-ONEDate:2022-02-24本文翻译自:https://github.com/Gallopsled/pwntools-tutorial,主要是考虑到目前中文互联网中关于系统介绍pwntools使用方法的文章都比较老和杂乱,且转换为Python3后又有许多零零散散的问题,看到这个仓库中包含了很多使用技巧和调试问题的解决方案,感到可以翻译一下这个资源库包含了一些开始使用pwntools(和pwntools)的基本教程。这些教程并不致力于解释逆向工程或利用,而是.原创 2022-02-26 17:04:25 · 11426 阅读 · 0 评论 -
2021年能用的LibcSearcher
Author:ZERO-A-ONEDate:2021-11-27这里介绍一个全新的 LibcSearcher 实现。基于 libc-database云端数据库而非本地数据库。原版 LibcSearcher 仓库由于年久失修,经测试发现其基本失效项目地址如下:https://github.com/dev2ero/LibcSearcher安装:pip3 install LibcSearcher使用方法:from LibcSearcher import *obj = LibcSearcher.原创 2021-11-27 02:44:18 · 4123 阅读 · 0 评论 -
快速计算栈溢出长度
Author:ZERO-A-ONEDate:2021-11-27之前看到网上很多在编写栈溢出的时候计算栈溢出长度的文章,很多工具或者方法放到现在以及没有办法使用了,我经常使用的工具是pwndbg里面调用pwntools的cyclic工具我们以CTF Wiki里面的示例程序stack-example为例子首先用IDA找到溢出函数gets的下一个地址为0x804849f,打断点b *0x804849f然后使用cyclic工具生成测试字符串pwndbg> cyclic 200aaaab.原创 2021-11-27 02:11:32 · 1280 阅读 · 0 评论 -
PWNDBG/PWNDBG联合使用
Author:ZERO-A-ONEDate:2021-09-05安装PWNGDB首先安装pwngdb,pwngdb的功能特别广泛,主要如下:libc : Print the base address of libcld : Print the base address of ldcodebase : Print the base of code segmentheap : Print the base of heapgot : Print the Global Offset Table .原创 2021-09-07 15:56:15 · 929 阅读 · 0 评论 -
Use After Free
Author:ZERO-A-ONEDate:2021-07-05一、概念Use after free:顾名思义,某块内存在释放后还能被用户使用;一般存在于,free后没有将指针置为NULL,导致野指针的存在二、例题2.1 hacknote我们先检查一下这个程序(base) syc@ubuntu:~/Desktop/unlink/hacknote$ checksec hacknote [*] '/home/syc/Desktop/unlink/hacknote/hacknote' .原创 2021-07-05 21:42:41 · 1685 阅读 · 0 评论 -
Unlink
Author:ZERO-A-ONEDate:2021-07-03一、unlink的原理简介:俗称脱链,就是将链表头处的free堆块unsorted bin中脱离出来然后和物理地址相邻的新free的堆块合并成大堆块(向前合并或者向后合并),再放入到unsorted bin中危害原理:通过伪造free状态的fake_chunk,伪造fd指针和bk指针,通过绕过unlink的检测实现unlink,unlink就会往p所在的位置写入p-0x18,从而实现任意地址写的漏洞漏洞产生原因:off.原创 2021-07-03 23:16:30 · 1607 阅读 · 2 评论 -
PWN工具介绍
Author:ZERO-A-ONEDate:2021-07-02一、PWNTOOLS1.1 程序的启动与远程连接使用process接口启动程序常用:process(argv,env),例如:process('./demo'):执行可执行文件demoprocess(['cat','flag]):执行命令cat flagprocess("./demo",env={'LD_PRELOAD':'./libc.so.6'}):以指定环境变量运行文件当程序运行于远程时,提供了Host和监.原创 2021-07-02 13:41:12 · 1096 阅读 · 0 评论 -
Gadget寻找
Author:ZERO-A-ONEDate:2021-06-25我们可以选择使用ROPgadget或者ropper两款工具查找gadget:$ ROPgadget --binary [file] | grep "xxx"$ ropper --file [file] --search "xxx"生成ROPchain:$ ropper --file [file] --chain execve$ ROPgadget --binary [file] --ropchain...原创 2021-06-25 19:32:07 · 495 阅读 · 0 评论 -
二进制安全基础之pwn利器pwntools
Author:ZERO-A-ONEDate:2021-06-24一、深入理解pwntools的使用1.1 pwntools常用模块asm:汇编与反汇编dynelf:远程符号泄露elf:elf文件操作gdb:启动gdb调试shellcraft:shellcode的生成器cyclic pattern:偏移字符计算process/remote:读写接口1.2 汇编与反汇编将汇编指令转为机器码>>> asm('nop')'\x90'将机器码转为汇编指令&g.原创 2021-06-24 19:02:29 · 1264 阅读 · 0 评论 -
PWN收发脚本例子
from pwn import *context.arch = 'amd64'def debug(addr,PIE=True): text_base = int(os.popen("pmap {}| awk '{{print $1}}'".format(p.pid)).readlines()[2], 16) if PIE: info("b* " + hex(text_base+addr)) gdb.attach(p,'b *{}'.format(h原创 2021-06-12 09:56:08 · 460 阅读 · 0 评论 -
PWN栈溢出段错误的坑
Author:ZERO-A-ONEDate:2021-03-30一、开头相信很多PWNer/Biner在写EXP的时候都会遇上一个令人很抓狂的问题,就是自己明明在GDB里面调试得出的地址,经过自己十分精确的计算,一阵猛写EXP,打!然后进过一连串的跳动的命令行后,激动的开始准备夺取shell,然后,然后,segment fault(code dump),哦豁段错误,GG这个是因为什么问题呢,其本质是因为正常程序运行时,会将环境变量字符串数组和命令行参数字符串数组存放在栈顶,而程序使用的局部变量等.原创 2021-03-30 21:22:03 · 432 阅读 · 0 评论 -
How2Heap笔记(三)
Author:ZERO-A-ONEDate:2021-01-22一、house_of_spirithouse-of-spirit 是一种 fastbins 攻击方法,通过构造 fake chunk,然后将其 free 掉,就可以在下一次 malloc 时返回 fake chunk 的地址,即任意我们可控的区域。house-of-spirit 是一种通过堆的 fast bin 机制来辅助栈溢出的方法,一般的栈溢出漏洞的利用都希望能够覆盖函数的返回地址以控制 EIP 来劫持控制流,但如果栈溢出的长度无.原创 2021-01-25 14:53:56 · 707 阅读 · 0 评论 -
How2Heap笔记(二)
Author:ZERO-A-ONEDate:2021-01-22这里强烈推荐两个可以在线查看Linux和Glibc源码的网站:Glibc:https://elixir.bootlin.com/glibc/glibc-2.31/sourceLinux:https://elixir.bootlin.com/linux/latest/source/include/linux在Glibc 2.23下拥有的例子:fastbin_dupfastbin_dup_consolidatefastbi.原创 2021-01-24 16:35:41 · 700 阅读 · 1 评论 -
How2Heap笔记(一)
Author:ZERO-A-ONEDate:2021-01-21 “how2heap”是shellphish团队在Github上开源的堆漏洞系列教程。上面有很多常见的堆漏洞教学示例,实现了以下技术:FileTechniqueGlibc-VersionPatchApplicable CTF Challengesfirst_fit.cDemonstrating glibc malloc’s first-fit behavior.calc_tcache_idx..原创 2021-01-21 21:25:13 · 2659 阅读 · 1 评论 -
GDB自动化脚本编写笔记一
Author:ZERO-A-ONEDate:2019-12-24作为UNIX/Linux下使用广泛的调试器,gdb不仅提供了丰富的命令,还引入了对脚本的支持:一种是对已存在的脚本语言支持,比如python,用户可以直接书写python脚本,由gdb调用python解释器执行;另一种是命令脚本,用户可以在脚本中书写gdb已经提供的或者自定义的gdb命令,再由gdb执行我们通常都是在交互模式下使用 GDB 的,即手动输入各种 GDB 命令。其实 GDB 也支持执行预先写好的调试脚本,进行自动化的调..原创 2021-01-09 22:29:13 · 5705 阅读 · 2 评论 -
IDA脚本笔记01
Author:ZERO-A-ONEDate:2019-10-290x01 读取和修改数据的函数01 Bytelong Byte(long addr)从虚拟地址addr处读取一个字节值02 Wordlong Word(long addr)从虚拟地址addr处读取一个字(2字节)值03 Dwordlong Dword(long addr)从虚拟地址addr处读取一个双字(4字节)值04 PatBytevoid PatchByte(long addr, long val)设.原创 2021-01-09 22:25:23 · 900 阅读 · 0 评论 -
Linux保护技术绕过小结
Linux保护技术绕过小结Author:ZERO-A-ONEDate:2020-12-30一、基础知识1.1 内存布局大部分的Linux操作系统的内存布局:.text 汇编代码.data 有初始值的数据.bss 无初始值的数据heap 堆shared object 共享对象区域(libc.so之类的)stack 栈kernel-area 内核区域实际大概像这样:gdb-peda/pwndbg 下可以直接使用vmmap也可以通过cat /proc/$PID/maps原创 2020-12-30 23:22:30 · 1537 阅读 · 0 评论 -
长亭PWN笔记04
Fastbin attackFast bin利用技术Fast bin为单向链表,结构简单,容易伪造为了提高效率,安全检查比较少只针对Fast bin大小的chunk,small/large chunk不适用利用思路空闲Fast chunk如果发生溢出被覆盖,则链表指针fd可以被修改可以通过修改链表指针fd,在Fast bin链表中引入伪造的空闲Fast chunk下次分配时分配出伪造的Fast chunk伪造的Fast Chunk可以在.bss全局变量处,也可以在栈上原创 2020-12-28 09:35:02 · 260 阅读 · 0 评论 -
长亭PWN笔记03
什么是堆glibc的堆管理实现arenabinschunkmalloc和free的工作流程fastbin attack新版本glibc中的tcache堆的花式玩法什么是堆栈通常用于为函数分配固定大小的局部内存堆是可以根据运行时的需要进行动态分配和释放的内存,大小可变Malloc/NewFree/Delete堆的实现重点关注内存块的组织和管理方式,尤其是空闲内存块如何提高分配和释放效率如何降低碎片化,提高空间利用率举例:浏览器的DOM树通常分配在堆上.原创 2020-12-28 09:33:08 · 410 阅读 · 0 评论 -
长亭PWN笔记02
ROP实战技巧之一:连接多个libc函数调用ROPP实战技巧之二:栈迁移(Stack Pivot)ROP案例详解x64下的ROPROP和GOT表劫持相关缓解技术回顾:栈布局回顾:Return to Libc一次在栈上布置system、exit、binsh、0,即可连续调用system("/bin/sh")和exit(0)那如何串联3次或更多的libc函数调用?如果libc函数有2个以上的参数,如何不是ROP Payload?例如read(fd,buf,size)write(fd,.原创 2020-12-28 09:31:54 · 462 阅读 · 0 评论 -
长亭PWN笔记01
PWN工具集合zio - 框架接口简单易用https://github.com/zTrix/zioPwntoolsPwn框架,集成了很多工具,例如shellcode生成,ROP链生成等http://pwntools.com/https://github.com/gallopsled/pwntoolspeda/pwndbg - gdb调试插件libheap利用栈溢出Example BOE program:#include<stdio.h>#include&原创 2020-12-28 09:30:03 · 877 阅读 · 0 评论 -
pwntools编写技巧
在最近的几次比赛中查看大佬们的exp学到了很多用pwntools编写exp时的小技巧一、利用TMUX多屏调试TMUX是一款终端复用软件,用来在一个终端里面开启多个窗口,极大的提升了工作效率,在工作中使用带有图形化界面的虚拟机实在太吃资源,而且不同版本libc切换复杂,于是我们可以选择通过配置一台服务器使用纯终端的模式就行调试,这就需要tmux进行多屏调试context.terminal = ['tmux', 'splitw', '-h']这段代码可以在我们调试的时候,自动一分为二增加一个窗口现实G原创 2020-12-11 10:36:39 · 1228 阅读 · 1 评论 -
CTF二进制快速入门笔记01
常见的二进制程序漏洞栈溢出,堆溢出,UAF,这个UAF比较经常被问到上述漏洞怎么利用一、栈溢出1.1 基础栈结构进入函数时:CALLXXXPUSH retadddr(call的下一条指令,目的:知道怎么回来)JMP XXX进入到XXXPUSH RBP(保存栈基址,好恢复)MOV RBP,RSP(栈底抬上去)SUB RSP,XXh(抬高栈顶给局部函数预留空间)退出函数时:leavemov rsp,rbp(把rsp弄回来)pop rbp(把rb..原创 2020-11-30 23:39:03 · 1483 阅读 · 0 评论 -
在macOS下安装pwntools
capstone==3.0.5 still tries to build for both i386 and x86_64, this is already fixed on master and will be released with the next version. Looking at the Makefile, there are two possibilities:1.Turn ...原创 2019-05-03 11:10:35 · 1319 阅读 · 0 评论