自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(67)
  • 收藏
  • 关注

原创 android开发

来显示指定的fragment页面,在Fragment_MainActivity2中定义OnClickListener接口中的。

2024-11-15 10:10:14 730

原创 ld_addr + UAF漏洞修复

这条路径只需要修改_rtld_local结构体的值,并且让 _IO_2_1_stderr的vtable check不通过即可,libc上的 _IO_list_all或者stderr等都不用覆盖,覆盖的值都只存在于ld上( _IO_2_1_stderr 的vtable字段可以用tcache取出chunk时next指针自动清0完成,不需要向上写值)如果vtable check不通过,会走_dl_addr,在 _dl_addr中会调用到 在exit_hook中利用的那个函数指针,此时的。

2024-09-10 11:23:31 1504 2

原创 house of emma

house of cat 实际上任然是利用 IO_FILE 的指针,其中一个思想就是连续伪造两个IO_FILE :第一个覆盖fs:0x30,第二个 来覆盖 函数指针。如果在其他利用时,需要绕过加密,就可以采用这种方法。(走house of cat其实是一种更好的选着,只需要伪造一个IO_FILE即可)

2024-09-07 16:32:42 1416

原创 exit_hook和setcontext

exit_hook在pwn题中的应用 - 不会修电脑 - 博客园 (cnblogs.com)exit_hook :是程序在执行exit函数时,会去该位置拿一个函数指针,进而执行的一段程序,如果能修改掉这个函数指针就能挟持程序的控制流,执行想要的gadget。exit(0);return 0;这里用libc-2.32.so演示一下exit的调用过程:先进__run_exit_handlers函数:这里会调用到**_dl_fini函数** ,进入:_dl_fini函数开头的for循环中就调用到了。

2024-09-01 17:07:45 1618

原创 house of pig

House of Pig 是一个将 T和FSOP结合的攻击,同时使用到了进行辅助。主要适用于 libc 2.31 及以后的新版本 libc 并且程序中仅有 calloc来申请chunk时。(因为 calloc 函数会跳过 tcache,无法完成常规的 tcache attack 等利用,同时,因为程序中没有 malloc 函数也无法在正常的之后,将放入 tcache 中的 fake chunk 给申请出来 )。house of pig 的核心其实是利用large bin attach。

2024-08-29 12:31:16 1137

原创 Large Bin Attack 源码调试

