基于LSP劫持SOCKS5认证

基于LSP劫持SOCKS5认证实现客户端以代理方式连接远程服务器
1 Winsock2 SPI
winsock2服务提供者接口(service provider interface)是Winsock API的补充。服务提供者接口,是应用程序使用的服务,而它本身不是应用程序,他的作用是向加载这个服务的应用导出自己。

原本Winsock目录如下:
Winsock 32-bit Catalog:

1001 - Hyper-V RAW
1006 - AF_UNIX
1007 - MSAFD Tcpip [TCP/IP]
1008 - MSAFD Tcpip [UDP/IP]
1009 - MSAFD Tcpip [RAW/IP]
1010 - MSAFD Tcpip [TCP/IPv6]
1011 - MSAFD Tcpip [UDP/IPv6]
1012 - MSAFD Tcpip [RAW/IPv6]
1002 - RSVP TCPv6 1003 - RSVP TCP 1004 - RSVP UDPv6 1005 - RSVP UDP 1013 - MSAFD L2CAP [Bluetooth]
1014 - MSAFD RfComm [Bluetooth]

协议的序号和协议链的数字 0:分层协议  1:基础协议   大于1 :协议链
Protocol:[0] Hyper-V RAW
iVersion:[0] 2
CatalogEntryId: 1001 ChainLen: 1
Protocol:[1] AF_UNIX
iVersion:[1] 2
CatalogEntryId: 1006 ChainLen: 1
Protocol:[2] MSAFD Tcpip [TCP/IP]
iVersion:[2] 2
CatalogEntryId: 1007 ChainLen: 1
Protocol:[3] MSAFD Tcpip [UDP/IP]
iVersion:[3] 2
CatalogEntryId: 1008 ChainLen: 1
Protocol:[4] MSAFD Tcpip [RAW/IP]
iVersion:[4] 2
CatalogEntryId: 1009 ChainLen: 1
Protocol:[5] MSAFD Tcpip [TCP/IPv6]
iVersion:[5] 2
CatalogEntryId: 1010 ChainLen: 1
Protocol:[6] MSAFD Tcpip [UDP/IPv6]
iVersion:[6] 2
CatalogEntryId: 1011 ChainLen: 1
Protocol:[7] MSAFD Tcpip [RAW/IPv6]
iVersion:[7] 2
CatalogEntryId: 1012 ChainLen: 1
Protocol:[8] RSVP TCPv6 iVersion:[8] 2
CatalogEntryId: 1002 ChainLen: 1
Protocol:[9] RSVP TCP iVersion:[9] 2
CatalogEntryId: 1003 ChainLen: 1
Protocol:[10] RSVP UDPv6 iVersion:[10] 2
CatalogEntryId: 1004 ChainLen: 1
Protocol:[11] RSVP UDP iVersion:[11] 2
CatalogEntryId: 1005 ChainLen: 1
Protocol:[12] MSAFD L2CAP [Bluetooth]
iVersion:[12] 2
CatalogEntryId: 1013 ChainLen: 1
Protocol:[13] MSAFD RfComm [Bluetooth]
iVersion:[13] 2
CatalogEntryId: 1014 ChainLen: 1

安装lsp.dll协议并将其置于第一个协议之后的winsock目录:
Winsock 32-bit Catalog:

4754 - Test LSP over [Hyper-V RAW]
4755 - Test LSP over [AF_UNIX]
4756 - Test LSP over [MSAFD Tcpip [TCP/IP]]
4757 - Test LSP over [MSAFD Tcpip [UDP/IP]]
4758 - Test LSP over [MSAFD Tcpip [TCP/IPv6]]
4759 - Test LSP over [MSAFD Tcpip [UDP/IPv6]]
4760 - Test LSP over [RSVP TCPv6 4761 - Test LSP over [RSVP TCP 4762 - Test LSP over [RSVP UDPv6 4763 - Test LSP over [RSVP UDP 1001 - Hyper-V RAW
1006 - AF_UNIX
1007 - MSAFD Tcpip [TCP/IP]
1008 - MSAFD Tcpip [UDP/IP]
1009 - MSAFD Tcpip [RAW/IP]
1010 - MSAFD Tcpip [TCP/IPv6]
1011 - MSAFD Tcpip [UDP/IPv6]
1012 - MSAFD Tcpip [RAW/IPv6]
1002 - RSVP TCPv6 1003 - RSVP TCP 1004 - RSVP UDPv6 1005 - RSVP UDP 1013 - MSAFD L2CAP [Bluetooth]
1014 - MSAFD RfComm [Bluetooth]
4753 - Test LSP

SPI提供三种协议:分层协议、基础协议、协议链。
分层协议在基础协议的上层,依靠底层基础协议实现更高级的通信服务。
基础协议是能够独立、安全的和远程端点实现数据通信的协议。
协议链是将一系列基础协议和分层协议按特定顺序连接在一起的链状结构。

1 LSP劫持的基本原理:
lsp的工作原理:应用程序创建套接字函数(如socket)在Winsock目录寻找合适的协议,把自己的lsp.dll放在目录的第一层应该程序就可以调用我们的导出函数。在lsp.dll中实现我们要拦截或者说要修改的函数从而达到我们想要的效果。
在lsp.dll中主要对以下几个函数做处理。
int WSPAPI WSPConnect(
SOCKET s,
const struct sockaddr FAR * name,
int namelen,
LPWSABUF lpCallerData,
LPWSABUF lpCalleeData,
LPQOS lpSQOS,
LPQOS lpGQOS,
LPINT lpErrno
)
WSPConnect函数中获取到原本的远程地址,并且存储远程地址在socks5认证的时候会用。之后设置要连接的代理地址。同时设置sock为阻塞状态,调用下层提供者的.lpWSPConnect函数其中指定连接的代理地址。连接成功后要修改sock为非阻塞状态。只在此做代理连接还不能完全拦截所有ip地址,要在WSPIoctl函数中做处理。连接之后调用socks5认证函数做认证。
int WSPAPI WSPIoctl(
SOCKET s,
DWORD dwIoControlCode,
LPVOID lpvInBuffer,
DWORD cbInBuffer,
LPVOID lpvOutBuffer,
DWORD cbOutBuffer,
LPDWORD lpcbBytesReturned,
LPWSAOVERLAPPED lpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
LPWSATHREADID lpThreadId,
LPINT lpErrno
)
这个是ioctl控制函数其中要调用ExtConnectEx扩展函数,在扩展函数中要连接到代理服务地址,
在调用lpfnConnectEx函数之前要做bind本地地址处理,以能连接到代理服务IP。
BOOL PASCAL FAR ExtConnectEx(
IN SOCKET s,
IN const struct sockaddr FAR *name,
IN int namelen,
IN PVOID lpSendBuffer OPTIONAL,
IN DWORD dwSendDataLength,
OUT LPDWORD lpdwBytesSent,
IN LPOVERLAPPED lpOverlapped
)
在ExtConnectEx函数中调用下层提供者的lpfnConnectEx函数并连接到代理地址。
整个流程:应用程序创建socket套接字的时候会调用winsock目录,从而链接到自己写的lsp.Dll导出的劫持函数,实现对应该程序网络的拦截,拦截之后利用socks5认证方式连接到代理服务器,与代理服务器进行两次认证,两次认证成功后代理服务器将连接到远程服务器。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值