👹Begin CTF 2024
2024-3-5
| 2024-10-8
0  |  Read Time 0 min
type
status
date
slug
summary
tags
category
icon
password

unhappy

这个是关于shellcode的实现问题,我最近都很少进行shellcode的使用,所以还是卡了很久,但是这个题是类似于NewStarCtf 2023的一道shellcode revenge的题目
思路如下:
进行syscall系统调用,x64系统调用是利用rax作为系统调用号,然后对于rdi等其他的参数寄存器就保存原样即可。
这里查看反汇编:
notion image
notion image
发现check函数中对一些字符进行了禁用,而且很重要的是:mov、lea、xor指令都是0x48开头,所以很尴尬,这些指令都不能用了
但是经过其他师傅的提点,发现还有一些指令:pushpop 指令未被禁用,可以直接进行使用
所以我们可以通过push和pop来修改寄存器的值,同时实现一个read的系统调用,这样我们重新进行read的时候就不会被禁用了
exp如下:
注意这里可以用\x90指令进行指令滑动
💡
最后要说明的就是suid提权,这个问题简单来说是这样的:当一个可执行文件拥有suid标志时,在运行时就会拥有这个文件所有者的权限,当flag设置为只有root可读写时,可以被具有suid的程序在运行时读取,而执行现代shell程序默认会抛弃suid,需要继承suid的话要显式指定,这也就是为什么orw可以读取flag,getshell反而不行。
💡
继承suid有两种方式,第一种执行sh -c "sh -p"(我也没试过,感兴趣可以尝试),第二种先执行setuid(geteuid()),再execve("/bin/sh\x00", NULL, NULL)

ezheap

这heap一点也不easy,但是其实这道题难度设定也是medium,所以可能师傅们也觉着它有点点难度吧。
打开文件,是经典的文件结构,add、del、edit皆有
  • add
notion image
  • edit
notion image
  • show
notion image
  • delete
notion image
2.31之后的libc,由于对tcache bin 的限制加大,所以要实现dup操作,需要另作一个打算。

House of botcake

House of botcacke 合理利用了 Tcache 和 Unsortedbin 的机制,同一堆块第一次 Free 进 Unsortedbin 避免了 key 的产生,第二次 Free 进入 Tcache,让高版本的 Tcache Double Free 再次成为可能。
此外 House of botcake 在条件合适的情况下,极其容易完成多次任意分配堆块,是相当好用的手法。
💡
也就是说,House of botcake 可以看作tcache dup在2.31版本之后的实现手法
原理如下:
  • 填满7个tcache bin,并且额外增加两个unsorted bin大小范围(起码大于0x90)的chunk,命名为chunk1和chunk2
  • free掉7个tcache,同时先free掉chunk2,然后是chunk1,这样,由于Unsortedbin Consolidate,这两个chunk被合成啦一个unsorted bin
  • 申请一个chunk,这样tcache中就会被分配一个chunk,bin数目变为6,再free掉chunk2,chunk2进入tcache bin中
  • 至此,如果我们申请了chunk,就会获得chunk2,但是同时chunk2又是我们释放了的unsorted bin的一部分,我们就完成了tcache dup
本题的exp:
收获:
  • 2.31 tcache dup的做法 也就是和house of botcake 原理在上面讲啦
  • 又一次遇见了对free_hook的使用 虽然在2.35后面的版本是不能用这个的 但是起码在2.31至2.34中还是可以用的
  • 需要把free_hook的指针指向system 这样再调用free就拿到shell
  • posion只有对fastbin和tcache bin才管用,对于unsorted bin是不管用的(存疑)
  • 进行tcache bin posion的时候不要在bin链中多加一个chunk,而是在此链的基础上修改一个chunk为想要的函数
 
  • CTF-WP
  • 2023年终总结i 春秋 冬季个人赛Wp-pwn部分
    • Giscus
    • Cusdis
    Catalog