pen9un / kscan

Kscan是一款纯go开发的轻量级的资产发现工具,可针对指定IP段、资产清单、存活网段自动化进行端口扫描以及TCP指纹识别和Banner抓取,在不发送更多的数据包的情况下尽可能的获取端口更多信息。并且能够针对扫描结果进行自动化暴力破解,且是go平台首款开源的RDP暴力破解工具。

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Kscan-简单的资产测绘工具

Release Release Release GitHub Repo stars GitHub forks GitHub all release

一、简介

 _  __ _____  _____     *     _   _
|#|/#//####/ /#####|   /#\   |#\ |#|
|#.#/|#|___  |#|      /###\  |##\|#|
|##|  \#####\|#|     /#/_\#\ |#.#.#|
|#.#\_____|#||#|____/#/###\#\|#|\##|
|#|\#\#####/ \#####/#/     \#\#| \#|

kscan是一款资产测绘工具,可针对指定IP段、资产清单、存活网段自动化进行端口扫描以及TCP指纹识别和Banner抓取,在不发送更多的数据包的情况下尽可能的获取端口更多信息。并且能够针对扫描结果进行自动化暴力破解,且是go平台首款开源的RDP暴力破解工具。

二、开发计划

  • 子域名扫描

  • CDN识别

  • 带颜色输出 [-Cn] √已完成

  • spy模块优化

    • 对扫描结果开始自动化扫描 [-Cn] √已完成
  • 更为精准的Title识别

    • js跳转
    • js渲染
  • 从fofa获取资产 [-f/--fofa] √已完成

  • 暴力破解模块 [--hydra] √已完成

    • smb √已完成
    • rdp √已完成
    • ssh √已完成
    • telnet
    • ftp √已完成
    • Database
      • Oracle √已完成
      • MySQL √已完成
      • MsSQL √已完成
      • MongoDB √已完成
      • PostgreSQL √已完成
      • Redis √已完成
    • Http
      • Tomcat
      • Websphere
  • Json格式输出 [-oJ] √已完成

三、更新日志

  • 2021年11月21日 发布v1.5

    • [+]重新支持oracle暴力破解

    • [+]修复一个可能会错过弱口令的bug

    • [+]丢弃烦人的freerdp,采用纯go实现rdp暴力破解

    • [*]优化Postgre默认字典

    • [*]优化RDP默认字典

    • [*]优化指纹识别逻辑,现在会逐步开启识别线程,避免误报

    • [*]新增.gitmodules

    • [*]优化输出信息,现在更为明了了

    • [*]优化指纹识别逻辑,现在更为准确了 \

  • 2021年07月02日 发布v1.25

    • [+]新增--spy参数,自动化探测存活内网网段,HW再也不抓瞎~

    • [+]优化IP模块,现在可以扫描8位以上的掩码了,且现在能够支持类似:192.168.10.11-192.168.100.11的扫描参数了。

    • [*]现在基本解决了中文乱码的问题,但是部分外语可能会仍然存在乱码。

    • [*]修复--host参数失效的问题。

    • [*]修复单个IP地址无法正常识别的问题。

    • [*]优化去重性能,修复在进行大资产扫描的情况下,载入扫描目标会卡死的问题。

    • [*]现在从文件导入扫描对象,会进行去重

    • [*]修复特殊情况下无法获取http返回包摘要的问题

  • 2021年06月15日 发布v1.20

    • [+]1.20版本发布,这个版本应该是一个相对成熟的版本,效率相对之前在体感上提高了10倍不止,特别是在大网络环境下,提升更为明显。

    • [+]新增-Pn参数,现在会默认进行智能存活性探测,若不需要进行存活性探测,需要添加此阐述。

    • [+]新增--check参数,使用该参数则不会进行端口扫描,只会对提供的URL进行应用指纹识别。

    • [+]新增--encode参数,现在可以指定编码为gb2312或者utf-8,这样即便是在CS终端下面也不会显示乱码了。

    • [*]解决绝大部分乱码问题。

    • [*]完善容错处理问题,现在即便单个协程发生故障,也不会导致程序崩溃。

    • [+]修复更新后,-o参数无效的问题。

    • [*]对代码逻辑以及实现方式进行了大调整,现在会进行智能存活性检测和指纹识别。

    • [*]对代码逻辑以及实现方式进行了大调整,从之前使用共享变量变成通过信道通信,现在的效率更高了。

    • [*]优化代码结构,现在更加容易读懂了。

    • [*]优化output输出方式,现在绝大部分情况下,都不会出现乱码的情况了,并会根据操作系统使用合适的换行符。

  • 2021年04月23日 发布v1.14

    • [+]新增NMAP指纹识别功能,针对TCP端口的协议识别更为精准了,而且能够截取部分关键信息,比如SMB协议现在除了可以识别端口类型,也可以获取主机名了

    • [+]新增HTTPS证书识别功能,针对使用HTTPS协议的端口,现在能够获取证书的使用人、域名等等,在做资产测绘的时候更利于确认目标资产

    • [+]新增--ping参数,若启用该参数,扫描端口之前会先进行Ping探测,若不存活,则不会进行端口扫描。便于提高内网环境做资产测绘的扫描效率。

    • [+]新增扫描耗时统计功能,现在在扫描程序正常结束的时候会显示,扫描消耗的总时长。

    • [*]不完美解决中文乱码问题,针对部分使用gbk的协议进行编码转换,然后优化了摘要信息获取逻辑。但是在Windows终端下面还是可能会有乱码。

    • [*]优化了端口开放的检测逻辑,原本在部分目标有硬防的时候会存在所有端口都打开的情况,现在不会出现这种情况了。但是也有可能会漏掉部分是用生僻协议的端口。这里主要特指发送所有探针之后仍然没有回复的端口,这种端口即便开放了,也没没有检测的必要吧,笑

    • [*]现在Timeout参数的默认为NMAP内置的探针超时时间,建议不要修改。

    • [-]现在删除掉了原来的底部进度条显示功能,因为这个功能会带来一些意想不到的显示bug,现在使用定时打印进度的方式来显示扫描进度。

    • [-]效率相对于以前有了些微的下降。但是对于正常使用来说,基本上是够用了。暂时也没有特别好的办法去解决,毕竟效率和准确度这两个东西是互斥的。

    • [-]现版本依然没有加入fofa搜索的功能,之前的一直没有加入的原因是觉得这个功能耦合度不高,但是现在有了一个大概的思路。后续会尽快加入。

  • 2021年02月26日11:27:20

    • [*]修复GBK乱码的问题

    • [*]变更httpStatusCode的检测逻辑,现在默认会记录所有状态码