how2heap 中也说了,large bin attack 是未来更深入的利用(在IO中利用其能写入堆地址)。现在我们来总结一下利用的条件:可以修改一个 large bin chunk 的 data从 unsorted bin 中来的 large bin chunk 要紧跟在被构造过的 chunk 的后面通过 large bin attack 可以辅助 Tcache Stash Unlink + 攻击(任意地址写入一个堆地址。

2024-08-26 17:52:18 1206

原创 glibc 2.24 下 IO_FILE 的利用

在 2.24 版本的 glibc 中,全新加入了针对 IO_FILE_plus 的vtable 劫持的检测措施,glibc 会在调用虚函数之前首先检查 vtable 地址的合法性。首先会验证 vtable 是否位于_IO_vtable 段中,如果满足条件就正常执行,否则会调用_IO_vtable_check 做进一步检查。otherwise,if (__glibc_unlikely (offset >= section_length)) // 超出范围#endifreturn;

2024-08-22 16:38:30 1200

原创 House of Roman / malloc_printerr间接调用malloc函数执行malloc_hook

House of Roman 这个技巧说简单点其实就是和结合的一个小 trick。该技术用于,利用 12-bit 的爆破来达到获取 shell 的目的。且仅仅只需要一个 UAF 漏洞以及能创建任意大小的 chunk 的情况下就能完成利用。应用场景:没show函数,且got表无法修改。

2024-08-19 18:16:49 788

原创 FSOP,glibc-2.23攻击IO_list_all

FSOP 是 File Stream Oriented Programming 的缩写,根据前面对 FILE 的介绍得知进程内所有的 _ IO_FILE 结构会使用 _ chain 域相互连接形成一个链表,这个链表的头部由_IO_list_all维护。FSOP 的核心思想就是劫持_IO_list_all 的值来伪造链表和其中的_IO_FILE 项,但是单纯的伪造只是构造了数据还需要某种方法进行触发。FSOP 选择的触发方法是调用_,这个函数会刷新_IO_list_all 链表中所有项的文件流,相当于。

2024-08-16 22:54:40 1083

原创 FILE 结构

FILE 在 Linux 系统的标准 IO 库中是用于描述文件的结构,称为文件流。FILE 结构在程序执行 fopen 等函数时会进行创建,并分配在堆中。我们常定义一个指向 FILE 结构的指针来接收这个返回值。0&&==0x20001||一共大小为:0xE8进程中的会通过**_chain 域_IO_list_all** 表示,通过这个值我们可以遍历所有的 FILE 结构。。因此在初始状态下,(指针) 指向了一个有这些文件流构成的链表,但是需要注意的是这三个文件流位于。

2024-08-12 21:59:25 702

原创 House of Orange

House of Orange 的利用比较特殊,首先需要目标漏洞是堆上的漏洞但是特殊之处在于题目中不存在 free 函数或其他释放堆块的函数。我们知道一般想要利用堆漏洞,需要对堆块进行 malloc 和 free 操作,但是在 House of Orange 利用中无法使用 free 函数,因此 House of Orange 核心就是通过漏洞利用获得 free 的效果。malloc_printerr 函数:voidva_list ap;

2024-08-12 21:51:46 1115

原创 House of Rabbit

House of rabbit 的优点是容易构造 overlap chunk,由于可以基于 fastbin attack,甚至不需要 leak 就可以完成攻击。

2024-08-10 10:27:54 702 4

原创 House of Lore

能修改small bin中chunk(victim)的bk指针:victim–>bk=fake_chunk1。要能伪造两个fake_chunk1、fake_chunk2,修改fake_chunk1的fd和bk指针,修改fake_chunk2的fd指针:fake_chunk1–>fd = victim 且 fake_chunk1–>bk = fake_chunk2最总实现的效果是,实现任意地址分配chunk:分配到fake_chunk1。

2024-07-29 19:24:22 969

原创 House Of Force

首先,需要存在漏洞使得用户能够控制 top chunk 的 size 域。其次,需要用户能自由控制 malloc 的分配大小。第三,分配的次数不能受限制。其实这三点中第二点往往是最难办的,CTF 题目中往往会给用户分配堆块的大小限制最小和最大值使得不能通过 HOF 的方法进行利用。

2024-07-29 11:53:16 739

原创 tcache attack

Tcache Attacktcache让堆利用更加简单:tcache回顾:在 tcache 中新增了两个结构体,分别是 tcache_entry 和 tcache_perthread_struct:/* We overlay this structure on the user-data portion of a chunk when the chunk is stored in the per-thread cache. */typedef struct tcache_entry{

2024-07-28 12:18:45 513

原创 tcache attack

在 tcache 中新增了两个结构体,分别是和其中有两个重要的函数,和这两个函数会在函数和的开头被调用,其中tcache_put当所请求的分配大小0x4087。7再复习一遍在tcache_get中,仅仅检查了,此外,我们可以将 tcache 当作一个类似于 fastbin 的单独链表,只是它的 check,并没有 fastbin 那么复杂,仅仅检查。

2024-07-25 18:05:06 1127

原创 NSSCTF[堆][tcache]

就会直接从该栈地址处再取出指令的地址执行,即取出我们构造的ORW指令的地址:

2024-07-24 17:16:30 776 2

原创 unsortedbin attack

(因为unsorted_chunks(av)地址本来就知道,不需要用过链尾的p去找它的下一个即fd值),所以即使我们修改了其为一个不合法的值也没有关系。然而,需要注意的是,unsorted bin 链表可能就此破坏,在插入 chunk 时,可能会出现问题。类似于unlink的过程,要将链尾的chunkp,取出来,即 unsorted_chunks(av)->bk = p->bk;我们可以看到,在该链表中必有一个节点(不准确的说,是尾节点,这个就意会一下把,毕竟循环链表实际上没有头尾)的。

2024-07-19 12:05:00 1196

原创 Unlink

下面我们首先介绍一下 unlink 最初没有防护时的利用方法,然后介绍目前利用 unlink 的方式。

2024-07-18 19:38:10 1019 1

原创 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 732

原创 NSSCTF[堆][Unlink]

题目地址:[

2024-07-13 21:42:38 1113

原创 NSSCTF[堆][tcache]

题目地址:[

2024-07-13 13:05:21 1575

原创 NSSCTF[堆][tcache]

题目地址:[参照:https://nuoye-blog.github.io/2021/05/16/466a7375/

2024-07-12 19:04:38 790

原创 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 977

原创 pwn入门--格式化字符串

gdb中格式化字符串在栈上的位置的,就是偏移。

2024-07-11 17:12:49 1077

原创 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 500

原创 堆溢出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 437

原创 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 1348

原创 Canary,三种优雅姿势绕过

如果利用栈溢出将最低位的b’\x00’覆盖,就可以利用答应函数将canary一致输出,最后再在最低位拼接上。逐次覆盖掉canary的4个字节(一位无法绕过低位字节堆高位进行爆破,所以必须从低到高),且要求canary不能变化,绕过重开程序canary变化,就不适用爆破了。在进行栈溢出时,如果程序开启了canary保护,首先就需要泄漏这个随机值,否则其被覆盖掉后,程序在退出时再检查该值,会引发错误。注意:canary爆破时,利用栈溢出,溢出到canary位置,从。首先确定要覆盖的位置,由于是。

2024-07-06 18:55:09 1557 1

原创 hitcontraining_uaf

再看一下del_note函数:先是检查了一下index的范围,再检检查一下当前的notelist列表上是否为空,即检查add时第一步申请的空间的指针,后续释放了两次的空间,但是有个问题:该notelist表还没有清空,指向这个地址的指针还存在于notelist中。,覆盖掉了第一次申请的堆(0x20大小)中存放的print_note_content函数的地址,如果此时直接调用print_note,就会执行我们输入的值所指向的地址出的代码,所以直接用。此时仔细观察,就会的发现我们第三次输入的值。

2024-07-05 21:25:59 843

原创 [pwn]静态编译

程序在ida打开后,左侧的函数栏目没有红色(系统调用的函数),而只有一些静态函数,通常这类文件的大小会必普通的pwn题程序要大得多。这种静态编译的题没有调用库函数,也就没有使用libc,自然我们也没法泄漏libc的基地址,可以直接使用ROPgadget来搜索,利用程序中的一些指令片段,来拼凑出的效果。

2024-07-05 19:42:31 878

原创 strcpy,srtcmp,strlen函数漏洞利用

ida查看,题目给了一个栈溢出漏洞,虽然给了0x200的长度,但是后面用户strlen检查了输入的长度不能超过0x50,溢出长度明显不够。后买你getflag函数中存在一个strcpy函数漏洞,可能可以进行栈溢出,动态调试观察其栈上的变化,可见只要。但是可以利用strlen函数判断字符串时以。

2024-07-05 19:39:53 1227

原创 栈复用(覆盖栈上的有用数据)

观察程序给的两个输入点:一个读name、一个读password,读name不用看(输入那么的前面根本没用函数能利用),仔细看一下读password:程序给的输入长度是0x4f,但是要想覆盖到返回值需要0x70长度,很明显不够,s的长度只有8,所以是存在溢出的,能覆盖掉栈上的其他数据,所以观察一下后续程序中是否有对 **该函数栈的重利用 **。是password_checker函数直接赋值的,所以password_checker函数利用不了,但是她的栈会在后面调用 *函数赋给v7的,并且最后传递出来的是。

2024-07-05 16:35:24 1020

原创 栈迁移([HDCTF 2023]KEEP ON)

确定栈迁移的目标位置:输入数组s的首地址,首先利用而格式化字符串泄漏bp寄存器指向的栈上的数据(是函数调用者即vuln的栈低指针),根据该值可以确定与s首地址的偏移x,从而用。,s的首地址(0x7fffffffddb0)与泄漏的值(0x7fffffffde10)之间的距离相差。,可以看到bp寄存器指向的位置在输出字符串中的。

2024-06-02 11:25:51 752 2

原创 泄漏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 1797

原创 PWN-栈迁移

有限,导致构造的ROP链不能完全写入到栈中,此时需要进行栈迁移,将栈迁移到能接受更多数据的位置(改变相继sp、bp寄存器的值),位函数调用、传参构造一个新的栈空间。栈迁移的位置因考虑在read的读取范围之内,首先应该考虑栈迁移的目标位置target,直接选择输入s的首地址即可,在。可见bp寄存器指向的栈空间已经被覆盖(数据随便输入,仅实验用),后面的函数返回地址也被修改,此时执行最后的。(覆盖掉bp寄存器指向的栈空间上的值)来更新sp寄存器。(调用者的sp寄存器值),bp所指向的栈空间上的值为。

2024-06-01 22:18:51 1148

原创 攻防世界[GoodRe]

循环结束后续重复调用了四个一样的函数,这里推测大概率是加密函数了(后续直接就判断并输出error),但是v11,v12,v13似乎还并未初始化,这里直接去看汇编观察传入了哪些参数:这里是传入了两个地址,一个是前面初始化的v14,一个是,前面初始化的我们输入,这里换一个清晰点的输入。进入main函数看逻辑:要求输入的长度为64,完事后进一个循环,while循环中处理了一堆数据,后面加密时使用,依次看这两个函数。

2024-05-26 21:54:49 1072

原创 攻防世界[asong]

题目地址:攻防世界 (xctf.org.cn)ida进入,可以看到就几个函数,进去逐一分析功能:首先时接受用户的输入,再check一下flag的形式,接着读取girl文件来初始化v4,最后进行flag的加密。字频替换(交换位置change_sit加密,逆向的顺序先做后做无所谓):位置交换逆向:最后:听下 that girl 喽:

2024-05-22 19:29:16 743

原创 攻防世界reverse_box

进入汇编来查看随机数的生成:and之后,取出eax(本身是32位),只取用eax的低8位作为种子密钥来生成box,因此可以在调试的时候将eax的值设置为。这里思路就是得到v4这盒子,然后用应该输出的数据对盒子进行逆查找,用值查其再盒子中对应的下标,根据题目要求的flag格式。来判定爆破的结果是否符合要求,或者,在输入部分正确的flag。进入bos分析:利用随机生成的数(非0)的。,在盒子中对应的下标即为。继续爆破,然后根据偏移为。观察输入的第一个值是否为。12. 最后的最后,参考了。

2024-05-16 16:44:18 1145

原创 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 1311

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除