工具介绍
NPS是一款轻量级、高性能、功能强大的内网穿透代理服务器。目前支持tcp、udp流量转发,可支持任何tcp、udp上层协议(访问内网网站、本地支付接口调试、ssh访问、远程桌面,内网dns解析等等……),此外还支持内网http代理、内网socks5代理、p2p等,并带有功能强大的web管理端。
这款工具大家应该也使用了很长时间,在使用过程中发现了一些小问题,刚好抽时间优化一下工具的管理端和客户端代码,与大家分享一下。
-
流量特征
Client端与Server建立连接时会先向服务器发送TST携带版本信息进行验证,验证通过后会发送vkey的MD5,验证完成后返回sucs,响应一个main。
-
主动探测
import socket
def send_hex_strings_to_server(host, port, hex_strings):
try:
# 创建 TCP 连接
conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
conn.connect((host, port))
print(f"[*] Connected to {host}:{port}")
for hex_string in hex_strings:
# 将十六进制字符串转换为字节数据
data = bytes.fromhex(hex_string)
conn.sendall(data)
print(f"[*] Sent: {hex_string} (hex) -> {data} (bytes)")
# 接收远程主机返回的信息
response = conn.recv(1024)
print(f"[+] Received: {response.hex()} (hex) -> {response} (bytes)")
except socket.error as e:
print(f"Socket error: {e}")
except Exception as e:
print(f"An error occurred: {e}")
finally:
conn.close()
# 远程主机的 IP 地址和端口
remote_host = '192.168.26.154' # 请根据需要更改
remote_port = 8024 # 请根据需要更改
# 要发送的十六进制字符串
hex_strings_to_send = ['545354', '06000000302e32362e30', '07000000302e32362e3130'] # 分别表示 "TST", "1", "2" 的十六进制
# 调用函数
send_hex_strings_to_server(remote_host, remote_port, hex_strings_to_send)
-
管理端特征
访问管理IP端口80会返回如下信息。
访问管理IP端口8080自动转跳登录页面。
管理IP端口8080其他端口返回beego 1.12.0 Not Found页面。
-
流量特征去除
在lib/version/version.go中将版本号替换随机字符
在lib/common/const.go中修改认证参数中的字符串
-
主动探测特征去除
消除Version信息以及CONN_TEST特征即可,当然可能会有一些其他主动探测的方法。目前比较安全的方法还是对8024端口配置防火墙策略来防止主动探测。
-
管理端特征去除
在webstaticpageerror.html中修改title标签与body标签后,可以修改管理端80端口返回信息。
在webroutersrouter中修代码,添加beego.ErrorHandler()函数代理默认404返回,避免暴露框架。
在confnps.conf中修改配置,修改账号密码,默认端口,证书,管理端路径,加密key等信息。
访问管理端80端口,已经去除NPS标志。
访问修改过后的18080端口,不会自动转跳登录页面。需要输入管理路径才能访问到登录页面。
- Defender
- Kaspersky
原文始发于微信公众号(TeamSecret安全团队):免杀系列 NPS代理免杀 + 二开思路
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论