四、使用方法

鄙人是一个懒人,所以在写工具的时候也往易用性上进行了更多的考量

usage: kscan [-h,--help] (-t,--target) [--spy] [-p,--port|--top] [-o,--output] [--proxy] [--threads] [--path] [--host] [--timeout] [-Pn] [--check] [--encoding]


optional arguments:
  -h , --help     show this help message and exit
  -t , --target   指定探测对象:
                  IP地址:114.114.114.114
                  IP地址段:114.114.114.114/24,不建议子网掩码小于12
                  IP地址段:114.114.114.114-115.115.115.115
                  URL地址:https://www.baidu.com
                  文件地址:file:/tmp/target.txt
  -p , --port     扫描指定端口,默认会扫描TOP400,支持:80,8080,8088-8090
  -o , --output   将扫描结果保存到文件
  -Pn          	  使用此参数后,将不会进行智能存活性探测,现在默认会开启智能存活性探测,提高效率
  --check         针对目标地址做指纹识别,仅不会进行端口探测
  --top           扫描经过筛选处理的常见端口TopX,最高支持1000个,默认为TOP4000
  --proxy         设置代理(socks5|socks4|https|http)://IP:Port
  --threads       线程参数,默认线程400,最大值为2048
  --path          指定请求访问的目录,只支持单个目录
  --host          指定所有请求的头部Host值
  --timeout       设置超时时间
  --encoding      设置终端输出编码,可指定为:gb2312、utf-8
  --spy           网段探测模式,此模式下将自动探测主机可达的内网网段,无需配置其他任何参数

功能不复杂,其他的自行探索

五、演示

端口扫描模式

image-20210220162851992

存活网段探测

image-20210220162851992

六、碎碎念

在开始正式介绍kscan之前,我决定聊一聊有关渗透过程过程中最重要的信息收集阶段:资产发现。

image-20210220154321503

如上图所示,从提供攻击目标,到最终实施攻击,经历了四个关键阶段。

  • 转换阶段

    这部分阶段主要目标是完成:从攻击目标到信息资产的一个转换,例如从一个关键字、主域名到具体的IP地址或者其他引申的子域名,主要手段是通过FOFA、钟馗之眼、子域名挖掘/爆破工具来生成一个模糊的清单用于后续阶段去做深层次的筛选。

    其实EHole、Glass等工具有做这一个阶段的整合,但是在这方面,我没有把这个功能做到kscan中,目前我其实是刻意把转换阶段独立出来的。因为在这个阶段,不论是搜索的关键字也好,还是通过域名找到真实IP也好,还是其实更多的需要”人“来做识别。识别完成之后,再生成一个清单给kscan,这样会使后面的流程更高效。

    当然这只是我的个人的一个执念,如果后续反响强烈的话,加进去其实也未尝不可。

  • 扫描阶段

    这一阶段主要是针对IP进行端口扫描以便于后续的应用层识别,扫描速率达标的工具诸如:s.exe、masscan等大都只能实现对开放情况进行探测。而目前的大部分工具,把这部分工作交给了FOFA等搜索引擎,不会自己进行资产探测,这样的优点是不会有大量的端口探测包打草惊蛇,缺点是存在时效性。可能漏掉资产。权衡之后,最终还是把这块功能整合到了kscan中,毕竟IP被封了可以换,资产漏掉了可就是真的漏掉了。

  • 识别阶段

    这一阶段就是对已开放的端口进行深度的端口识别,传统工具大都是只能对端口开放情况进行探测,各别具备识别功能的工具如:nmap效率则是硬伤,而且不能对内容进行解析,无法获取标题等。又或者只能进行HTTP等特定协议进行识别。为了解决这些问题,kscan在确保效率、不发送更多数据包的前提下,能够识别大多数开放端口的协议。

  • 检测阶段

    最后一个阶段,就是应用层检测了,类似CMS指纹识别、敏感目录/文件探测等等,kscan的开发初衷是在不发送更多数据的情况下更多的获取目标的信息,所以不会进行更深层次的目录扫描、指纹比对。但是会进行ico文件hash比对以及首页关键字比对,和返回包头部比对。这其实基本可以满足大部分的指纹识别需求了。

七、特别感谢

八、文末

Github项目地址(BUG、需求、规则欢迎提交): https://github.com/lcvvvv/kscan

image-20210220164117920

image-20210220164117923

九、下载地址

kscan

About

Kscan是一款纯go开发的轻量级的资产发现工具,可针对指定IP段、资产清单、存活网段自动化进行端口扫描以及TCP指纹识别和Banner抓取,在不发送更多的数据包的情况下尽可能的获取端口更多信息。并且能够针对扫描结果进行自动化暴力破解,且是go平台首款开源的RDP暴力破解工具。

License:GNU General Public License v3.0


Languages

Language:Go 100.0%