PWN67
文章平均质量分 58
关于我个人学习pwn的过程记录,基本和我笔记一致,看过我文章的人都知道我一般写的很详细
余额抵扣
助学金抵扣
还需支付
¥99.90
¥299.90
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
My6n
我们会毁灭于我们所热爱的东西
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Polar靶场-Pwn-困难-8字节能干什么(leak ebp 与栈迁移)
栈迁移的核心:首先利用栈溢出将 ebp 覆盖为目标地址(也就是想迁移到哪里)然后把返回地址ret addr 覆盖为 leave;ret 指令的地址,这样我们可以执行两次 leave;ret。第一次,函数正常返回,执行 leave;ret,mov esp ebp 让两个指针处于同一位置(ebp)pop ebp 会将 ebp 弹到我们覆盖的那个地址,接着 ret,返回到下一个 gadget,再次执行 leave;ret,mov esp ebp ,将 esp 也迁移到了 ebp 的位置。原创 2025-09-12 10:18:35 · 912 阅读 · 0 评论 -
hackthebox-Pwn-r0bob1rd(FSB)
摘要:该漏洞利用程序存在数组越界访问,通过输入负数索引可以读取GOT表内容。首先通过输入-8泄露setvbuf函数地址计算libc基址,然后利用格式化字符串漏洞覆写__stack_chk_fail@GOT为one_gadget地址,最终触发canary检查失败执行shellcode获取flag。关键步骤包括:1)负数索引泄露函数地址;2)计算libc基址和gadget地址;3)构造格式化字符串payload;4)覆盖GOT表项触发漏洞。原创 2025-07-27 13:47:07 · 613 阅读 · 0 评论 -
hackthebox-Pwn-Execute(ret2shellcode)
摘要:文章分析了一个64位程序漏洞利用过程,程序未开启NX保护且存在黑名单过滤机制。通过分析发现原始shellcode中的syscall指令(0x3b)被拦截,采用XOR编码和替代指令(如push/pop/add)绕过过滤。最终构造出有效shellcode:使用0x2a2a2a2a异或编码"/bin/sh",通过push 0x3a/pop rax/add al,1构造syscall 59。成功获取flag:HTB{wr1t1ng_sh3llc0d3_1s_s0_c00l}。该案例展示了如原创 2025-07-27 13:37:01 · 321 阅读 · 0 评论 -
hackthebox-Pwn-Restaurant(ret2libc)
摘要:该文展示了针对64位程序的两种ROP攻击方法。第一种通过栈溢出泄露puts地址,计算libc基址后调用system("/bin/sh")获取shell。第二种使用ROP.call()简化构造过程,同样先泄露地址再执行系统调用。两种方法都成功获取flag:HTB{r3turn_2_th3_r3st4ur4nt!}。关键点包括:确定偏移量40字节、使用pop rdi;ret指令、解决栈对齐问题,以及通过两次输入分别实现地址泄露和最终攻击。原创 2025-07-27 13:30:42 · 274 阅读 · 0 评论 -
hackthebox-Pwn-You know 0xDiablos(ret2text)
摘要:通过分析64位程序发现存在gets栈溢出漏洞。利用flag函数,构造payload覆盖返回地址,其中包含负数参数(通过补码转换)。最终成功获取flag:HTB{0ur_Buff3r_1s_not_healthy}。关键点:确定偏移量188字节,使用p32处理负数参数,并正确接收返回数据。原创 2025-07-27 13:23:17 · 204 阅读 · 0 评论 -
CTFshow-PWN-栈溢出(pwn67-pwn68)nop sled 空操作雪橇-对抗栈帧地址随机化
摘要:本文分析了32位和64位程序的栈溢出利用方法。程序通过两次输入,第一次写入shellcode到seed变量,第二次输入目标地址到v5变量。关键点在于利用query_position函数返回的随机偏移地址推算seed地址,并通过nopsled技术解决地址随机化问题。文章详细讲解了栈帧偏移计算、nopsled原理、地址填充策略,并提供了32位和64位的完整exp代码。最终通过发送包含nop指令和shellcode的payload,成功获取shell权限。原创 2025-07-24 18:59:26 · 249 阅读 · 1 评论 -
CTFshow-PWN-栈溢出(pwn66)
本文分析了64位小端序程序的漏洞利用方法。程序存在NX保护但存在shellcode注入漏洞,通过构造以\x00开头的前缀绕过字符集检查(unk_400F20),在\x00后放置有效shellcode。作者使用pwntools工具生成合法shellcode(如\x00\xc6和\x00RZ),成功实现远程攻击获取flag(ctfshow{...})。该方法利用read()函数不因\x00终止的特性,结合特殊字节序列绕过安全检查,为类似漏洞提供了通用解决方案。原创 2025-07-15 13:59:19 · 384 阅读 · 0 评论 -
CTFshow-PWN-栈溢出(pwn65 详细版)
摘要:该64位程序存在PIE保护,包含RWX段,通过read读取用户输入作为shellcode执行。程序会对输入字符进行严格检查,仅允许大小写字母、数字及部分符号(ASCII 48-90)。利用alpha3工具将原始shellcode编码为符合要求的ASCII字符,通过rax寄存器执行。最终成功获取flag:ctfshow{944db499-0c4a-4894-a0a5-3f7aeccec7de}。关键点包括字符过滤机制分析和alpha3编码技术的应用。原创 2025-07-14 17:16:07 · 1582 阅读 · 0 评论 -
CTFshow-PWN-栈溢出(pwn62-pwn64)
本文分享了三个PWN题解法:1) pwn62利用24字节shellcode绕过保护;2) pwn63优化至23字节shellcode;3) pwn64在32位程序中直接执行写入的shellcode。每个解法都通过精心构造的payload成功获取flag,展示了不同场景下的漏洞利用技巧。文中包含完整的Python利用代码和获取的flag值。原创 2025-07-10 17:13:49 · 480 阅读 · 0 评论 -
CTFshow-PWN-栈溢出(pwn60-pwn61)
摘要:本文分析了两个CTF pwn题目的解题过程。第一个32位程序(pwn60)存在RWX段和栈溢出漏洞,通过将shellcode写入.bss段并跳转执行成功getshell。第二个64位程序(pwn61)虽然开启了PIE保护,但通过printf泄露栈地址,由于shellcode空间不足,改用将shellcode写入栈中不受影响的偏移位置(v5_addr+0x20)成功执行。两个题目分别通过远程攻击获得flag:ctfshow{9129ee6c-b09e-47b8-addd-9accb8932587}和ct原创 2025-07-08 15:49:47 · 1004 阅读 · 2 评论 -
CTFshow-PWN-栈溢出(pwn56-pwn59)
pwn56和pwn57分别是32位和64位系统调用execve("/bin/sh")的shellcode题,可直接交互获取shell。pwn58和pwn59为栈溢出题目,由于未开启NX保护,可以在栈上执行shellcode。解题方法是:通过gets函数输入shellcode,控制流跳转到栈上执行恶意代码。文章提供了32位(pwn58)和64位(pwn59)两种环境的Python利用脚本,使用pwntools生成shellcode并发送,最终获得flag。关键点在于识别可执行栈漏洞和编写对应的shellcod原创 2025-06-14 12:03:25 · 348 阅读 · 0 评论 -
CTFshow-PWN-栈溢出(pwn55)
这是一道32位栈溢出PWN题,利用gets函数漏洞进行ROP攻击。解题思路:通过溢出控制程序流程,先后调用flag_func1(设置flag1为1)和flag_func2(需满足flag1=1且参数为0xACACACAC),最后调用flag函数(需满足flag1&flag2=1且参数为0xBDBDBDBD)。EXP构造了包含三个函数地址和所需参数的payload,成功获取flag。最终flag为ctfshow{e4a15f8b-48a0-46ce-9783-7fa48bef281a}。原创 2025-06-14 10:08:36 · 318 阅读 · 0 评论 -
CTFshow-PWN-栈溢出(pwn54)
摘要:该32位程序存在信息泄露漏洞,攻击者可利用puts函数未正确处理字符串终止符的特性。当用户名输入填满缓冲区时,程序无法添加\x00终止符,导致puts函数继续读取相邻存储的密码内容。攻击分为两步:首先通过溢出泄露密码"CTFshow_PWN_r00t_p@ssw0rd_1s_h3r3",然后使用正确密码获取flag。最终flag为ctfshow{58368d5b-b049-406b-a415-e8a4929e6c91}。文中提供了两种利用方式:分步操作和自动化exp脚本。原创 2025-06-13 18:26:29 · 288 阅读 · 0 评论 -
CTFshow-PWN-栈溢出(pwn53)
摘要:该32位程序通过文件读取4字节固定canary值进行栈保护。由于canary值可控且固定,通过爆破获取其值为"36D!"。利用buf溢出漏洞,构造payload填充缓冲区、canary值和返回地址(指向自带flag函数0x8048696),最终成功获取flag:ctfshow{de9d5faf-21d6-4317-becd-3b214681c7a2}。整个过程展示了如何绕过非随机canary保护实现栈溢出攻击。原创 2025-06-11 16:26:33 · 553 阅读 · 0 评论 -
CTFshow-PWN-栈溢出(pwn52)
本文分析了一个32位CTF逆向题目,发现存在栈溢出漏洞。通过IDA反编译发现flag函数需要满足特定参数条件(a1=876且a2=877)才会输出flag。构造的payload利用栈溢出返回到flag函数,并传入正确参数值。最终获取到flag:ctfshow{ec5e1623-6d8d-4338-bcb9-43f23d6f65d8}。解题关键在于理解程序逻辑、参数传递和栈空间布局。原创 2025-06-11 12:21:34 · 315 阅读 · 0 评论 -
CTFshow-PWN-栈溢出(pwn51)
摘要:本文分析了一个32位程序的漏洞利用过程。程序存在字符串替换漏洞,输入"I"会被替换为更长的"IronMan",导致缓冲区溢出。通过计算,16个"I"替换后产生112字节溢出,恰好覆盖返回地址。利用IDA发现存在直接读取flag的函数sub_804902E(地址0x0804902E)。最终构造payload为16个"I"加上目标地址,成功获取flag:ctfshow{405c30d6-d372-4f50-bfcd-00d91原创 2025-06-10 17:49:18 · 365 阅读 · 0 评论 -
CTFshow-PWN-栈溢出(pwn50)
摘要:本文描述了一个64位程序的ROP攻击过程。通过gets函数溢出,利用ret2libc技术,先使用puts函数泄露真实地址,找到gadgets(pop rdi;ret和ret指令)。攻击分两步:首先构造payload泄露puts函数地址,计算libc基址;然后组合system和/bin_sh地址实施攻击,最终成功获取flag(ctfshow{11ba423c-006e-429f-9ebd-9fb219f3611f})。整个过程涉及动态链接库地址计算和ROP链构造技术。原创 2025-06-10 11:41:28 · 328 阅读 · 0 评论 -
CTFshow-PWN-栈溢出(pwn49)两种方法+动调分析
执行后,可以看到 0x80da000 往后部分为可读可写可执行权限。看似开了 canary 保护,实际没有,是 checksec 版本太老了,检测到 __stack_chk_fail 函数就算开了。看似和上一题一模一样,但是细心的小朋友应该注意到了,左边多出了很多函数,说明这个程序是静态链接的,静态链接就意味着没法去打 ret2libc了,还是无 system 无 /bin/sh,考虑打 ret2syscall。原创 2025-06-09 19:11:35 · 1578 阅读 · 0 评论 -
CTFshow-PWN-栈溢出(pwn48)
摘要:本文介绍了针对32位程序的ret2libc攻击方法,通过栈溢出利用puts函数泄露真实地址。攻击使用pwntools工具,构造两个payload:第一个通过puts泄露libc地址,第二个执行system("/bin/sh")获取shell。最终成功获取flag,展示了典型的ROP攻击流程。关键步骤包括计算偏移量、定位plt/got表地址、动态查找libc基地址等。原创 2025-06-09 15:57:49 · 292 阅读 · 0 评论 -
CTFshow-PWN-栈溢出(pwn47)
摘要:这是一篇关于32位小端序系统漏洞利用的技术分析文章。作者通过分析存在NX保护的二进制文件,利用gets函数的溢出漏洞和提供的/bin/sh偏移地址,构建了ret2libc攻击。文章详细介绍了如何通过泄露puts函数地址来定位libc基址,最终获取system函数地址完成攻击。攻击脚本使用pwntools工具包实现,重点解决了libc版本选择问题(最终选用libc6-i386_2.27-3ubuntu1_amd64),成功获取了flag。该技术适用于32位栈传参架构,展现了典型的ROP攻击方法。原创 2025-06-09 00:03:14 · 399 阅读 · 0 评论 -
CTFshow-PWN-栈溢出(pwn46)
摘要:本文介绍了CTF比赛中一个栈溢出漏洞的利用过程。通过puts函数泄露真实地址,使用ret2libc技术计算偏移,最终获取shell。利用脚本包含两个payload:第一个泄露puts地址并计算libc基址,第二个调用system("/bin/sh")。成功获取flag:ctfshow{d495bd39-34c0-49a5-bbfa-e0468786ccdb}。文中展示了完整的Python PWN工具利用代码。原创 2025-06-09 00:01:46 · 374 阅读 · 0 评论 -
PWN-中级ROP-[HNCTF 2022 WEEK2]ret2csu
本文分析了64位程序中利用__libc_csu_init函数进行栈溢出攻击的技术。通过控制寄存器传递参数,结合ret2csu技术泄露write函数地址,最终实现ret2libc攻击。文章详细讲解了gadgets选择、参数传递方法和攻击流程,并提供了完整的攻击脚本(exp)。该技术在不直接获取system函数和/bin/sh字符串的情况下,成功获取了shell权限,最终得到了flag。原创 2025-06-06 13:38:34 · 1519 阅读 · 0 评论 -
PWN-沙箱绕过-侧信道爆破攻击-[HNCTF 2022 WEEK3]ret2shellcode_level2
该分析针对一个存在缓冲区溢出漏洞的程序,沙箱限制了系统调用仅允许read、open和mmap。通过构造shellcode实现侧信道攻击,利用时间差异逐字节爆破flag内容。最终获取flag为nssctf{S1d3_ch@nn3l_bl@st1ng_t0_g3t_fl4g}。主要步骤包括:1)注入可执行shellcode;2)打开flag文件并读取内容;3)编写比较代码进行字符爆破。原创 2025-06-05 18:33:04 · 661 阅读 · 0 评论 -
[SWPUCTF 2024 秋季新生赛]不是哥们ret2text还阴啊?
通过分析栈结构发现缓冲区溢出漏洞,其中v1[56]数组可被覆盖。利用逐字节读取特性,先覆盖60字节数据至i变量地址,将其设为0x47。随后继续写入8字节至返回地址处(rbp+8),劫持为后门函数地址0x4011F1。最终成功获取flag:NSSCTF{7256ca63-a417-4a2d-9eb9-49ff78eb65d0}。原创 2025-05-26 19:32:55 · 438 阅读 · 0 评论 -
Partial Overwrite绕过PIE保护-[HNCTF 2022 WEEK2]ret2text
程序存在栈溢出漏洞,但因PIE保护导致地址随机化。利用PIE后12位固定特性,通过Partial Overwrite技术爆破后门函数地址(后四位0x11E5概率1/16)。编写exp循环发送payload(填充+后门地址),成功绕过PIE保护获取shell,得到flag:nssctf{W0w_You_byp@ss3d_PIE_You_are_gr3at!}。原创 2025-05-26 13:53:04 · 505 阅读 · 0 评论 -
栈迁移与onegadget利用[GHCTF 2025]ret2libc2
虽然 format 被初始化为 "hello world!"但是它就在 buf 下面,后面的 read 我们可以读入 0x60因此我们就可以覆盖 format,利用 printf 来泄露 libc 里的真实地址这里 rax 存的就是 buf,我们溢出后劫持程序到 0x401227,即指令:mov rdi, rax 后面再次执行 printf 函数,打印出真实地址,我们就可以计算 libc 基址了然后程序会继续执行 read 函数,我们又可以溢出,劫持到 system 从而 get原创 2025-05-25 00:19:26 · 1080 阅读 · 0 评论 -
[GHCTF 2025]ret2libc1(NSSCTF)
本文介绍了一个利用栈溢出和逻辑漏洞完成的ret2libc攻击案例。首先通过see_it函数的逻辑漏洞(未校验负数输入)获取足够资金进入shop函数,再利用其栈溢出漏洞构造ROP链:先泄露puts函数真实地址,计算libc基址后获取system和/bin/sh地址,最终构造system("/bin/sh")调用获取shell权限。攻击过程涉及溢出偏移计算、GOT/PLT表利用、ROP链构造等技巧,最终成功获取flag。文章提供了完整的漏洞利用代码和分析过程。原创 2025-05-23 23:21:29 · 693 阅读 · 0 评论 -
[SWPUCTF 2024 秋季新生赛]ret2libc也阴嘛?(NSSCTF)
通过IDA反编译发现,main函数中的gets存在栈溢出漏洞,偏移量为56。虽然程序自带后门函数,但缺少/bin/sh字符串。利用gets函数,我们可以将/bin/sh写入可写段(如.bss段),然后通过ROP链调用system函数执行/bin/sh。具体步骤如下:首先,将可写地址存入rdi寄存器,调用gets函数接受输入并写入/bin/sh;接着,再次将/bin/sh的地址存入rdi,调用system函数。通过构造payload并发送,成功获取shell。原创 2025-05-23 18:42:21 · 375 阅读 · 0 评论 -
[NewStarCTF 2023 公开赛道]ret2libc(BUUCTF)
本文描述了一个典型的ret2libc漏洞利用过程。首先,通过IDA反编译发现main函数中的read函数存在溢出漏洞,但程序中没有直接提供/bin/sh字符串和system函数。通过puts函数泄露libc基址,进而计算system函数和/bin/sh字符串的地址。利用gadget构造payload,首先通过puts泄露地址,然后再次发送payload调用system函数执行/bin/sh,最终成功获取flag。整个过程展示了如何在没有直接提供libc文件的情况下,通过泄露地址和计算偏移来实现漏洞利用。原创 2025-05-22 11:26:50 · 731 阅读 · 0 评论 -
[NewStarCTF 公开赛赛道]ret2libc(BUUCTF)
本文描述了一个64位程序的栈溢出漏洞利用过程。程序开启了NX保护,且没有直接提供/bin/sh字符串和system函数。通过分析,作者采用了ret2libc攻击思路,利用puts函数泄露其真实地址,进而计算libc基址,获取system函数和/bin/sh字符串的地址。首先,通过构造第一个payload,利用pop_rdi和ret指令将puts函数的真实地址泄露出来,并返回到main函数。接着,构造第二个payload,将/bin/sh字符串地址传入rdi寄存器,调用system函数,最终成功获取shell原创 2025-05-20 13:19:08 · 1240 阅读 · 0 评论 -
PWN基础-ROP技术-ret2syscall-64位程序栈溢出利用
后面传两个参数就可以了,分开写,一起写都可以的,这里就不做过多演示了。前置 ret2syscall 的基础我们就不做过多讲解了。execve 系统调用号是 59,也就是 0x3b。ida 看一下 main 函数,存在明显的栈溢出。看到有两个连一起的,当然我们也可以一个一个地传参。而 64 位系统调用最后是执行 syscall。32 位系统调用最后是执行 int x080。我们这里只用到前三个就可以了,以及 rax。这里看到的这个不对,因为后面没有 ret。正确的应该是 0x45BAC5。原创 2025-05-08 22:16:36 · 780 阅读 · 0 评论 -
ROP链-BUUCTF-cmcc_simplerop(ret2syscall)
当然这个地址我们也可以通过符号表来找,因为这里的程序是静态链接的 ELF 文件,所有不能通过 plt 或者 got 表,因为压根就不存在。这样后面才能正常的 ret2syscall 传参,从而系统调用 execv。但是这里还有一个问题,程序没有类似于 pop [ecx] 这样的指令。利用思路类似,建议先看完我上面的这篇博客,我这里不再过多叙述。但是 read 函数执行后,它的三个参数还在栈顶上。原创 2025-05-08 16:25:15 · 619 阅读 · 0 评论 -
ROP链-BUUCTF-inndy_rop(ret2syscall)
因为 pop dword ptr [ecx] 一次只能写入 4 个字节,所以我们分两次写入 /bin/sh。静态链接就意味着没法去打 ret2libc 了,因为 ret2libc 需要用到动态链接库里面的系统函数。后面就是常规的 ret2syscall 了,即系统调用 execve。既然有对 [ecx] 操作的,那么我们就继续找弹出 ecx 的指令。注意到左侧函数表有很多的函数,说明这个程序是静态链接的。找一个具有写权限的段,一般都是在 bss 段。找了一下,没有字符串 /bin/sh。原创 2025-05-08 14:11:53 · 657 阅读 · 0 评论 -
PWN基础-ROP技术-ret2syscall突破NX保护
我们 ret2syscall 实际还是希望调用 execve,和 ret2shellcode 类似,只是多了堆栈不可执行。后面我们会继续发送内容(/bin/sh)给 read 函数,读取到 bss_addr。我们继续调用 execve,其 32 位系统调用号是 11,即 0xb。没有找到,因此我们后面需要手动将 /bin/sh 写到 bss 段。我们先系统调用 read,其 32 位系统调用号是 3,即 0x3。接下来我们找 /bin/sh 字符串的地址。32 位程序,小端序,开启了 NX 保护。原创 2025-05-07 20:10:29 · 597 阅读 · 0 评论 -
[第十五章][15.3.2 shellcode注入攻击]ret2shellcode+[NewStarCTF 公开赛赛道]ret2shellcode
[第十五章][15.3.2 shellcode注入攻击]ret2shellcode+[NewStarCTF 公开赛赛程序会直接输出 v4 的地址,我们将 shellcode 写到 v4,然后溢出返回到 v4 的地址即可。这里直接给了 buf 7 的权限,即可读可写可执行,那么 shellcode 肯定写到 buf 里。我们利用的溢出点在 v4,是第二次的 read,所以第一次随便输,第二次输入测偏移。拿到返回的报错地址:0x6161616161616168。偏移是 104,再提取一下 v4 的地址就可以了。原创 2025-04-30 18:24:14 · 971 阅读 · 0 评论 -
PWN基础-利用格式化字符串漏洞泄露canary结合栈溢出getshell
canary 所在地址为 0xffffcffc,内容为 0xe8ac1700。然后运行,期间会经过第一个 read 函数,随便输入:RRR。再看一下 canary 距离我们输入字符串的距离,偏移是 8。重新运行 canary 值会变:现在是 0x37133900。继续往下走,可以发现打印出的值就是 canary 的值。p 只显示了地址,x 还显示了地址处的内容。我们在栈上面找一下 0xe8ac1700。但是测试发现,输出结果多了一个换行符。这部分后面需要填充为垃圾数据。距离栈顶偏移值为 15。原创 2025-04-27 12:20:38 · 747 阅读 · 4 评论
分享