手把手教你编写Socks5代理批量认证爆破工具

  • A+
所属分类:安全工具

惯例,听完歌在学习。

前言

内网渗透很重要的一个环节是寻找进入内网的跳板,假如你有了一个内网代理账号,进内网都不是事。

天使酱有 1w 个 socks5 代理的账号,要验证哪些还能用,哪些不能用,然后就有了这个工具。

在网上查了下相关的工具,基本上都是用curl设置代理,接着去请求一个公网上的一个脚本.也就是说你要批量验证,就得还有一个服务器.成本有些大.
于是就有了现在这篇文章和下面的这个工具了.说好手把手,就是手把手。

项目地址:

https://coding.net/u/medicean/p/socks5validate/git

思路
先说下我们验证的思路吧,就是把用户名和密码发送给 Server , 然后根据返回的报文来看有没有验证成功。这个过程不需要第三方参与.
从协议入手
老规矩,从协议开始.看协议的东西,RFC文档是最好的东西了.直接去查RFC文档了.

以下分析均根据RFC1928文档:

http://www.rfc-editor.org/rfc/rfc1928.txt



交互第1步: Client to Server
Client连接到Server,并发送一个版本,客户端支持的认证方式的一个报文,让服务器选择,格式如下:本,客户端支持的认证方式的一个报文,让服务器选择,格式如下:
手把手教你编写Socks5代理批量认证爆破工具


VER : socks协议版本号,这里就是x05.

NMETHODS: Client支持的认证的方式个数,我们本次只对用户名密码这种方式进行认证,所以个数就是x01
METHODS: 认证方法.

下面是RFC文档中给出的已经有的取值


手把手教你编写Socks5代理批量认证爆破工具


既然今天我们要针对用户名密码这种认证方式进行爆破,那么,这个METHODS 字段我们直接取 x02 就好了。
于是我们可以得出第一次交互的时候的payload是:
payload1= 'x05x01x02'
交互第2步:Server to Client

Server在接收到Client的请求之后,Server会从Client支持的验证方式中选择一个合适的验证方法,告诉Client.格式如下:


手把手教你编写Socks5代理批量认证爆破工具


很简单的报文,比如 'x05x02' 的意思就是 socks5 代理,支持的认证方式是 用户名密码形式的。
交互第3步:Client to Server

Client在收到Server返回的报文之后,提供相应的凭据给Server. RFC1929 是socks5用户名密码认证方式的说明.

客户端发送的报文格式如下:

手把手教你编写Socks5代理批量认证爆破工具

VER:版本号
ULEN:用户名的长度
UNAME:用户名
PLEN:密码长度
PASSWD:密码
图中的数字代表该字段的字节数.

于是我们第二步的payload就是:


手把手教你编写Socks5代理批量认证爆破工具


Client提供认证凭据给Server,Server返回认证结果.

报文格式也是简单粗暴:


手把手教你编写Socks5代理批量认证爆破工具


VER:版本号

STATUS:状态
状态这里,如果认证成功就是x00 如果不成功,返回的就不是x00

分析到这里,已经可以编码了.代码如下:


手把手教你编写Socks5代理批量认证爆破工具


这样只是对一个主机进行认证,要做到批量,就写个for,加个外壳就好了,这里就不说这些了.要爆破什么的,都是在这个基础上搞了…


最后再贴上源码地址:

https://coding.net/u/medicean/p/socks5validate/git(点击阅读原文访问源码

手把手教你编写Socks5代理批量认证爆破工具
长按可以关注我们


本文始发于微信公众号(inn0team):手把手教你编写Socks5代理批量认证爆破工具

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: