GHCTF-2025-pwn
GHCTF my_vmida分析main函数分析1.存在backdoor()函数,点开发现system(“/bin/sh\x00”).可以直接利用这个地址0x400877.2.funcptr会调用my_print,如果可以修改my_print 为backdoor。那就很完美了3.memory中保存着我们的指令,execute 会按序执行我们的指令,查看这个函数。 execute函数分析1.首先看,对op的处理,和对op的限制2.寻找漏洞。option == 0x90 时,可以对memory上的数据作修改3.基于此,如果reg[dest]设置为负数,那么可以完成对其他数据的修改4.从第三张图,查看option == 0x90 时的汇编,发现赋值指令是movzx(有符号低扩展为有符号高),所以可以在reg[]中写入负数,完成数组的向上越界 构造思路1.首先是,ip和sp。ip从0开始,也就从我们读入的第一个指令执行。sp设置为1,大于0就行2.接着读入op。我们需要对op作一点处理,便于控制每一个字节 123def...
ACTF-2025-pwn
ACTF-2025-pwn前言继续备战 only_read题如其名,只有一个read 函数,通过magic gadgets 来打。当然也有其他解法 ida分析思路magic gadgets首先要知道经典的gadgets 120x000000000040111c : add dword ptr [rbp - 0x3d], ebx ; nop ; ret0x0000000000110a46: pop rbx; pop rbp; pop r12; pop r13; pop r14; 这两条gadgets,可以凑一个任意半个地址写。上面那个是程序里的,下面的是libc中的。选择这条是因为它的低三字节和read接近,只需要改两个字节,就可以把read修改为这个。(ps:4,5,6都是说第二次read时的payload) 那么第一次read,就是修改rbp,然后返回read继续读。 第二次read,前面0x80字节开始为后续的利用作准备。rbp设置为,这次的读入的地址,同时,这地址要下一次能修改到read@got[] 第三次read,就修改掉read@got为0x110a46...
mips基础
mips基础汇编通用寄存器 REGISTER NAME USAGE $0 $zero 常量0(constant value 0) $1 $at 保留给汇编器(Reserved for assembler) $2-$3 $v0-$v1 函数调用返回值(values for results and expression evaluation) $4-$7 $a0-$a3 函数调用参数(arguments) $8-$15 $t0-$t7 暂时的(或随便用的) $16-$23 $s0-$s7 保存的(或如果用,需要SAVE/RESTORE的)(saved) $24-$25 $t8-$t9 暂时的(或随便用的) $28 $gp 全局指针(Global Pointer) $29 $sp 堆栈指针(Stack Pointer) $30 $fp 帧指针(Frame Pointer) $31 $ra 返回地址(return address) 指令mips 没有push 和 pop 指令。而且qemu...
mips练习
mips-题目练习前言上次学mips的时候就打算在buuctf上写两道题目看看效果,巩固一下。但是当天buuctf不知道怎么回事,g掉了。写不了题目了,直到现在,才有时间写这两道题目。 这两道题目应该也是非常经典了,网上有很多对这个的分析,题解。mips的前置知识呢写在了其他博客里面,在这里就啰嗦了。直接上题目。 axb_2019_mips这是一道ret2shellcode 的题目,非常的经典. 因为mips架构,不会开启NX 和 ASLR,所以我们可以往栈上,写shellcode,栈地址空间每次也都是一样的.所以非常好绕,不用泄露信息什么的. 但是,因为远程环境和本地环境的区别,远程和本地的地址空间不一定一样.所以远程还是不能直接这么打.继续看题 ida分析 非常简单的程序,没有什么利用点,看vuln() 发现溢出漏洞了,可以修改返回地址,但是要看汇编确定$ra的位置。 说真的,有的时候看汇编比看伪代码好。通过这个代码段,我们也可以了解到mips架构调用函数的一个流程。 进入之后,先把$sp往上移动0x40,然后分别把$ra和$fp放在$sp+0x3c和$sp+0x38...
格式化字符串研究
格式化字符串研究–一次性写的秘密相关定义__printf因为printf 函数,会调用__printf函数。我们直接来看该函数它在/stdio-common/printf.c 中 123456789101112131415161718int__printf (const char *format, ...){ va_list arg; int done; va_start (arg, format); done = __vfprintf_internal (stdout, format, arg, 0); va_end (arg); return done;}#undef _IO_printfldbl_strong_alias (__printf, printf);ldbl_strong_alias (__printf,...
CVE-2023-20073复现
CVE-2023-20073前言 开始学习iot的漏洞挖掘,第一次复现cve漏洞[原创]从零开始复现 CVE-2023-20073-智能设备-看雪-安全社区|安全招聘|kanxue.com 固件获取Software Download - Cisco Systems 从官网获取RV340 的固件 binwalk 解压binwalk -Me xxx.img 解压成功 但是和文章一样出现了warnning 配置起来有点麻烦,因为binwalk 现在很难搞,~~所以我决定直接手动修改这个链接 1ln -sf /tmp var 事实证明这样做是不行的,后续仿真时会失败。可能是因为还有其他的软连接被破坏了,所以只能去修改binwalk 的文件内容。因为我是用apt-get install 安装的binwalk ,所以我只能通过找到已经安装的binwalk 的文件位置来修改。 我这里是1008行,把这里修改为if 0 and not 问题解决 qume 与 主机连接先下载后面的...
DIR-815 栈溢出漏洞
DIR-815 栈溢出漏洞环境工具准备sasquatch12345678# 安装依赖库文件sudo apt-get install build-essential liblzma-dev liblzo2-dev zlib1g-dev # 下载源码git clone https://github.com/devttys0/sasquatch.git # 源码的编译(cd sasquatch && ./build.sh) 固件下载 DIR-815A1_FW101SSB03.bin File DIR-815_FIRMWARE_1.01.ZIP — Firmware for D-link DIR-815 [下载]D-LINK路由器固件–DIR-815_FIRMWARE_1.01-安全工具-看雪-安全社区|安全招聘|kanxue.com 解压 1binwalk -Me...
House of Rabbit
House of Rabbit前言哎呀,也不知道怎么说,看CTFshow上的poc总有一种无力感,啥玩意也没有。那个注释吧,也就是把how2heap的注释翻译了一下吧。真感觉他自己过个几年回来看自己的poc,估计也不知道是怎么利用吧。反正感觉写得莫名其妙,描述的语言逻辑不清楚。好在看雪上有一篇精华帖,写得很好,讲到了关键点。现在就是自己重新分析,改一下他的poc吧。 相关源码文件路径(malloc/malloc.c) malloc_consolidate12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697static void malloc_consolidate(mstate av){ mfastbinptr* fb; ...
House of Orange
House of Orange前言看了将近五天的博客,一步一步弄,总算是把步骤都搞清楚了。其实光一个House of Orang的点不用看怎么久。只是后续unsorted bin attack 和 FSOP 的利用,确实要细看。这道题也无愧是经典。也是渐渐有学习的感觉了。让我们来细细解析这个手法,感受一下pwn的美妙。 ps:本文中,没有相关源码的展示和分析,考虑后续去做一个对应的专门的分析板块。 house of orange 简介使用场景:当程序中没有free功能时,而我们又需要得到free chunk,就可以通过这个手段来获取free chunk使用条件:需要要堆溢出漏洞,可以修改top chunk的size利用原理:正常情况下(指绕过检查),如果申清的堆块大小大于top chunk大小,那么top chunk就会被放进unsorted bin中。然后重新映射或扩展一个新的top chunk。绕过检查:1.top chunk 的size 必须大于MINSIZE ,且小于我们申请的堆块大小。2.top chunk 的pre_inuse 必须为“1”。3.top chunk...
House of Einherjar
House of Einherjar前言 总算是开始系统的梳理一遍堆溢出中的一个利用手法,也是很久没有写笔记了。这一片也是第一篇不是写题目做的笔记,是为了先看完所有的一个利用方法,再更好得去做题吧。 从这篇开始,依次做完23个demo的学习文章 相关源码 也是有源码分析了文件路径(malloc/malloc.c) consolidate backward123456if (!prev_inuse(p)) { prevsize = p->prev_size; size += prevsize; p = chunk_at_offset(p, -((long) prevsize)); unlink(av, p, bck, fwd); } 这段代码是向后合并的操作,p是刚刚被释放的堆块。如果它的prev_inuse位是0...






