CTF场景下利用Dirty Cow改写file1触发命令执行读取flag的技术问询
可行方案分析
环境权限拆解
直接把每个配置的实际作用列清楚:
reader是带SGID位的二进制(权限段组权限的s标记),运行时有效组身份为reader组flag.txt权限为-rw-r-----,仅root属主、reader属组可读取,普通用户无任何访问权限dir目录权限为drwxr-x--x,普通用户仅能进入目录,没有列目录、修改目录内文件实体的权限- 普通用户对
dir/file1无写入权限,只有root、reader组的进程可以读这个文件——Dirty Cow在这里的核心作用就是绕过文件写权限检查,直接修改只读文件的内存映射页,达到改写file1内容的目的
实际利用路径
分两种reader程序的实现逻辑对应打法:
当reader存在命令拼接执行逻辑(CTF常规出题逻辑)
这类程序的实现通常是:读取dir/file1存储的字符串,将字符串拼接到固定命令中,通过system()、popen()这类接口交给系统shell执行。
这种场景链路完全打通:
- 用Dirty Cow把file1原有普通字符串,替换为
cat /flag.txt - 运行reader时,它自带的reader组有效身份会被派生的shell子进程继承,刚好满足flag.txt的组读权限要求,执行完就能直接输出flag内容
写payload时注意控制长度,不要超过file1的原文件大小,Dirty Cow的页写入没法突破原文件的长度边界,短命令完全够用
当reader仅做纯内容读取打印,无命令执行逻辑
这种情况单靠改写file1的字符串内容没法触发命令执行——程序只是把读到的文本打到标准输出,根本不会把读到的内容当成命令解析执行。
这种场景下只能进一步挖reader程序本身的内存漏洞,单靠Dirty Cow改file1的内容打不通链路。
避坑提醒
不要试图在dir目录下创建软链接、硬链接替换file1指向flag.txt,dir对普通用户没有写权限,内核会直接拒绝这类修改目录实体的操作。
内容的提问来源于stack exchange,提问作者JavaDumbell
相关产品推荐
相关产品推荐

