pwn
文章平均质量分 82
F_D。
学习中。。
展开
-
unlink(1)
unlink是对双向堆链表进行操作的(largebin和smallbin),它对发生在堆合并之后unlink测试代码如下:#include <stdio.h>#include <stdlib.h>int main(){ void *a = malloc(0x10); void *chunk1 = malloc(0x80); void *b = malloc(0x10); void *chunk2 = malloc(0x80); void *chunk3 = .原创 2021-11-29 10:45:34 · 270 阅读 · 0 评论 -
ret2dlresolve(4)
ret2dlresolve(4)这次是64位下,开了Partial RELRO保护这次记录自己的解题过程先测试一下传入自己构造的reloc_arg看看程序能不能正常运行elf = ELF('./main64')def debug(): gdb.attach(p) pause()def csu(r12, r13, r14, r15, ret): rbx = 0 rbp = 1 payload = p64(0x400766) payload += p64(1) + p64(rbx原创 2021-11-15 15:30:05 · 2333 阅读 · 0 评论 -
解题记录(3)
解题记录(3)这道题是一个rop的题目,漏洞利用很简单,但这题有不一样的地方题目如下,没有Canary和PIE保护,因此能够想到的就是栈溢出了main函数如下从main函数中,能够直观的发存在一个栈溢出但是这里能够发现的是只能够溢出0x10字节,也就是只能控制程序的返回地址和基地址再来看看init函数里面的东西seccomp(全称securecomputing mode)是linuxkernel从2.6.23版本开始所支持的一种安全机制。通过seccomp,我们限制程序使用某原创 2021-11-12 16:35:37 · 253 阅读 · 0 评论 -
解题记录(2)
解题记录(2)题目不难,但也有思考的地方题目如下,保护全开main函数是调用game函数的,所以主要看一下game函数主要有下面两点首先是这一部分,可控的v4,并对数组v5进行写操作,因此这里存在栈溢出,并且能够绕过Canary第二部分如下,打印刚才写入的单元,但只打印6个字节分析函数可利用的就上面介绍的两点,其他的都是打印打印先看看第一个read的使用,一开始想到的是栈溢出,因为能够绕过canary直接修改函数返回值,但马上想到,由于程序保护全开,地址进行了随机化,所以就没办原创 2021-11-11 15:40:17 · 262 阅读 · 0 评论 -
解题记录(1)
解题记录(1)这到题用到了两个面,一是覆写got表,二是栈溢出查看保护机制程序开了Canary保护,因此可能无法进行栈溢出题目main函数如下main函数实现的功能是,输入1,执行sub_40086C函数,输入0,执行sub_4008BB函数sub_4007C7函数是用来输入的看看sub_40086C函数能够明显看到,这里存在地址写漏洞,可以对任意可写地址进行写操作因此能够想到的是覆写got表继续看sub_4008BB函数该函数是对main函数中的字符数组v5进原创 2021-11-09 19:11:03 · 98 阅读 · 0 评论 -
ret2dlresolve(3)
ret2dlresolve(3)64位norelro下的ret2dlresolve本来思路是与32的差不多,只不过是寄存器传参,但硬是出了一个意想不到的问题这里我用到了ret2csu来进行程序流的控制def csu(rbx, rbp, r12, r13, r14, r15, ret): payload = p64(loc_6pr) payload += p64(1) + p64(rbx) + p64(rbp) + p64(r12) + p64(r13) + p64(r14) +原创 2021-10-30 09:53:55 · 142 阅读 · 0 评论 -
ret2dlresolve(2)
ret2dlresolve(2)在ret2dlresolve(1)中,关闭了Partial RELRO保护,因此能够对.dynamic进行修改,从而改变dynamic中dynstr的地址,通过伪造一个dynstr来实现将函数write链接到system函数那么如果打开了Partial RELRO保护,将如何进行代码还是之前的代码,通过如下方式进行编译gcc -fno-stack-protector -m32 -z relro -z lazy -no-pie ../../main.c -o mai原创 2021-10-25 11:16:48 · 136 阅读 · 0 评论 -
ret2dlresolve学习(1)
ret2dlresolve学习(1)ret2dlresolve主要是利用函数_dl_runtime_resolve来进行这个函数是用来对动态链接函数进行重定位的它最简单的利用就是直接修改重定位表项构造一个存在栈溢出的例子#include <stdio.h>#include <unistd.h>#include <string.h>int vuln(){ char buf[80]; setbuf(stdin, buf); ret原创 2021-10-22 11:08:58 · 181 阅读 · 0 评论 -
BROP(黑盒pwn)
BROP(黑盒pwn)这题很有意思,通过黑盒的方法来进行溢出攻击,同时这里也用到了__libc_csu_init函数利用的新姿势题目是:brop参考链接:https://wiki.x10sec.org/pwn/linux/user-mode/stackoverflow/x86/medium-rop/#_8做这道题,不要ida,否则没有意义了思路对于黑盒,这道题的目的也很明确,就一个输入就结束了,明显的需要溢出那么第一步就是通过不断测试字符长度来判断溢出点这个实现还是很简单的def ov原创 2021-10-20 17:54:05 · 1049 阅读 · 0 评论 -
ret2csu
ret2csu我认为这道题本身是没有什么实际意义的,但是它教会了我一种新的利用思路这道题虽然明确指出利用函数__libc_csu_init来进行但这个函数本身不是做为攻击者使用而设计的,它是设计出来初始化libc,只是恰好我们能够利用因此,我认为这道题的主要目的是利用现有的汇编片段来实现攻击(与ret2por比较类似)__libc_csu_init在本题里,这个函数的汇编代码如下(可能与你看到的有点不同); void _libc_csu_init(void)public __libc_c原创 2021-10-19 20:28:40 · 310 阅读 · 0 评论 -
一道堆方向的pwn(堆溢出、堆拼接)
一道堆方向的pwn(堆溢出、堆拼接)这道题是17年0ctf的一道题,从里面还是能学到许多东西的babyheap这里我就直接记录我的做题过程在此之前,查看保护信息,发现保护全开,emmmm Arch: amd64-64-little RELRO: Full RELRO Stack: Canary found NX: NX enabled PIE: PIE enabled代码分析先来看看伪代码main函数就不做原创 2021-10-18 11:23:43 · 1920 阅读 · 0 评论 -
一道堆方向的pwn(double free & unsorted bins)
一道堆方向的pwn(double free & unsorted bins)做题环境什么是double free在某博客上看到了一道堆的题,博主说是入门的,嗯,那正好适合我,于是我花了一周终于出结果了。。。。。。来看看我都遇到了什么问题做题环境Ubuntu 20.04.3 LTS,这是我在微软商店下载的子系统,也是一切万恶之源的开始题目:Roc826什么是double free希望再次之前,你已经知道什么是堆了。double free就是对一个堆free两次在堆中,free后堆原创 2021-10-17 12:16:02 · 825 阅读 · 1 评论