通过nginx代理请求执行linux命令

本文介绍了如何在CentOS7上通过Nginx结合lua-resty-shell模块执行Shell命令,但警告这种方法在生产环境中存在巨大风险,建议添加401认证。步骤包括安装依赖、sockproc、lua-resty-shell,配置lua脚本及nginx,最后通过URL参数执行命令。请谨慎操作,避免安全漏洞。
摘要由CSDN通过智能技术生成

本文基于Centos7验证,其中文中nginx使用的是wlnmp一键安装包(默认集成lua),当然你也可以用openresty,如果使用openresty那么文中有些配置方式可能不适用,需要自行调整,建议使用https://www.wlnmp.com/来安装nginx。

生产环境不建议这么”玩“,风险非常大,如果非要玩,可以考虑添加401认证。

1、安装一些所需依赖

yum install gcc gcc-c++ git

2、安装sockproc

方法一:

wget https://down.whsir.com/downloads/sockproc.tar.gz
tar xf sockproc.tar.gz
cd sockproc
make
cp sockproc /usr/bin/sockproc

方法二:

git clone https://github.com/juce/sockproc
cd sockproc
make
cp sockproc /usr/bin/sockproc

3、通过socket方式启动服务

sockproc /tmp/shell.sock && chmod 666 /tmp/shell.sock

4、安装nginx

rpm -ivh https://mirrors.wlnmp.com/centos/wlnmp-release-centos.noarch.rpm
yum install wnginx

5、安装lua-resty-shell模块

mkdir /usr/local/nginx/conf/waf/resty

方法一:
直接执行以下命令即可

curl -o /usr/local/nginx/conf/waf/resty/shell.lua https://down.whsir.com/downloads/shell.lua

方法二:

git clone https://github.com/juce/lua-resty-shell
cd lua-resty-shell
cp lib/resty/shell.lua /usr/local/nginx/conf/waf/resty/

6、编写lua脚本

vi /usr/local/nginx/conf/waf/sh.lua
local uri = ngx.var.uri;
local args = ngx.req.get_uri_args();
local sh  = args["sh"];
local shellCommand =" "..sh
local shell = require "resty.shell"
local args = {
    socket = "unix:/tmp/shell.sock";
}
local status, out, err = shell.execute(shellCommand, args)
ngx.header.content_type = "text/plain"
if out == nil or out == '' then
    ngx.say("Result:"..shellCommand.."\n")
else
    ngx.say("Result:"..shellCommand.."\n" .. out)
end

7、开启nginx的lua支持

vi /usr/local/nginx/conf/nginx.conf

取消以下两行前面#号注释,开启lua支持

lua_package_path "/usr/local/nginx/conf/waf/?.lua";
lua_shared_dict limit 10m;

8、配置lua访问路径

vi /usr/local/nginx/conf/vhost/demo.conf
server
    {
        listen 80;
        server_name _;
 
        location = /api/shell {
            content_by_lua_file /usr/local/nginx/conf/waf/sh.lua;
        }
}

9、重启nginx,访问以下地址测试效果

/etc/init.d/nginx restart

http://IP/api/shell?sh=date

注:我这里是通过浏览器执行date命令,你可以把date换成任意命令,例如查看nginx进程

http://IP/api/shell?sh=ps aux | grep nginx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值