websocket子域名在线爆破源码讲解

admin 2022年5月19日01:54:48评论324 views字数 1839阅读6分7秒阅读模式

 2022-05-13 22:52 美国


网安引领时代,弥天点亮未来   






 

websocket子域名在线爆破源码讲解

0x00故事是这样的



1.填坑之前的文章,讲解一下实现过程:基于websocket自写子域名在线爆破


2.平时懒得打开python脚本或者软件,基本都是去百度搜索子域名爆破。

websocket子域名在线爆破源码讲解


3.网上使用的是ajax,平均响应一次大小在200-300。

websocket子域名在线爆破源码讲解


4.如果使用websocket,平均响应一次大小30-40。

websocket子域名在线爆破源码讲解


5.因为http响应包把这响应头大小也包含进去了。

websocket子域名在线爆破源码讲解


6.还有就是ajax需要频繁和服务器进行三次握手,但是websocket只要建立一次链接,只要浏览器不关闭就可以长时间进行通信。


7.websocket框架使用的workerman,至于框架特性和优点,自行查询官网文档

https://www.workerman.net

websocket子域名在线爆破源码讲解

websocket子域名在线爆破源码讲解

websocket子域名在线爆破源码讲解

websocket子域名在线爆破源码讲解


8.我这使用的是webman,基于workerman容器的超高性能HTTP框架。

websocket子域名在线爆破源码讲解


9.首页代码其实也没啥的,引入html模板。

websocket子域名在线爆破源码讲解


10.前端模板其实也没啥的,就是链接websocket服务端,监听服务端onopen连接成功事件和服务端onmessage消息接受的事件,根据对应的事件响应类型执行对应的js代码。

websocket子域名在线爆破源码讲解


11.根据官网给的手册,可以进行自定义其他进程,也就是多进程。

websocket子域名在线爆破源码讲解

websocket子域名在线爆破源码讲解


12.我总共定义了额外两个进程,分别监听端口12345和6666。

websocket子域名在线爆破源码讲解


13.直接php start.php start启动服务。

websocket子域名在线爆破源码讲解


14.12345就是对外的websocket协议,具体代码逻辑如下。

websocket子域名在线爆破源码讲解


15.当客户端建立链接成功后,后端会触发onConnect函数,然后计算mysql数据库内总共字典数量,保存到$connection里面,因为有魔术方法在,当dict_count不存在会自动设置这个值,并且全局生效,只要浏览器客户端不关闭dict_count变量会一直生效,所以我代码写在这个位置,用户第一次连接的时候计算总数,不需要每次请求计算,不然太浪费性能了,只要浏览器不关闭,可以重复使用dict_count变量。

websocket子域名在线爆破源码讲解


16.最后任务通过后端异步AsyncTcpConnection会分给6666端口,为什么?

websocket子域名在线爆破源码讲解


17.因为12345端口主要是为了接受请求,计算字典总数,分发任务,返回结果,如果在这个进程解析域名,可能会导致其他客户端的堵塞了,所以异步交给6666端口,等处理完之后再返回给客户端。

websocket子域名在线爆破源码讲解


18.6666端口代码逻辑如下,通过gethostbyname解析域名,然后根据解析结果返回数据。

websocket子域名在线爆破源码讲解


19.这个时候异步任务结束,会再次触发AsyncTcpConnection里面onMessage函数,再次执行$connection->send,这个结果就是发送给浏览器的。

websocket子域名在线爆破源码讲解


20.所以有的时候前端看到的数字顺序是乱,那是因为后端异步执行任务返回的结果。

websocket子域名在线爆破源码讲解


21.12万的字典,如何知道当前爆破到第几个了哪?前面已经说过了,$connection是全局变量,只要客户端不关闭,保存的变量会一直存在,例如这个特性,每次解析进行叠加。(开始爆破的时候会进行初始化)

websocket子域名在线爆破源码讲解


22.12万的字典如何保存?保存在mysql数据库.根据current_dict_count的数值,可以知道当前爆破到第几个子域名了。

websocket子域名在线爆破源码讲解


23.最后一个就是数据库了,主键id的最大数值需要和字典数量一样,这样可以使用where语句的id和current_dict_count的当前爆破到数量进行同步。

websocket子域名在线爆破源码讲解


24.如果主键id和总数对不上,可能导致where的时候会乱掉,如果用limit语句的话,就不需要在意主键id和总数对上,但是测试下来,长时间爆破,where的语句执行速度比limit快,limit越到后面,速度也就越慢了,所以使用where代替limit,前提是主键id要和总数对上。


25.总结以下几点:

(1).12345端口进程负责对外websocket服务开放,不需要启动太多进程,主要处理字典计算,任务接受,分发和结果返回。

(2).6666端口进程负责异步处理比较耗时解析任务,这个需要启动多一点的进程,我启动了50个。

(3).where比limit执行效率高,所以最后选择where,但是主键id必须和字典总数对上。


26.整体代码其他地方还有待完善。


28.早期PHP码农一枚。


29.欢迎大家关注弥天安全实验室公众号。






websocket子域名在线爆破源码讲解 

知识分享完了

喜欢别忘了关注我们哦~



学海浩茫,

予以风动,
必降弥天之润!


   弥  天

安全实验室

websocket子域名在线爆破源码讲解


原文始发于微信公众号(弥天安全实验室):websocket子域名在线爆破源码讲解

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年5月19日01:54:48
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   websocket子域名在线爆破源码讲解https://cn-sec.com/archives/1019402.html

发表评论

匿名网友 填写信息