1.4 KiB
1.4 KiB
取证入口(无 sudo 时)
目标用户常见情况:sudo 要密码,但在 docker 组。Docker 组等价于 root。
读宿主机(绕过 preload)
容器用自己的 libc,不会加载宿主机 /etc/ld.so.preload。
docker run --rm -i --privileged --pid=host --net=host -v /:/host alpine:latest \
cat /host/etc/ld.so.preload
hexdump -C /host/etc/ld.so.preload # 在容器内
列隐藏进程:
docker run --rm --privileged --pid=host alpine:latest sh -c \
'for d in /proc/[0-9]*; do
pid=${d#/proc/}
cmd=$(tr "\0" " " < "$d/cmdline" 2>/dev/null) || continue
[ -n "$cmd" ] && echo "$pid $cmd"
done'
改宿主机(systemctl / chattr)
chroot /host /usr/bin/chattr 会加载宿主机 preload,可能 stat 不到 被藏文件。
用发行版自带 chattr 操作 /host/...:
docker run --rm -i --privileged --pid=host --net=host -v /:/host ubuntu:latest bash -s <<'SH'
chattr -i /host/etc/ld.so.preload
: > /host/etc/ld.so.preload
chattr +i /host/etc/ld.so.preload
lsattr /host/etc/ld.so.preload
SH
systemctl / reboot:
docker run --rm --privileged --pid=host --net=host alpine:latest \
nsenter -t 1 -m -u -i -n -- systemctl disable --now UNIT
不要用业务容器当跳板;用 alpine/ubuntu 临时 --rm。查到一半时 docker ps 里出现的随机名容器就是这个跳板。