浅谈Nginx Lua安全应用示例:后门/监听/挂马等

Nginx + Lua

nginx是一个用C语言开发的高性能WEB服务器及反向代理服务器,先将Nginx+Lua组合到一起的是OpenResty(类似的还有淘宝的tengine)。OpenResty通过汇聚各种设计精良的 Nginx 模块,从而将 Nginx 有效地变成一个强大的通用 Web 应用平台,在WEB应用与信息安全领域均有广泛的应用:

  • waf、安全代理(身份认证、敏感信息删除等)
  • Backdoor 后门
  • 数据监听、窃取
  • 挂马
  • lua代码加密及隐蔽
  • 更多

Nginx lua模块指令的顺序

nginx有11个处理阶段,如下图所示:

浅谈Nginx Lua安全应用示例:后门/监听/挂马等

一般我们在开发过程中常用到的阶段如下:

  1. set_by_lua*: 流程分之处理判断变量初始化
  2. rewrite_by_lua*: 转发、重定向、缓存等功能(例如特定请求代理到外网)
  3. access_by_lua*: IP准入、接口权限等情况集中处理(例如配合iptable完成简单防火墙)
  4. content_by_lua*: 内容生成
  5. header_filter_by_lua*: 应答HTTP过滤处理(例如添加头部信息)
  6. body_filter_by_lua*: 应答BODY过滤处理(例如完成应答内容统一成大写)
  7. log_by_lua*: 回话完成后本地异步完成日志记录(日志可以记录在本地,还可以同步到其他机器)

一般情况下,我们使用content阶段即可。

后门示例

找到conf/nginx.conf,在server块中添加路由:

然后创建lua/backdoor.lua脚本,你也可以创建在任意位置,不过要对应上文的content_by_lua_file字段:

重载nginx

浏览器访问

数据监听、窃取示例

nginx实现数据监听非法方便,只要以下ngx.req.read_body()和local post_args = ngx.req.get_post_args()2行代码即可, 再利用lua-resty-http模块就可以将数据通过post的方式提交到黑阔指定的地方,测试代码如下:

挂马示例

在nginx返回数据时,将网页木马插入即可,代码如下:

放到目标网站的/目录下后的效果如下:

在实际的渗透测试与安全检测中,并不限于以上举的几个小例子,我们应还应把服务容器载体做为一个分支来处理。

参考