国城杯2024wp
web
调查问卷
填问卷即得flag
pwn
Alpha_Shell
禁用了一大串系统调用,拿shell肯定是别想了,只能走orw。但是传统的orw路线给ban了,只能走openat
+sendfile
。
注意,使用
pwrite
是不行的,pwrite过程会调用write函数,会导致系统调用无法执行。详见源码:https://elixir.bootlin.com/glibc/glibc-2.35/source/sysdeps/posix/pwrite64.c#L41
另外此题还限制了可见字符shellcode,需要用alpha3
生成。
1 |
|
vtable_hijack
此题可以直接打__malloc_hook
,利用unsortedbin泄露libc+fastbin attack打malloc_hook即可拿到shell。
1 |
|
补充一下打vtable的方法。官方wp的堆布置策略有问题,会报错。
下面的exp打vtable时麻烦了,其实可以直接打puts
。
1 |
|
beverage store
这题容器有问题,反馈后也没修好,只能赛后加分……
经典负数索引利用。打随机数就不赘述了,直接说攻击流程。首先篡改exit
的got表到buy
函数上,让程序陷入循环;再泄露puts
地址,拿到libc基地址;再篡改printf
got表到system
函数上;最后篡改exit
的got表到那个printf("/bin/sh")
的函数上即可。
1 |
|
Offensive_Security
先打格式化字符串绕过第一个检查。接下来是两个线程,都没加锁,数据共享,其中guess
加载得快些,也就给了我们篡改相应值、绕过login检查的机会。 首先快速给guess发送一个1,sleep之后再给checker发一个1,就实现了绕过。
login成功后是一个栈溢出,考虑构造ROP链。但题目没给libc,那就只能考虑利用现有函数了。注意到printer
函数是读取某个文件并将其内容输出,也就是说我们只需要控制rdi
寄存器的值为flag
字符串的地址即可。这里套用fluff
题目的板子构造ROP链把flag写到data段上,再pop rdi即可。
1 |
|