厌倦了滚动浏览相同的帖子?当您创建帐户后,您将始终回到您离开的地方。注册帐户,不仅可以享受无广告的清爽界面!
您需要 登录 才可以下载或查看,没有账号?注册
×
由于iKuai软路由基于OpenWRT“自研”且一直不开放root权限,因此本帖将介绍如何在免费版系统上打开root权限。如果您想简单解决,可以翻看 https://forum.naixi.net/forum.php?mod=viewthread&tid=2437 直接升级至3.7.14开心版,即可一劳永逸!
本帖讲解之前的通过 docker 替换系统文件的办法被堵的情况,目测如果 docker 插件不升级版本的话,这个漏洞可以一直用,无论爱快版本怎么升级都可以适用!因为 ikuai 的 docker 插件有一个挂载文件系统的漏洞,可以设法在 docker 容器内挂载宿主机的文件系统,然后修改对应的文件就可以绕过密码
iKuai 的新版 docker 做了限制:
- 对新建的容器执行挂载路径检查,只允许在/etc/disk_user 目录下,也就是 web 上面的目录,发现跨目录,直接 false 掉,无法新建
__check_srcpath()
{
local ROOT_PATH="/etc/disk_user"
local srcpaths="$1"
for path_dir in ${srcpaths//,/ }; do
local path_dir=${path_dir//:*/}
if [ "$path_dir" = "/" ]; then
echo "$path_dir not found"
return 1
fi
local tmp_dir=${path_dir//\.\./}
if [ "$tmp_dir" != "$path_dir" ]; then
echo "$path_dir not found"
return 1
fi
local abs_path="${ROOT_PATH}${path_dir}"
if [ ! -e "$abs_path" ]; then
echo "$path_dir not found"
return 1
fi
local dir_arry=(${path_dir//\// })
local hardlink=$(readlink ${ROOT_PATH}/${dir_arry[0]})
if [ ! -d "$hardlink" ]; then
echo "$path_dir not found"
return 1
fi
local i=0
for dir_one in ${dir_arry}; do
i=$((i+1))
[ "$i" = "1" ] && continue
hardlink+="/$dir_one"
done
if [ ! -e "$hardlink" ]; then
echo "$path_dir not found"
return 1
fi
done
}
- 对原有 Docker 容器的配置文件进行挂载路径检查,发现源路径异常后修改配置文件,取消所有挂载点
__check_config_json()
{
local config_path="$work_path/lib/containers"
for config_one in $(ls $config_path); do
local config_path_one="$config_path/$config_one/config.v2.json"
for mount_one in $(cat $config_path_one |jq .MountPoints|grep "\"Source\"": | awk '{print $2}');
do
[ "$mount_one" ] || continue
local invalid=0
if [ "${mount_one:1:15}" != "/etc/disk_user/" ]; then
invalid=1
fi
if [ "${mount_one//\.\./}" != "$mount_one" ]; then
invalid=1
fi
if [ "$invalid" = "1" ]; then
chattr -i $config_path_one
chattr -a $config_path_one
cat $config_path_one | jq '.MountPoints = {}' > /tmp/config.$$
mv /tmp/config.$$ $config_path_one
fi
done
done
}
|