You need to enable JavaScript to run this app. CTF场景下利用Dirty Cow改写file1触发命令执行读取flag的技术问询
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.31 15:27:04