hitcon_ctf_2019_one_punch 总结 仍然是tcache stash unlink的利用,这里总结两种思路: 任意地址分配时,先放5个,然后再凑2个出来 写堆地址的时候,放6个,伪造一下bk即可 利用思路 只有punch分支才能用malloc,其他分支都是calloc,因此要想办法使得punch的条件成立,即tcaceh bin[0x220]的个
bbctf_2020_write 总结 题目可以任意地址写任意值,但是没有退出,因此可以考虑劫持rtld_global结构体中的一些函数指针。 利用exit函数的两个hook,同时观察寄存器状态,构造system("/bin/sh")拿shell。 这里出现的rtld_global结构体,可以伪造,可以修改。比如在house of banana中就能利用
jarvisoj_itemboard 总结 基础的UAF的题,只记录下exp吧。 Exp from pwncli import * cli_script() p:tube = gift['io'] elf:ELF = gift['elf'] libc: ELF = gift['libc'] def new(name, length, desc): p.sendlineafter("choose:", "
nsctf_online_2019_pwn1 总结 根据本题,学习与收获有: 当off by one遇到calloc的时候,需要多次布局让2个指针,指向同一个0x70的chunk,然后一个先释放,然后利用unsorted bin的分割,使得fd变为main_arena + 88,再用另一个指针去修改fd劫持stdout结构体 分配chunk的时候,可以尽可能的小,对chun
64位elf,程序无canary,无relro 程序如下(已经重命名): __int64 __fastcall main(int a1, char **a2, char **a3) { int v3; // eax void *v4; // rax unsigned __int64 v5; // r14 int v6; // er13 size_t v7; // r12 int v8; // eax void *handle; // [rsp+8h] [rbp-44
【pwn】V&N2020 公开赛 simpleHeap 1、静态分析 首先libc版本是ubuntu16的2.23版本,可以去buu的资源处下载 然后checksec一下,保护全开 拖入IDA中分析 去除了符号表,通过menu函数分析出有add、edit、show、delete 1.add() add函数分析一遍,发现没什么漏洞,就是普普通通的输入一个需
这是一道64位的ret2libc和“铁人三项(第五赛区)_2018_rop来自BUUCTF”是一个类型的题目不过payload的构造有一点差别。因为在64位程序中函数的前六个参数保存在寄存器中第七个参数保存在栈中。而在32位程序中函数的参数保存在栈中。 这两个题正好一样的题型但是略有差别。
本文为 SEED Labs 2.0 - Return-to-libc Attack Lab 的实验记录。 实验原理 Task 1: Finding out the Addresses of libc Functions 关闭地址随机化 $ sudo sysctl -w kernel.randomize_va_space=0 修改链接 $ sudo ln -sf /bin/zsh /bin/sh 使用 gdb调试 $ touch badfile
author: moqizou 2020-羊城杯-signin 签到题目2.23的glibc add - 最多10个chunk然后会malloc(0x28)之后就是namesize结构体如下 0x10 chunk 头 0x8 1 inuse位置 0x8 buf->name_chunk 0x8 23字节的message 0x8 看上面可以溢出 然后会把该chunk指针 存入全局table view 通过
在linux下写一个可执行程序,然后进行反编译 查找main函数入口地址 找到start start函数准备好参数之后立即调用 libc_start_main libc_start_main做了些什么? 当可执行性程序中的所有段被加载到内存中后,PC指针就指向代码段起始地址,进而执行指令 查找一下这个地址 该函数
环境:linux,g++4.9,qt4.8.7 关闭应用程序时崩溃,下面是qtcreator应用程序输出窗口信息: *** Error in `/home/test/source/Ofd_Pro_Master/build-surSenReader_all-unknown-u8c03u8bd5/surSenReader': double free or corruption (!prev): 0x00000000013248a0 *** ======= Backtrace:
程序调用的是calloc,这个函数不会从tcache中取chunk。所以直接add free 重复填满tcache,利用uaf泄露heap和libc tcache per thread struct是来管理链表上堆块的数量的,大小一共是0x250,在heap开头。其中counts一共占0x40,每一个字节都代表一个大小范围正好对应64个entry,第一个字节
文章目录 前言0x1 :基本知识:0x2 :利用思路 :0x3 :实例讲解总结: 前言 菜鸡总结,如有不对,望各位大佬及时指点,以免误人子弟。 0x1 :基本知识: 想必大家都知道用栈迁移技术来解决的问题了吧———溢出的长度不够,只能覆盖到返回地址,至于后面需要构造的rop链的长度显然是不够的。 如
没有UAF,但是存在着off-by-one 所以先add(0x18)#chunk0和一个(0x10)#chunk1,add(0x90),add(0x10) 为什么是0x18?因为0x18会开辟一个共0x20的chunk,一开始我也以为是一个0x30的大小,但是 在chunk结构中 0x560df2c462b0 -0x560df2c462b8 这片区域中也会被chunk0使用。这样才能更接近chunk
之前学习了一下lager bins的构建,今天来学习一下堆重叠和堆扩展 先找漏洞点 这里没有对大小进行检查,可以输入任意字节,存在字节溢出 此题的难点在于如何泄露libc,由于add使用calloc的原因,当堆块从bins中拿出来时,会清空堆块 很明显我们要申请大的堆块进入unsorted bins来使main_a
原题找不到源码,这里就讲一下原理 条件:有栈溢出,最好是gets函数(栈溢出的空间比较大) 原理:当程序开启canary保护时若发生栈溢出则会调用canary_check_fail函数 void __attribute__ ((noreturn)) __stack_chk_fail (void){ __fortify_fail ("stack smashing detected");}void __attrib
pwn2_sctf_2016 1.ida分析 存在栈溢出漏洞,但是有一个限制输入字符数的保护。 可以看到参数a2从int类型变成了unsigned int类型,可以利用来绕过保护。(一开始一直卡在怎么绕过,麻了) 2.checksec 3.解决 from pwn import * from LibcSearcher import * context.l
ciscn_2019_en_2 1.ida分析 在encrypt函数中存在栈溢出漏洞,但是会把输入过滤。 2.checksec 3.解决 from pwn import * from LibcSearcher import * context.log_level='debug' s p=remote('node4.buuoj.cn',27829) elf=ELF('./ciscn_2019_en_2') ret=0x
nc pwn2.jarvisoj.com 9887 Hint1: 本题附件已更新,请大家重新下载以免影响解题。 ItemBoard.rar.6da1c739ca3041f37c37a9c0cf99afca 函数free过程中,set_null是空的,程序存在着UAF void __cdecl new_item() { int v0; // eax char buf[1024]; // [rsp+0h] [rbp-4
nc pwn2.jarvisoj.com 9885 Hint1: 本题附件已更新,请大家重新下载以免影响解题。 level6.rar.69c5609dc9bab6c458b9c70d23e9445d 之前的guestbook2的32位版本 exp如下: from pwn import * def list_note(): io.recvuntil('Your choice: ') io.sendline('1'
ciscn_2019_c_1 潜心修炼,从基础开始 这是一道没有system的ROP 解题流程 1.检查文件 $ file ciscn_2019_c_1 ciscn_2019_c_1: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, B
用给定的libc进行调试 首先根据题目给你的libc,查找相应版本的连接器 然后去glibc-all-in-one中下载相应的ld文件 glibc-all-in-one安装步骤 https://github.com/matrix1001/glibc-all-in-one 使用 查看各unbuntu版本的glibc ./update_list cat list 下载对应版本
定义和用法mt_rand() 使用 Mersenne Twister 算法返回随机整数。 语法mt_rand(min,max) 说明如果没有提供可选参数 min 和 max,mt_rand() 返回 0 到 RAND_MAX 之间的伪随机数。例如想要 5 到 15(包括 5 和 15)之间的随机数,用 mt_rand(5, 15)。 很多老的 libc 的随机数发生器具有一些
文章目录 一、要点二、预备知识三、题目四、解题过程1、检查保护机制2、运行查看效果3、IDA静态分析4、栈溢出的设计5、使用本地libc.so进行分析6、泄露puts的地址、定位system的地址7、编写exp 一、要点 return to libclibc中的地址泄露和定位 二、预备知识 预备知识请
目录wdb_2018_1st_babyheap总结checksec题目分析漏洞分析利用思路最终EXP引用与参考 wdb_2018_1st_babyheap 总结 根据本题,学习与收获有: 一般来说,在libc-2.23.so中,能用unlink的题目,基本可以用unsorted bin attack + IO_FILE劫持IO_jump_t结构执行system("/bin/sh")。不用能unlink