AWDP FIX 及妙妙小工具
AWDP FIX 及妙妙小工具
AWDP是一种综合考核参赛团队攻击、防御技术能力、即时策略的攻防兼备比赛模式。 每个参赛队互为攻击方和防守方,充分体现比赛的实战性、实时性和对抗性,对参赛队的渗透能力和防护能力进行综合全面的考量。 AWDP一般分为两个板块,Break(自己的payload打通)和Fix(让主办方的payload打不通)。
AWDP FIX
参考了一大堆博客,来不及一一致敬了 0.0
修补示例
update.sh
1 |
|
打包命令
1 | tar zcvf update.tar.gz update.sh pwn_fix |
通用脚本
如果目标目录非/home/ctf/可以自行修改。
update.sh
1 | #!/bin/sh |
格式化字符串
避免格式化字符串的形式无非两种:一种是"%s", str,一种是用其他输出函数来输出,例如说puts。
1 | puts(str); |
如果dyn中有puts,那是最方便的,直接从printf(str)执行成puts(str),也就是将call printf修改为call puts。
如果dyn中没有puts,那么就需要尝试跳转出去在一个没有使用的可写段去写printf("%s", str),我们跳转的位置是从上一个函数执行结束到当前格式化字符串漏洞的call printf,也就是原本参数修改到执行函数的位置都是自定义的,并不是只有call printf才能覆写。
堆题的一些通用修复
堆题高度依赖于 free 函数,如果说 malloc 等函数的不正确使用是造成漏洞的主要原因(比如说溢出就属于长度没控制好),那 free 就是触发漏洞的关键
nop 掉free
free后未置空
一般来说后面有错误处理的话是最好的,一般checker不会管错误处理,所以直接在其他函数的错误处理上写mov [rbp+ptr], 0就可以了,例如说前面写了
1 | mov rax, [rbp+ptr] |
那么[rbp+ptr]就是需要置空的地址,而非rdi或rax寄存器。所以mov [rbp+ptr], 0就是有效的。
溢出
我们需要注意多种溢出方式,一种是输入溢出,一种是复制溢出。
输入溢出就是通过输入如scanf("%s", buf)、read(0, buf, a_large_size)等形式发生的;复制溢出就是通过memcpy(buf1, buf2, a_large_size)、for i to a_large_size: buf1[i] = buf2[i]等形式发生的。
memcpy、read这种函数本身存在控制字长的就很简单,可以先试试直接size_t传个0给不给过,然后再看缓冲区长度再去试。
用scanf的话大概率改三参数函数是不够的,一般还是要跳出去再回来,rdi rsi rdx。跳出去的话可以改为read,但其实还有方法,比如说从格式化字符串上下手,找个地方写"%12s"
妙妙小工具
pwnpasi
签到题杀手
evilPatcher
能给程序禁用一些系统调用来实现通防
这种方法对于 Docker 环境不适用,因为需要 Docker 开启 CAP_SYS_PTRACE 权限,但是这玩意会导致 Docker 逃逸,不过当然了,如果是纯黑盒的话,想逃还是很难的,360 等平台使用的似乎就是 Docker 的环境,而永信至诚的平台似乎是 VM 环境,这种方法可以使用
sandbox里有几个规则
mini_sandbox.asm
1 | A = sys_number |
阻止execve,允许除 execve 外的一切系统调用。
适合程序大多数功能都要保留,只是想简单防止被直接开 shell。
sandbox1.asm
1 | A = sys_number |
阻止高位 syscall + execve+ open。
允许其它低号 syscalls(包括 read/write/socket 等)。
在防止 getshell 的基础上再禁止直接打开文件(open),提高读取本地敏感文件(如 /flag)的难度。
很多程序正常运行可能需要
open(配置文件/日志/库加载),因此这个规则可能会破坏合法功能 —— 必须先测试并白名单必须的文件访问方式(或允许openat等)。
sandbox2.asm
1 | A = sys_number |
阻止高位 syscall + open, mmap, ptrace, openat, open_by_handle_at。
用途/效果:
- 禁
open/openat/open_by_handle_at:禁止各种文件打开接口,防止读取文件(flag)。 - 禁
mmap:阻断常见的内存映射操作(有些 shellcode/ROP 会用mmap映射可执行页或构造 RWX 段);这会显著减少某类内存注入或动态映射攻击的成功率。 - 禁
ptrace:防止调试/attach(阻止某些利用或调试行为)。
mmap 很常见(动态加载、malloc 实现可能内部用),有较大破坏性;使用前必须确认程序不依赖
mmap(或允许一小部分必要的 mmap 行为)。
sandbox3.asm
1 | A = sys_number |
高位 syscall + socket, connect, bind, listen, clone, execve。
允许其它低号 syscalls (包括 open, read, write, mmap 等)。
禁止网络操作与进程克隆,适合把服务限定为仅能做本地工作、不能建立网络连接或fork线程
最终启示 [华为杯]
啥工具都没招
快速修复启示就是
线下断网环境一定要拿个显卡部署个大模型30b以上的,都能秒











