08 2020 档案
摘要:#0x1 direct ##程序分析 add 函数 my_write("Index: "); result = my_scanf(); idx = result; if ( result <= 0xF ) { result = chunk_addr[result]; if ( !result ) {
阅读全文
摘要:#0x1 magic_number ##分析 __int64 __fastcall main(__int64 a1, char **a2, char **a3) { char buf; // [rsp+0h] [rbp-30h] int v5; // [rsp+2Ch] [rbp-4h] sub_5
阅读全文
摘要:#系统调用 linux 的系统调用,是 linux 内核一种特殊的运行机制,使得用户空间的应用程序可以请求,像写入文件和打开套接字等特权级下的任务。在 linux 内核中发起一个系统调用是特别昂贵的操作,因为处理器需要中断当前正在执行的任务,切换内核模式的上下文,在系统调用处理完毕后跳转至用户空间。
阅读全文
摘要:#0x1 babyjsc 压缩包中有 server.py ,其中首先执行 size = int(input()) 同时压缩包中可以找到 flag 在靶机上的路径,所以尝试 python 逃逸即可。(非预期解,浏览器 pwn 被打了快 300 解 2333) nc 连上后,输入 __import__(
阅读全文
摘要:#前言 原来只知道 house of orange 打 unsorted bin ,碰到题目发现还可以打 fast bin ,今天就具体研究一下源码(glibc-2.23)。 #分析 当所有的 bins 和 top chunk 都不满足分配要求,且 fast bin 合并后,再次循环中也找不到满足分
阅读全文
摘要:20 年比赛已经出现了好几道 Brainfuck 的 vm pwn 了,补一下 Brainfuck 的知识。 #简介 Brainfuck 是一种简单的、可以用最小的编译器来实现的、符合图灵完全思想的编程语言,它是由 Urban Müller 在 1993 年创造的,简称为 bf。Brainfuck
阅读全文
摘要:第一次遇见这种组合,留个记录. ciscn_final_4(反调试+在栈上伪造堆chunk) ciscn_2019_final_4
阅读全文
摘要:##exp from pwn_debug import * file_name = './ciscn_s_1' libc_name = './libc/libc-2.27.so' context.binary = file_name context.log_level = 'debug' #cont
阅读全文
摘要:#思路 记录一下思路,具体分析可以参考BUUCTF-PWN刷题记录-5(Tcache) 题目保护全开,所以只能靠写 hook 了。题目的漏洞是 strcpy 造成的 null by one 。 具体步骤: leak libc 分配三个 chunk (0,1,2),通过 null by one 覆盖
阅读全文
摘要:#思路 这题有意思,记录一下思路,具体分析可以参考de1ctf_2019_weapon (IO_FILE) 这题保护全开,又没有 show 函数,想了半天,看 wp 才想起还能爆破 IO_FILE 来泄露 libc 地址,之后便是常规 fastbin attack 拿 shell 了。 具体步骤:
阅读全文
摘要:#exp from pwn_debug import * context.binary = './ciscn_s_6' context.log_level = 'debug' pdbg = pwn_debug('./ciscn_s_6') pdbg.local('/home/ki/glibc-all
阅读全文
摘要:#exp from pwn import * #p = process('./bjdctf_2020_YDSneedGrirlfriend') p = remote('node3.buuoj.cn',27389) context.binary = './bjdctf_2020_YDSneedGrir
阅读全文
摘要:#exp from pwn import * context.log_level = 'debug' p = process('./wdb_2018_2nd_easyfmt') #p = process('./idaidg/linux_server') #p = remote('node3.buuo
阅读全文
摘要:第一次使用 alpha3 ,记录一下。 BUUCTF-PWN刷题记录-9
阅读全文
摘要:#思路 简单记录一下思路,具体分析可以参考BUUCTF-PWN刷题记录-7 文件保护全开,got 表不可写,那就想办法覆盖 __free_hook 或者 __malloc_hook 。 具体步骤: 分配 unsorted bin chunk ,free 进内存,在 fd 指针处踩出 main_are
阅读全文
摘要:#简介 之前有了解过这个技术,简单记录一下思路,具体分析可以参考wdb2018_guess stack smashing stack smashing 在程序加了 carry 保护后,如果我们的输入覆盖了 carry ,程序就会报错,而报错代码如下: void __attribute__ ((nor
阅读全文
摘要:#思路 简单记录一下思路,具体分析可以参考bcloud_bctf_2016(house of force) 题目没有开启 pie 跟 got 表不可写,那就可以通过修改 got 表来泄露 libc 跟 get shell 。 具体步骤: 题目存在 off by null 漏洞,可以利用它跟 strc
阅读全文
摘要:#思路 题目没有开启 pie 个 got 表不可写,所以我们可以通过修改 got 表来泄露 libc 跟 get shell 。 具体步骤: 首先分配两个 chunk 。(其实是 4 个,有两个 chunk 用于记录 size 跟 chunk_addr) 通过 edit 的 off by one 漏
阅读全文
摘要:calloc calloc 有以下特性 不会分配 tcache chunk 中的 chunk 。 tcache 有以下特性 在分配 fastbin 中的 chunk 时若还有其他相同大小的 fastbin_chunk 则把它们全部放入 tcache 中。 #思路 题目给了 backdoor 函数,只
阅读全文
摘要:#简介 简单的记录下思路,具体分析可以参考L.o.W 师傅的博客 ##思路 题目没有开启 pie 以及 got 表不可写,所以我们可以利用修改 got 表的方式进行 leak 跟 get shell。 chunk overlap 堆风水排布,主要利用 idx 为 16 的 chunk 的特殊性来造成
阅读全文
摘要:#思路 p1ay2win 师傅的博客已经写得很详细了,这里就不赘述了,简单记录一下思路。 本题有两种思路。 ##思路一:伪造 vtable ###整体思路 IO_FILE_PLUS 文件结构中有个 vtable 指针指向存储一些函数指针的 IO_jump_t 结构体,这些函数指针在 puts/pri
阅读全文
摘要:#Format String Vulnerability Principle ##格式化字符串函数介绍 格式化字符串函数可以接受可变数量的参数,并将第一个参数作为格式化字符串,根据其来解析之后的参数。通俗来说,格式化字符串函数就是将计算机内存中表示的数据转化为我们人类可读的字符串格式。几乎所有的C/
阅读全文
摘要:#栈介绍 在程序运行中用于保存函数调用信息和局部变量,程序的栈是从进程的虚拟地址空间的高地址向低地址增长的。 ##x86和x64传参 x86:函数参数在函数返回地址的上方。 x64:前六个参数一次保存在rdi、rsi、rdx、rcx、r8、r9寄存器中,如果还有更多的参数的话才会保存在栈上。 x64
阅读全文
摘要:#介绍 ret2_dl_runtime_resolve技术其实就是对重定位函数_dl_runtime_resolve(link_map_obj, reloc_index)运用rop技术 ##原理介绍 #include <unistd.h> #include <stdio.h> #include <s
阅读全文
摘要:#简介 ELF(Executable and Linkable Format)文件,是linux中的目标文件,主要以下三种类型 1.可重定位文件(Relocatable File):包含由编译器生成的代码以及数据。链接器会将它与其他目标文件链接起来从而创建可执行文件或者共享目标文件。在Linux系统
阅读全文
摘要:#介绍 在C中,整数有短整型 (short),整型 (int),长整型 (long)三种类型,如下所示: 类型 字节 范围 short int 2byte(word) 0 ~ 32767(0 ~ 0x7fff) -32768 ~ -1(0x8000 ~ 0xffff) unsigned short
阅读全文
摘要:##exp from pwn import * context.binary = './b0verfl0w' #io = process('./b0verfl0w') io = remote('node3.buuoj.cn','27459') jmp_esp = 0x8048504 shellcod
阅读全文
摘要:##exp from pwn import * #context.log_level ='debug' elf = ELF('./oneshot_tjctf_2016') #io = process('./oneshot_tjctf_2016') io = remote('node3.buuoj.c
阅读全文
摘要:##思路 利用unlink分配到存储chunk的ptr数组处,改chunk的地址为got表地址即可泄露libc,然后通过edit函数将atoi_got改为system函数的地址,让程序再次执行atoi,并输入参数"/bin/sh\x00",即执行system("/bin/sh")拿shell。 ##
阅读全文
摘要:##exp 有seccmop沙箱,只有几个函数可用,首先想到的思路是用orw打印flag。栈溢出长度有限写不下完整orw,但是题目栈和mmap分配的区域都可写可执行,我们只要通过jmp rsp控制程序流执行完整row即可 from pwn import * io = process('./idaid
阅读全文
摘要:##realloc的特点 他的基础功能是改变mem_address所指内存区域的大小为newsize长度。这里就有几种不同的情况 1.当size为0,这时就相当于free()函数,同时返回值为null 2.当指针为0,size大于0,相当于malloc函数 3.size小于等于原来的size,则在原
阅读全文
摘要:#FILE结构 FILE在linux系统的标准IO库中是用于描述文件结构的,称为文件流。FILE结构在程序执行fopen等函数时会进行创建,并分配在堆中。我们常定义一个指向FLLE结构的指针来接收这个返回值。 FILE结构定义在libc.h中,如下所示 struct _IO_FILE { int _
阅读全文
摘要:##exp 有格式化字符串漏洞,泄露got表地址,改sprintf为one_gadget,当函数再次调用sprintf即可拿shell。(使用格式化漏洞任意写的时候注意printf已经先输出了9个字符,要减去) from pwn import * #context.log_level = 'debu
阅读全文