![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
PWN
胖胖胖...
hercu1iz
i am a robot.
展开
-
hitcontraining_magicheap-unlink
heaparray全局指针=0x6020C0;原创 2023-06-17 16:48:04 · 207 阅读 · 0 评论 -
wustctf2020_closed
直接getshell了,但是关闭了输出和标准错误输出。思路:文件描述符重定向。原创 2023-06-14 20:00:28 · 87 阅读 · 0 评论 -
jarvisoj_level1-ret2libc
利用的是pwntool模板自动搜索泄露地址匹配的libc版本。思路:无binsh,无system,考虑ret2libc。原创 2023-06-13 22:39:58 · 111 阅读 · 0 评论 -
[ZJCTF 2019]Login
根据输出Nope,猜测程序判断密码是否正确输出,即存在if…,回溯发现a1是参数v8,v8是password_checker(v3);输入正确即调用函数指针,因此找找看有没有。找到了后门函数,我们还需要看看。原创 2023-06-10 14:18:52 · 77 阅读 · 1 评论 -
ciscn_2019_s_4-栈迁移
思路:由于无直接getshell的利用函数,溢出空间只有8字节(ebp+ret占用无法继续填充ROP了),所以需要栈迁移更大的空间来构造ROP。栈迁移位置:执行函数+0xdeadbeef(假ebp)+0xdeadbeef(假ret)+参数。此栈帧迁移到s[40]数组的位置,先通过第一次打印泄露s[40]的起始地址。栈迁移核心(通过ROPGadget寻找。ebp位置:栈迁移位置-4(32位)ret位置:leave_ret。题目类型猜测:栈溢出,栈迁移。作用:赋值执行函数调用。原创 2023-06-07 20:36:33 · 685 阅读 · 1 评论 -
Hitcon 2016 SleepyHolder-fastbin_dup_consolidate.c
参考/题目下载:1,三联保护:基本都开了功能:0、唤醒功能;1、创建-secret:Big secret;2、清除-secret;3、修改-secret;2,IDA分析功能主函数:清除功能-free:这四个指针都是BSS段的地址。问题点:未检查free的指针是否为空;free后指针未至置为0;导致:可以double free而要想成功double free,仅一个fastbin的chunk不行。原创 2023-06-04 12:05:50 · 228 阅读 · 0 评论 -
how2heap-fastbin_dup_consolidate.c
malloc(largebin_chunk)后再次free(fast_binA)的时候,判断是不是double free仅仅根据从同一个大小的 fastbin中拿出第一个 bin,比较地址是不是相同,即free的fast_bin链中的地址,而我们的 chunk 早到 unsorted bin 中去了。利用malloc(largebin_chunk)把free(fast_binA)移动到unsorted bin中;再次free(fast_binA),即double free了fast_binA;原创 2023-05-27 22:07:54 · 217 阅读 · 0 评论 -
mrctf2020_easyoverflow
分析:a1=v5,check(v5)=1的前提是for循环正常退出,即v5=n0t_r3@11y_f1@g。分析:gets(v4)溢出点,check(v5)=1则执行system();思路:通过v4溢出覆盖控制v5。原创 2023-05-25 23:24:25 · 133 阅读 · 0 评论 -
CTF 2015: Search Engine-fastbin_dup_into_stack
参考:[1]https://gsgx.me/posts/9447-ctf-2015-search-engine-writeup/[2]https://blog.csdn.net/weixin_38419913/article/details/103238963(掌握利用点,省略各种逆向细节)[3]https://bbs.kanxue.com/thread-267876.htm(逆向调试详解)[4]https://bbs.kanxue.com/thread-247219.htm(双解法)1,三连2原创 2023-05-24 21:04:15 · 775 阅读 · 0 评论 -
0ctf_2017_babyheap-fastbin_dup_into_stack
参考:题目下载参考[1]通过pause()构成一个断点。本人尝试的其它方式都无法在payload中下断成功。如有知道的师傅欢迎在评论区分享。原创 2023-05-19 00:18:55 · 432 阅读 · 0 评论 -
2021/10/18-如何调试pwn的exp或payload
《2021年10月18日》 【连续第18天总结】首先需要明白的是,你调试的exp.py是你输入的内容(即程序获取用户输入的信息)。通过exp.py脚本与程序交互执行你的输入,跟手动一次次输入并无两样,所以想通过下断点调试查看你希望看到的具体位置数据的方法是一样的。pwn调试小技巧pwntool工具中一些好用的模块context.log_level="debug" //输出显示调试信息,即用户输入与程序交互的信息context.terminal = ["tmux","splitw","-h"]原创 2021-10-19 01:14:32 · 1748 阅读 · 0 评论 -
wustctf2020_getshell_2
原因:由于system需要调用构造栈上布局参数,所以必须得通过call来实现ESP的变化匹配栈布局。system地址0x08048529。原创 2023-05-15 20:39:22 · 114 阅读 · 0 评论 -
how2heap-fastbin_dup_into_stack.c
伪造fake的chunk,区别于mem(指向写入数据地址指针),sizeof(d)直接写8也行(64位下)原创 2023-05-14 22:26:56 · 51 阅读 · 0 评论 -
how2heap-fastbin_dup.c
不同libc版本的fastbin_dup.c源码有点小区别:主要是有tcache的,需要先填充。double free的chunk不能是头结点,需要利用一个中间替换头结点;有tcache先malloc(8)*7,在free掉7个占满tcache;优先分配-用malloc(8)的大小即可free后占用。头结点不能同时free两次。原创 2023-05-13 23:56:47 · 319 阅读 · 0 评论 -
bbys_tu_2016
思路:ret2text。原创 2023-05-12 22:03:59 · 72 阅读 · 0 评论 -
xdctf2015_pwn200
依据:./bof的执行为见堆malloc特征,虽然未出现segment fault,可能是输入数量不够。思路:write泄露libc,ret2libc类型。3,IDA分析寻找利用点。思路:猜测是溢出题。原创 2023-05-11 19:48:09 · 176 阅读 · 0 评论 -
cmcc_simplerop
int80(11,“/bin/sh”,null,null),后面的四个参数分别是eax、ebx、ecx、edx。由于未开启PIE,我们利用simplerop中的read()函数写入bss段。2、ROPgadget找寄存器。偏移:0x14+4(错误)原创 2023-05-08 21:03:06 · 147 阅读 · 0 评论 -
how2heap-calc_tcache_idx.c
否则CHUNKSIZE = (x + SIZE_SZ + MALLOC_ALIGN_MASK) & ~MALLOC_ALIGN_MASK);判断是否是属于tcache index,当计算chunk的idx公式的结果大于63时,即不为tcache。x + SIZE_SZ + MALLOC_ALIGN_MASK < MINSIZE(0x20) 时,则CHUNKSIZE = MINSIZE (0x20);原创 2023-05-06 22:15:58 · 71 阅读 · 0 评论 -
how2heap-first_fit.c
malloc(size)中size小于已被free的chunk_size即可达成UAF。2、chunk足够大,fastbin也行;最终效果:修改c即修改了a。1,ubuntu16编译。1、空闲chunk;原创 2023-05-06 21:34:42 · 58 阅读 · 0 评论 -
picoctf_2018_buffer overflow 2
参数a1=0xDEADBEEF+参数a2=0xDEADC0DE。原创 2023-05-05 21:42:40 · 87 阅读 · 0 评论 -
jarvisoj_test_your_memory
需要正常结束程序(执行cat flag后hint中才有内容),所以调用system之后再调用main打印hint,即flag。没有/bin/sh,但是存在cat flag,同样可以用作system的参数。有system,无/bin/sh,但有cat flag。存在栈溢出,可以进行溢出调用system。原创 2023-05-02 14:57:36 · 147 阅读 · 0 评论 -
inndy_rop
无法利用libc,所以利用rop构造系统调用。生成一键getshell的rop片段组合。单纯溢出,无直接利用点。原创 2023-05-01 17:07:32 · 162 阅读 · 0 评论 -
hitcontraining_uaf
8字节填充(利用点之一)=print_note_conten函数地址+print_note_content内容地址;例如一次add_note(),notelist[0]=&print_note_content。关注点:0x804b158[3] = node[0]= 0x080485fb等会被改写。一次add_note()malloc了两次,地址被notelist[]数组保存;notelist[]属于bss段全局变量,存储chunk。基本信息:x86-32-el,堆题思路;保护:Partial RELRO。原创 2023-04-28 22:19:19 · 771 阅读 · 0 评论 -
picoctf_2018_buffer overflow 1
【代码】picoctf_2018_buffer overflow 1。原创 2023-04-26 22:22:40 · 94 阅读 · 0 评论 -
[ZJCTF 2019]EasyHeap-patchlibc-调试
后面只用关注伪造的fd地址0x6020C8即可,也即是heaparray_addr - 0x18。heaparray_addr = malloc(chunk0)这里获得的就是&chunk[0];1、伪造chunk[2]=[全局地址-3];chunk[3] = [全局地址-2]通过修改chunk[3]的值 ->控制 &chunk[0] ->4、给任意地址填入内容,chunk[0] = [任意内容]3、填入控制任意地址,chunk[3] = [任意地址]chunk[3] ->实现[任意地址]写。原创 2023-04-25 23:56:51 · 536 阅读 · 1 评论 -
[Black Watch 入群题]PWN-栈迁移
细节详情参考:https://blog.csdn.net/mcmuyanga/article/details/109260008。buf溢出栈空间只有0x20-0x18=8字节无法构造rop,所以需要利用栈迁移技术,迁移到bss上构造rop。bss栈布局:(左边是第一泄露Libc构造栈帧,右边是第二次重写获取shell的栈帧)改变思路:由于此程序没有可直接ret利用的函数同时溢出空间很小,所以需要。栈迁移操作:构造好栈中ebp新位置。思路:ret2shellcode。栈迁移关键指令:leave。原创 2023-04-20 22:47:33 · 392 阅读 · 0 评论 -
mrctf2020_shellcode
RELRO: Full RELRO完全没起作用,直接构造shellcode输入即可。原创 2023-04-19 19:35:03 · 237 阅读 · 1 评论 -
bjdctf_2020_router
思路:ping看看是否能绕过,命令拼接。原创 2023-04-15 13:21:18 · 79 阅读 · 0 评论 -
pwnable_orw-seccomp沙箱
但是,并不是所有的系统调用都被需要,而且不安全的代码滥用系统调用会对系统造成安全威胁。seccomp安全机制能使一个进程进入到一种“安全”运行模式,该模式下的进程只能调用4种系统调用(system call),即 read(), write(), exit() 和 sigreturn(),否则进程便会被终止。还能调用o(open)/r(read)/w(write)功能,题目orw的提示就是这样来的!输出flag文件内容,sys_write(1,file,0x30);手动生成读取文件shellcode。原创 2023-04-11 20:18:13 · 734 阅读 · 1 评论 -
bjdctf_2020_babyrop2-fmt-leak canary
这使得参数可以输出多次,使用多个格式说明符,以不同的顺序输出。本地libc下载:https://github.com/Yeuoly/buuctf_pwn/tree/master/bjdctf_2020_babyrop2。printf(“%p”, a) 用地址的格式打印变量 a 的值,printf(“%p”, &a) 打印变量 a 所在的地址。思路:aa相当于定位标识,format在格式化假参数6的位置,所以构造成。2,IDA静态分析,查看可以泄露canary的地方,否则只能爆破了。canary的位置:即。原创 2023-04-10 18:42:00 · 426 阅读 · 0 评论 -
jarvisoj_level4
思路:ret2libc,泄露_write来获取Libc基址。3,IDA静态查看是否有ret利用点。原创 2023-04-08 14:44:07 · 133 阅读 · 0 评论 -
wustctf2020_getshell
file+checksec+执行。思路:ret2sys。原创 2023-04-07 23:21:22 · 91 阅读 · 0 评论 -
jarvisoj_level3_x64
思路:ret2libc,程序中含有write函数,我们泄露plt_write地址用来计算libc_base。小端序,取后四个字节计算偏移。用ldd查看libc。原创 2023-04-05 19:03:42 · 187 阅读 · 0 评论 -
picoctf_2018_rop chain
3,发现flag.txt被打开,但是要满足条件2的三个&关系才能被打印出来,win1和win2都有对应函数赋值。win2函数的a1未-1163220307,需要控制。win1直接赋值1,不需要控制参数。到ret偏移= 0x18+0x4。原创 2023-04-04 22:11:12 · 120 阅读 · 0 评论 -
堆简介(heap)_上
堆堆的特性堆VS栈对比堆的数据结构最重要的堆表(空表 和 快表)空表快表堆管理策略堆的特性(1)堆是一种在程序运行时动态分配的内存。所谓动态是指所需内存的大小在程序设计时 不能预先决定,需要在程序运行时参考用户的反馈。(2)堆在使用时需要程序员用专用函数进行申请,如 C 语言中的 malloc 等函数、C++中的 new 函数等都是最常见的分配堆内存的函数。堆内存申请有可能成功,也有可能失败,这与申 请内存的大小、机器性能和当前运行环境有关。(3)一般用一个堆指针来使用申请得到的内存,读、写、释放都原创 2021-07-18 18:38:50 · 851 阅读 · 0 评论 -
Double Free(how2heap)
Double Free目的原理分析目的实现任意地址写的控制流程操作。原理分析例:fastbin_dup_into_stack.c实现栈上写。关键处已添加注释理解(三处)。#include <stdio.h>#include <stdlib.h>int main(){ fprintf(stderr, "This file extends on fastbin_dup.c by tricking malloc into\n" "returning原创 2021-06-23 19:48:27 · 175 阅读 · 0 评论 -
堆详述(Heap)_下
HeapHeap MemoryHeap Memorymalloc/* malloc(size_t n) Returns a pointer to a newly allocated chunk of at least n bytes, or null if no space is available. Additionally, on failure, errno is set to ENOMEM on ANSI C systems. If n is zero, mallo原创 2021-06-21 16:20:57 · 405 阅读 · 0 评论 -
first_fit&UAF(heap)
first_fit&UAFfirst_fit原理实例分析原理UAF实例first_fit原理堆管理器对free的chunk未完全回收,当再次调用malloc时,会分配先前已经有内容的chunk。大致流程如下图,但需要避免一些对管理器的检测机制(在一定限制条件下)实例分析原理下面看个demo调试,验证上面情况。#include<stdio.h>#include<stdlib.h>#include<string.h>int main(){原创 2021-06-21 00:50:52 · 245 阅读 · 1 评论 -
buuctf(pwn)
一日一PWN/REpwn1_sctf_2016实践是检验真理的唯一标准。pwn1_sctf_20161.找到漏洞的利用点往往才是困难点。(直接F5看看反汇编)发现两个可以函数跟进去看看2.这里对反汇编出来的Vuln理解了半天(本还想从汇编直接分析,不过进展收获不大,欢迎有兴趣的朋友一起交流),下面还是从伪代码分析。通过这几行能看出最后A变成了B。即把YOU 换成了I。因为上面是S的溢出点是3C,可fgets之读取了32并不会超过3C,但函数会把一个32个I换成32个YOU就达到了溢出点。3.原创 2021-04-04 22:35:26 · 2952 阅读 · 0 评论 -
全网最硬核PWN入门_图解分析
PWN序Linux环境下的基础知识从C源码到可执行文件的生成过程程序的编译与链接什么是可执行文件可执行文件分类PE/ELFELF文件格式区分节和段的存储区域加载ELF / 查看节和段区分布命令段(segment)与节(section)程序数据在内存中的组织分布大端序与小端序存储关键寄存器静态链接与动态链接常用汇编指令intel 和 AT&T汇编格式序PWN知识只有不断的重复,实践才能熟悉掌握。以下知识点以LINUX系统环境下为主要说明(Windows的会有点区别)。Linux环境下的基础知识原创 2021-04-03 09:54:50 · 6728 阅读 · 0 评论