CTF/PWN
文章平均质量分 92
二进制溢出漏洞也称之为 PWN,本系列主要讲解 CTF 中的 PWN 系列的二进制漏洞
江下枫
这个作者很懒,什么都没留下…
展开
-
利用格式化字符串漏洞实现任意地址读写
理解格式化字符串漏洞关键还是在于理解栈空间布局,任意地址写初学者接触到可能较为抽象,但是结合栈空间布局以及格式化字符串的原理,详细我们就能对格式化字符串有个更加清晰的认知。如果能够复现上述漏洞案例,那么恭喜你,已经完成了 pwn 格式化字符串漏洞这一旅程。原创 2023-06-01 21:45:19 · 4324 阅读 · 0 评论 -
Linux 二进制漏洞挖掘入门系列之(七)堆溢出: House of Spirit
0x10 基础知识关于 bin 的一些特点malloc 返回值,指向 chunk 的 user data每个 bin 采取 LIFO 策略,最近被释放的 chunk 优先被再次使用关于 fastbin 的一些特点案例int main(void){ void *chunk1,*chunk2,*chunk3; chunk1=malloc(0x30); chunk2=malloc(0x30); chunk3=malloc(0x30); //进行释放原创 2021-07-08 22:19:50 · 1622 阅读 · 1 评论 -
CSAW 2020 Quals: 栈溢出与 ROP
题目:roppity类型:pwn、栈溢出、rop、got 覆写原创 2020-09-14 22:32:29 · 515 阅读 · 0 评论 -
ASIS CTF 2020_full_protection: 格式化字符串与栈溢出的利用
本题主要利用了格式化字符串漏洞、栈溢出漏洞;其中有两点值得注意:第一、使用 gef 插件找到 canary,便于绕过栈保护;第二、strlen 函数对输入的长度进行了限制,其实是可以利用 \0 绕过。其余知识点都是 pwn 中常用的一些手段,比如改写 alarm,禁用反调试;ROP 构造等。原创 2020-09-10 22:28:01 · 1425 阅读 · 2 评论 -
Linux 二进制漏洞挖掘入门系列之(六)堆块中的 unlink
当我们在使用 free() 函数的时候,就是释放一块内存,这是宏观上的表现。深究起来,堆管理器(ptmalloc)会检查其物理相邻的堆块(chunk)是否空闲,如果空闲,则需要将其从所在的 bin (small bins)中释放出来,与当前 free 的 chunk 进行合并,合并之后,再插入到 unsorted bins 中。在这个过程中,**unlink 就是释放空闲堆块**。这个过程中,如果我们可以构造物理相邻的 chunk,那么就有可能造成**任意地址写**。原创 2020-08-03 21:34:06 · 964 阅读 · 0 评论 -
TSG CTF 2020:Beginner‘s Crypto 密码学中的数论基础——逆元
问题描述Suffix suffices, right?Hint for beginners: Can you see the two assert functions in the attached python script? These are describing the preconditions to be met. These statements read the secret content of the file named flag.txt and check if they ar原创 2020-07-22 20:05:17 · 1925 阅读 · 0 评论 -
Linux 环境下安装和使用 gmpy2
GMP(全称是GNU Multiple Precision Arithmetic Library,即GNU高精度算术运算库),是一个开源的**高精度运算库**,其中不但有普通的整数、实数、浮点数的高精度运算,还有随机数生成,尤其是提供了非常完备的数论中的运算接口,比如Miller-Rabin素数测试算法、大素数生成、欧几里德算法、求域中元素的逆、Jacobi符号、legendre符号等。**gmpy2 是 Python 的一个扩展库,是对 GMP 的封装**,它的前身是 gmpy。原创 2020-07-22 19:59:43 · 2703 阅读 · 0 评论 -
Ubuntu 16.04.6 安装 pwntools
为什么要在老版本的 Ubuntu 上使用 pwntools 呢?因为在新版系统上,使用的往往是版本较高的 libc.so,其堆的一些特性已经发生变化,在 CTF 比赛中,有可能无法复现某些漏洞的利用方法。而在 Ubuntu 中直接安装 pwntools,可能会出现各种问题。原创 2020-07-11 16:36:11 · 3431 阅读 · 2 评论 -
pwnable 题目解析:[Toddler‘s Bottle]-asm 使用 pwntools 生成基本的 shellcode
本题的目标就是让我们学会使用 pwntools 的 shellcraft 模块,生成相应架构的 shellcode。原创 2020-06-14 20:51:15 · 1778 阅读 · 0 评论 -
memcpy 引出的 chunk size 计算与内存对齐
在堆分配中,最为常见的 malloc(x) 是如何按照指定的内存对齐方式进行内存分配?而实际分配的空间大小与 x 又有什么样的关系?这是本次要讲的重点内容。同时,如何实现纳秒级的 CPU 周期计算?这就涉及到特定 CPU 平台的相关指令了。整个过程会给出一个使用 SSE 指令集加快 memcpy 拷贝速度的实际案例,结合实例,能够得到更好的理解。原创 2020-06-02 23:18:59 · 2308 阅读 · 0 评论 -
x86 架构中的内存攻击技术 ROP(二)
ROP 返回导向编程作为一种高级的内存攻击技术,可以让代码执行程序中已有二进制代码片段,将若干指令拼接在一起,形成 ROP 链。上一章讲述了其一般用法,本次继续讲述 ROP emporium 剩余的题目。原创 2020-04-12 21:46:16 · 976 阅读 · 0 评论 -
x86 架构中的内存攻击技术 ROP(一)
返回导向编程(Return-Oriented Programming,ROP)是一种高级的内存攻击技术,主要是为了绕过操作系统的防御手段 NX。该技术往往利用一些已有的漏洞,特别是缓冲区溢出,攻击者控制堆栈调用以劫持程序控制流并执行针对性的机器语言指令序列(gadgets),这些 gadget 组合,就能成功执行我们自己的逻辑。原创 2020-04-05 20:34:59 · 2103 阅读 · 0 评论 -
pwnable 题目解析:[Toddler's Bottle]-cmd2 绕过过滤字符
Daddy bought me a system command shell.but he put some filters to prevent me from playing with it without his permission...but I wanna play anytime I want!ssh cmd2@pwnable.kr -p2222 (pw:flag of cm...原创 2020-02-28 19:34:58 · 246 阅读 · 0 评论 -
pwnable 题目解析:[Toddler's Bottle]-lotto 逻辑漏洞
0x10 题目描述Mommy! I made a lotto program for my homework.do you want to play?ssh lotto@pwnable.kr -p2222 (pw:guest)本题是 pwnable 中的入门级试题,代码本身不含漏洞,而是逻辑问题。时至今日,很多传统的堆栈溢出漏洞不再那么容易找到,而那些设计问题或者代码中的逻辑问题,往往...原创 2020-02-27 19:28:10 · 381 阅读 · 0 评论 -
Linux 二进制漏洞挖掘入门系列之(五)UAF 漏洞分析与利用
UAF0x10 UAF(Use After Free) 漏洞原理这里,需要先介绍一下堆分配内存的原则。ptmalloc 是 glibc 的堆管理器,前身是 dlmalloc,Linux 中进程分配内存的两种方式:brk 和 mmap。当程序使用 malloc 申请内存的时候,如果小于 128K,使用 brk 方式,将数据段(.data)的最高地址指针_edata往高地址推;如果大于 128K...原创 2020-03-05 20:46:16 · 2385 阅读 · 0 评论 -
Linux 二进制漏洞挖掘入门系列之(四)格式化字符串漏洞
目录0x10 简介0x20 任意地址读0x30 任意地址写0x10 简介格式化字符串主要是指printf、fprintf、sprintf等print函数。相信大多数人学习C语言的时候,第一次就用到了该函数,输出"Hello,world!"printf("Hello %s", "world!");这里的 %s 就是一个格式化参数,期望赋予一个存储地址,并打印此地址中存放的字符串。常用的格式...原创 2020-01-12 08:34:49 · 719 阅读 · 0 评论 -
Linux 二进制漏洞挖掘入门系列之(三)整数溢出
0x10 基本概念C语言中,基本数据类型包括短整型short、整型int以及长整型long,每种数据类型还可以分为有符号和无符号数,我们尝试用的int a = 0 这样的表达式,默认就是定义一个有符号的整型数据a。对于无符号数,需要显示声明为 unsigned int a = 0。每种数据类型都会有其相应的范围,跟编译器有关。我们以64位gcc编译器为例,其大小范围如下所示类型字节...原创 2020-01-05 13:29:12 · 1074 阅读 · 1 评论 -
Linux 二进制漏洞挖掘入门系列之(二)堆溢出:off-by-one
0x1 pwntools原创 2019-12-22 18:15:00 · 1288 阅读 · 0 评论 -
Linux 二进制漏洞挖掘入门系列之(一)栈溢出
0x10 环境gdb-peda 插件,用来调试程序时,高亮不同寄存器,堆栈的地址和数据Windows 环境下的 IDA Pro,强大的交互式反汇编工具测试程序(即带有栈溢出漏洞的二进制可执行文件)虚拟机装有 Linux 发行版,例如 Ubuntu、Kali,用来运行测试程序测试程序下载地址1链接:https://pan.baidu.com/s/1U3ktIz-veMuktuts...原创 2019-08-17 18:26:40 · 2329 阅读 · 4 评论