监听服务器返回shell,直接root权限
接下来详细分析:
找机器来验证,环境为docker,上机查看:
netstat -anvp | grep :80返回结果如下:
- tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 16554/nginx: mas
复制代码 运行在 80 端口的程序为 nginx,在宿主机中寻找 nginx 程序
发现宿主机中没有运行 nginx
于是尝试进入 k8s 中的容器寻找响应服务
- docker ps | grep openresty
复制代码结果如下:
- b61e91356e49 "/usr/local/openresty"
复制代码最终在 k8s 中的 openresty 容器中发现了 nginx 程序/usr/local/openresty/nginx,查询 nginx 配置文件,发现配置文件当中引用了一行 lua 脚本:
- location = /package { proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Nginx-IP $server_addr; limit_req zone=normalfrequ burst=20 nodelay; content_by_lua_file lua/package.lua; }
复制代码查询该文件并查看文件内容 cat /usr/local/openresty/nginx/lua/package.lua
- local package_absolute_path = '/var/log/logs.tar.gz'local path = ngx.req.get_uri_args().pathif nil == path then path = '/logs'end
- os.execute('rm -rf ' .. package_absolute_path)os.execute('tar -zcvPf ' .. package_absolute_path .. ' ' .. path)ngx.redirect('/log/logs.tar.gz?' .. os.time())print('rm -rf ' .. package_absolute_path)os.execute('rm -rf ' .. package_absolute_path)return
复制代码仔细研究发现在配置文件中直接对path参数传入的字符串与rm -rf等命令进行拼接,没有进行文件白名单等过滤,攻击者可以通过构造特殊字符串对命令进行闭合,从而造成Linux命令注入,公网大多已修复后才进行爆出。
谨记网络安全法,切勿用于非法用途