![](https://img-blog.csdnimg.cn/direct/56b655ecb43e4bf6a417e94162a81d6d.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
pwn
文章平均质量分 92
小小PWN手
波克比QWQ
CTF菜鸡新手
展开
-
BUUCTF[堆][of_by_one]
首先需要拿到一个堆地址,后续才能在伪造book结构体的时候有地址使用:先写入32字节的author name,将name的32个空间占满(由于此时booklist中还未写入book结构体地址,所以后续写入的地址会覆盖最后第33个字节的b"\x00",从而在输出的时候泄漏堆地址),再申请一个book,但是book的大小如何控制呢?首先我们申请的长度要恰好到下一个chunk的size字段,所以必须将下一个chunk的prev_size字段沾满,不能留空隙,所以申请的大小必须为。原创 2024-07-15 12:02:20 · 321 阅读 · 0 评论 -
NSSCTF[堆][Unlink]
题目地址:[原创 2024-07-13 21:42:38 · 988 阅读 · 0 评论 -
NSSCTF[堆][tcache]
题目地址:[原创 2024-07-13 13:05:21 · 1204 阅读 · 0 评论 -
NSSCTF[堆][tcache]
题目地址:[参照:https://nuoye-blog.github.io/2021/05/16/466a7375/原创 2024-07-12 19:04:38 · 697 阅读 · 0 评论 -
BUUCTF[堆][unsortbin]
利用double free的方式泄漏出unsortbin中的main_arena地址。释放一个不属于fast bin 的 chunk,并且该 chunk 不和 top chunk 紧邻时,该 chunk 会被首先放到 unsorted bin 中。当有一个(或几个)(不属于fastbin)时,small/large chunk 的 fd 和 bk 指向中的地址。原创 2024-07-11 17:15:44 · 840 阅读 · 0 评论 -
pwn入门--格式化字符串
gdb中格式化字符串在栈上的位置的,就是偏移。原创 2024-07-11 17:12:49 · 393 阅读 · 0 评论 -
BUUCTF[堆][of_by_one]
此时再申请一个大小为0x30的chunk2,就会将fastbins[0x40]分配给我们(但是实际的大小只有0x18,但是写入的大小就是0x30了),可以导致chunk之间的覆盖(变向堆溢出)。但是如何填充数据泄漏libc地址呢?首先我们申请的长度要恰好到下一个chunk的size字段,所以必须将下一个chunk的prev_size字段沾满,不能留空隙,所以申请的大小必须为。最后free(0)即可拿到flag。这种情况才能占满(将。原创 2024-07-09 16:29:33 · 392 阅读 · 0 评论 -
堆溢出ret2libc
利用思路,先申请2个heap,用heap0的edit函数来覆盖heap1的content地址使其指向存放put函数地址的堆空间,再调用heap1的show函数,即可泄漏put函数的真实地址。成功覆盖,put函数在调用时会直接用支付穿输出0x000055df3bd91080处的内容,遇到b’\x00‘才停止。利用栈溢出覆盖put参数泄漏libc基地址,再第二次用system的地址覆盖put函数,实现ret2libc。原创 2024-07-08 17:37:27 · 298 阅读 · 0 评论 -
BUUCTF[PWN][fastbin attack]
在0x00000000006020E0-0x33处刚好有一个空间中存储着0x7f,可以将地址0x6020ad作为伪造堆,那么0x7f就是size字段的值了,只要我们申请的空间为。先申请三个堆,大小为0x68(实际分配的大小为0x7f),再释放掉heap2,利用heap2进行fastbin attack,实行任意地址申请堆(刚才找到的伪造堆)后面直接编辑heap0,就能将free的got表上的值,修改为system的plt。之所以不直接覆盖为system的got表是因为函数调用的过程,如果之前。原创 2024-07-07 18:27:26 · 1200 阅读 · 0 评论 -
Canary,三种优雅姿势绕过
如果利用栈溢出将最低位的b’\x00’覆盖,就可以利用答应函数将canary一致输出,最后再在最低位拼接上。逐次覆盖掉canary的4个字节(一位无法绕过低位字节堆高位进行爆破,所以必须从低到高),且要求canary不能变化,绕过重开程序canary变化,就不适用爆破了。在进行栈溢出时,如果程序开启了canary保护,首先就需要泄漏这个随机值,否则其被覆盖掉后,程序在退出时再检查该值,会引发错误。注意:canary爆破时,利用栈溢出,溢出到canary位置,从。首先确定要覆盖的位置,由于是。原创 2024-07-06 18:55:09 · 604 阅读 · 1 评论 -
hitcontraining_uaf
再看一下del_note函数:先是检查了一下index的范围,再检检查一下当前的notelist列表上是否为空,即检查add时第一步申请的空间的指针,后续释放了两次的空间,但是有个问题:该notelist表还没有清空,指向这个地址的指针还存在于notelist中。,覆盖掉了第一次申请的堆(0x20大小)中存放的print_note_content函数的地址,如果此时直接调用print_note,就会执行我们输入的值所指向的地址出的代码,所以直接用。此时仔细观察,就会的发现我们第三次输入的值。原创 2024-07-05 21:25:59 · 708 阅读 · 0 评论 -
[pwn]静态编译
程序在ida打开后,左侧的函数栏目没有红色(系统调用的函数),而只有一些静态函数,通常这类文件的大小会必普通的pwn题程序要大得多。这种静态编译的题没有调用库函数,也就没有使用libc,自然我们也没法泄漏libc的基地址,可以直接使用ROPgadget来搜索,利用程序中的一些指令片段,来拼凑出的效果。原创 2024-07-05 19:42:31 · 630 阅读 · 0 评论 -
strcpy,srtcmp,strlen函数漏洞利用
ida查看,题目给了一个栈溢出漏洞,虽然给了0x200的长度,但是后面用户strlen检查了输入的长度不能超过0x50,溢出长度明显不够。后买你getflag函数中存在一个strcpy函数漏洞,可能可以进行栈溢出,动态调试观察其栈上的变化,可见只要。但是可以利用strlen函数判断字符串时以。原创 2024-07-05 19:39:53 · 776 阅读 · 0 评论 -
栈复用(覆盖栈上的有用数据)
观察程序给的两个输入点:一个读name、一个读password,读name不用看(输入那么的前面根本没用函数能利用),仔细看一下读password:程序给的输入长度是0x4f,但是要想覆盖到返回值需要0x70长度,很明显不够,s的长度只有8,所以是存在溢出的,能覆盖掉栈上的其他数据,所以观察一下后续程序中是否有对 **该函数栈的重利用 **。是password_checker函数直接赋值的,所以password_checker函数利用不了,但是她的栈会在后面调用 *函数赋给v7的,并且最后传递出来的是。原创 2024-07-05 16:35:24 · 938 阅读 · 0 评论 -
PWN-栈迁移
有限,导致构造的ROP链不能完全写入到栈中,此时需要进行栈迁移,将栈迁移到能接受更多数据的位置(改变相继sp、bp寄存器的值),位函数调用、传参构造一个新的栈空间。栈迁移的位置因考虑在read的读取范围之内,首先应该考虑栈迁移的目标位置target,直接选择输入s的首地址即可,在。可见bp寄存器指向的栈空间已经被覆盖(数据随便输入,仅实验用),后面的函数返回地址也被修改,此时执行最后的。(覆盖掉bp寄存器指向的栈空间上的值)来更新sp寄存器。(调用者的sp寄存器值),bp所指向的栈空间上的值为。原创 2024-06-01 22:18:51 · 809 阅读 · 0 评论 -
栈迁移([HDCTF 2023]KEEP ON)
确定栈迁移的目标位置:输入数组s的首地址,首先利用而格式化字符串泄漏bp寄存器指向的栈上的数据(是函数调用者即vuln的栈低指针),根据该值可以确定与s首地址的偏移x,从而用。,s的首地址(0x7fffffffddb0)与泄漏的值(0x7fffffffde10)之间的距离相差。,可以看到bp寄存器指向的位置在输出字符串中的。原创 2024-06-02 11:25:51 · 569 阅读 · 0 评论 -
泄漏libc基地址
这里可以利用vulnerable_function函数进行栈溢出,利用write函数泄漏write函数的地址,从而拿到libc,使用write函数泄漏write函数地址时(puts函数同理),即使程序在前面。利用write函数的got表和plt表,溢出得到write函数的地址,在计算得到libc_base基地址。先看汇编下调用write函数时参数的传递:(以32位为例),泄漏 fun_name的got地址和。原创 2024-06-01 22:21:19 · 984 阅读 · 0 评论 -
BUUCTF[PWN]
system函数需要一个参数,直接使用rdi进行传参,但是栈溢出的main函数只有一个ret,所以需要找到程序中的。组合(即先执行pop rdi 再执行ret),这使得可以继续改变rip的值,跳转到后门函数system的地址处。查找flag文件的路径,再显示:[外链图片转存中…后需要将栈中偏移为10的数值(0804C044)所指向的地址处的值进行修改。脚本如下,最后输入的passwd会进入atoi函数,这函数将。拿到shell后没有看到flag,使用。拿到shell后没有看到flag,使用。原创 2024-05-11 21:20:25 · 1172 阅读 · 0 评论 -
buuctf[pwn]
而产生的栈缺失问题(如果不补充,则咱进入system函数内部时,变量**/bin/sh。找到v4的栈:垃圾数据填充为32+8。打开附件:又是gets函数,栈溢出。调用system函数,此时需要。system原来使用的变量。原创 2024-05-06 23:23:08 · 961 阅读 · 0 评论 -
PWN入门--栈溢出
将原main函数的ebp值栈低入栈保存,再为ebp换上新的esp寄存器值,作为访问fun函数局部变量等的基址。最后退出fun函数,需要将原ebp的值恢复,关闭并销毁fun函数的栈帧:通常使用与生成栈帧相反的指令。最后,在main函数中删除栈(在调用者还是在被调用者中清除栈,取决于函数的调用规定)。这次从栈的角度详细,计算垃圾数据填充大小时多少,system函数的参数如何传递的问题。后面看到盗用fun函数的过程,使用栈完成传参,此时还没有进入到fun函数,所以其。,在栈溢出的漏洞中,我们经常要用我们。原创 2024-05-07 18:09:02 · 972 阅读 · 0 评论