- 博客(13)
- 收藏
- 关注
原创 CTF[PWN]--栈迁移、格式化字符串漏洞、随机数撞库
开启NX,64位,动态编译,IDA分析:两次读入,第一次读入结束给了我们read函数的地址,第二次读入可以栈溢出,但是只能覆盖一个返回地址,自然而然的想到了栈迁移,因为第一次给了我们地址,就可以通过偏移去求出第二次read读入的起始地址由于本题给了提示,用的是ubuntu 16.04,因此libc库应为libc2.23(后来才知道,由于之前做题都是打本地,导致当时做这题的时候本地脚本写的很快,但在连接远程libc时却花了大功夫)
2024-03-11 21:34:08 989 3
原创 [CTF]PWN--堆--UAF漏洞
UAF即Use After Free简单的说,Use After Free 就是其字面所表达的意思,当一个内存块被释放之后再次被使用。但是其实这里有以下几种情况。。而我们一般所指的漏洞主要是后两种。此外,
2024-03-08 21:05:14 1339 1
原创 [CTF]PWN--新人入门第一关--Ret2libc
首先我们需要找到pop rdi|ret这个指令在程序中的位置(前面提到该指令为程序中自带的,只不过需要我们去寻找),然后让程序返回到pop rdi|ret这个指令上去执行它,通过ROPgadget --binary pwn --only 'pop|ret' 该指令来寻找pop |ret这个指令的地址,其中ROPgadget为一个插件,需要自己下载,binary意思为一个二进制文件,后面跟着的是文件名,only后面跟着的为要搜索的命令地址。
2024-02-29 19:31:35 1367
原创 [CTF]PWN--沙盒中的栈迁移构造read利用
我们需要在调试中寻找read函数的返回地址,将其作为读入的位置,因为我们后面要在这个构造的read函数中读入orw,我们将orw写入到read函数返回地址上,这样读入之后就可以直接执行orw获取权限,为了使程序运行成功我们可以先随便写一个bss地址作为读入位置。还记得我们一开始将读入位置迁到bss段上了吗,连接远程时程序运行时的生成栈地址可能会改变,但是,内存(bss)是不会变的,因此本题我们可以直接通过调试得到返回地址,而这个返回地址必然是bss段地址,也就是说在连接远程的时候是不会改变的。
2024-02-26 20:30:56 1180 1
原创 [CTF]PWN--非栈上格式化字符串漏洞
一般来说,栈上的格式化字符串漏洞利用步骤是先泄露地址,包括ELF程序地址和libc地址;然后将需要改写的GOT表地址直接传到栈上,同时利用%c%n的方法改写入地址,最后就是劫持流程。但是对于BSS段或是堆上格式化字符串,也就是非栈上格式化字符串漏洞,无法直接将想要改写的地址指针放置在栈上,也就没办法实现任意地址写。本文主要为大家介绍BSS段上的格式化字符串漏洞的解法。
2024-02-26 19:00:35 2463 2
原创 [CTF]PWN--手搓格式化字符串漏洞
而是,原来我们修改了的其实是0x7f1与0x7f2里的东西,那后面我们就需要修改0x7f3与0x7f4里的东西,因此我们+2的意思就是将原来的0x7f1+2,修改成0x7f3,这样,我们在修改的时候改的就是0x7f3与0x7f4里的东西了(思路是这样的,一个栈地址一共八个字节,我们需要将要修改的地址和被修改的地址每两个字节对应的修改,直到最后将所以字节都修改成我们需要的地址。修改最高二位的时候也是一样的,由于栈里面的地址与libc里面的地址一般都只占6个字节,因此,我们只需要进行三次修改即可。
2024-02-19 22:58:20 1260 3
原创 Ret2dlresolve、Srop
具体原理介绍请看我这边就直接上题目了开启NX,32位,动态编译,IDA分析:就一个read函数,可以栈溢出,没有后门,大家可能会想到libc,syscall等等但是本题没有打印函数不能用libc,在汇编代码那块也找不到syscall只能用ret2dlresolve去伪造read函数的got表,将其伪造成system这边只给大家讲利用工具如何去伪造,直接给大家脚本,想学如何手搓的朋友可以去上面看看CTF WiKi遇到这种题其实不难,有个脚本就能秒,到时候大家做题只要把我的脚本稍微改下就可以。
2024-02-05 22:51:49 866 1
原创 格式化字符串漏洞
开启NX、Canary保护,64位,动态编译,IDA分析:很明显存在格式化字符串漏洞,同时左边还有__stack_chk_fail函数随机生成canary被改变后会退出程序,那它如何退出的呢,就是通过执行__stack_chk_fail函数退出程序既然题目给了我们__stack_chk_fail函数的地址,又存在格式化字符串漏洞,那我们就可以通过fmtstr_payload(偏移,{被修改的got表:改之后的地址})
2024-02-04 21:11:50 900 2
原创 沙盒ORW
沙盒机制也就是我们常说的沙箱,英文名sandbox,是计算机领域的虚拟技术,常见于安全方向。一般说来,我们会将不受信任的软件放在沙箱中运行,一旦该软件有恶意行为,则禁止该程序的进一步运行,不会对真实系统造成任何危害。在ctf比赛中,pwn题中的沙盒一般都会限制execve的系统调用,这样一来one_gadget和system调用都不好使,只能采取ORW,即open/read/write的组合方式来读取flag。
2024-02-03 23:11:56 2057
原创 Canary、Pie保护
Canary 的意思是金丝雀,来源于英国矿井工人用来探查井下气体是否有毒的金丝雀笼子。工人们每次下井都会带上一只金丝雀。如果井下的气体有毒,金丝雀由于对毒性敏感就会停止鸣叫甚至死亡,从而使工人们得到预警。canary是一种用来防护栈溢出的保护机制。其原理是在一个函数的入口处,先从fs/gs寄存器中获取一个值,一般存到EBP - 0x4(32位)或RBP - 0x8(64位)的位置。
2024-01-27 21:55:15 932
原创 静态编译:Mprotect、自动化rop链;Ret2csu
开启NX,64位,IDA分析:看左半边不难看出这是一道静态编译题(简单解释,左边函数很多,静态编译占内存一般比动态多的多右半边可以看到,只有一个gets函数可以利用(存在栈溢出由于这题是静态编译题,因此我们可以有多种写法,这里我们分别使用Mprotect与自动化rop链解题。
2024-01-24 21:21:16 1214 1
原创 栈迁移...
将读入位置修改到bss段,然后写入rop链,再通过栈迁移来执行rop链,因此我们就可以通过两次返回read函数,两次栈迁移,通过libc的做法来获取权限,第一次返回read函数泄露libc基址,第二次返回获取权限。就简简单单一个read函数,读入的字节只够填写一个返回地址,大概可以猜到这题是要用栈迁移做,但是又跟常规的栈迁移不同,这题不仅只有一次读入,还不能泄露地址,那要如何做呢?接上文,我们可以发现,read函数的第一个参数与第三个参数是固定的,而第二个参数由rbp与buf决定。这边有个小知识点,如果。
2024-01-22 05:30:00 1052 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人