Say0l的安全开发-弱口令扫描工具-My-crack【红队工具】

这篇具有很好参考价值的文章主要介绍了Say0l的安全开发-弱口令扫描工具-My-crack【红队工具】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

写在前面

终于终于,安全开发也练习一年半了,有时间完善一下项目,写写中间踩过的坑。

安全开发的系列全部都会上传至github,欢迎使用和star

工具链接地址

https://github.com/SAY0l/my-crack

预览

Say0l的安全开发-弱口令扫描工具-My-crack【红队工具】,安全,web安全,网络安全,安全开发,红队

My-Crack 工具介绍

更适合中国宝宝的弱口令扫描器

Help

NAME:
   My-Crack - Weak password crack

USAGE:
   main.exe [global options] command [command options] [arguments...]

VERSION:
   1.1

AUTHOR:
   sayol <github@sayol.com>

COMMANDS:
   scan     let's crack weak password
   help, h  Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --debug, -d                    debug mode
   --timeout value, -t value      timeout (default: 3)
   --scan_num value, -n value     thread num (default: 5000)
   --ip_list value, -i value      ip_list (default: "./input/ip_list.txt")
   --user_dict value, -u value    user_dict (default: "./input/user.dic")
   --pass_dict value, -p value    pass_dict (default: "./input/pass.dic")
   --output_file value, -o value  scan result file (default: "./output/my_crack.txt")
   --help, -h                     show help
   --version, -v                  print the version

Use

当前核心支持ftp/mongodb/mysql/mssql/postgre/redis/ssh的弱口令扫描

提供了编译后的版本。

后续版本开放代码

Other

思路借鉴于赵海峰老师的《白帽子安全开发实战》

顺带回答赵海峰老师的小问题:

1. 扫到一个弱口令后,如何取消相同IP\port和用户名请求,避免扫描效率低下
2. 对于FTP匿名访问,如何只记录一个密码,而不是把所有用户名都记录下来
3. 对于Redis这种没有用户名的服务,如何只记录一次密码,而不是记录所有的所有用户及正常的密码的组合
4. 对于不支持设置超时的扫描插件,如何统一设置超时时间
  1. 利用hash来完成的。在redis,ftp这种可以仅记录密码的就以(ip-port-protocol)进行hash,其他带用户名的以(ip-port-username)进行hash,查hash来作为规避条件,一旦结果集的hash已经存在和当前扫描产生的hash值相同,就continue。

  2. 基于上述原理,就可以实现redis、ftp 只记录一个密码,不会把所有用户名都记录下来,因为是用ip-port-protocol 进行hash。

  3. 设计了一个WaitTimeout函数。

c:= make(chan struct{})
	go func(){
		defer close(c)
		wg.Wait()
	}()
	select{
	case <-c:
		return false //c仅仅作为一个flag,没有实际作用
	case <-time.After(timeout):
		return true
	}

使用一个管道作为flagtime.After(timeout)也返回一个管道。一旦c关闭,就会触发select第一个case,返回false,表示正常关闭,wg.Wait正常完成。一旦超时时间到达,会触发select第二个case,就会返回true,表示已经超时。

Ver 1.1 优化点

  1. 连接核心中,更替了一些不能用的版本、第三方库,使用了维护性高,连接稳定的版本库。

例如mongodb的连接核心:

“go.mongodb.org/mongo-driver/mongo”

“go.mongodb.org/mongo-driver/mongo/options”

抛弃了之前的个人维护库。

  1. 修复了一些问题
ipListFile, err := os.Open(fileName)
	if err != nil {
		logger.Log.Fatalf("Open ip list file err, %v", err)
	}

	defer ipListFile.Close()

减少大量代码冗余。上述代码为例,发生错误会直接终止,defer不会入栈,无需再做defer前的判断。
  1. 错误处理修复

之前版本大量复用err,会出现err覆盖问题,有必要的err取消覆盖写法。

Ver 1.2 待优化点

代码上线

并发算法需要优化

更多服务的支持 smb,elastic …

踩坑

初始化结构体什么时候用指针,什么时候传呢?

在Go语言中,当我们初始化一个结构体时,通常会使用取地址运算符&来创建一个指向该结构体的指针,然后将该指针赋值给一个变量。

这样做的主要原因有以下几点:

1.结构体是值类型:在Go语言中,结构体是值类型,也就是说当我们将一个结构体赋值给另一个结构体时,会进行值的拷贝。如果结构体较大,这将导致内存开销较大。而使用指针可以避免这种情况,因为指针只是保存了结构体的内存地址,赋值时只是复制了一个指针,而不是整个结构体。

2.修改结构体的字段:如果我们希望在函数中修改结构体的字段值,直接传递结构体的值是不会改变原结构体的。但如果传递结构体的指针,就可以通过指针来修改结构体的字段。

3.减少内存拷贝:在函数调用时,如果传递结构体的指针,避免了对整个结构体进行内存拷贝,提高了性能。特别是当结构体较大时,这种优化效果更为明显。

函数出口编写

无论是AI,还是我自己编写的,都是多出口写法,也就是函数弹出err时,检测err是否为nil,一旦出现错误,就弹出函数

从程序设计的角度来说,多出口是很繁琐,也很不严谨的,但是如果设置flag变量来检测,不仅占用内存也很麻烦

学习大佬编写时,提供了一个非常棒的思路,当你的true条件比较重要时,同时需要处理的err不算多,不需要保证每一次的错误精准处理时

使用单个err变量,判断err==nil时的下一步动作,一旦出现错误,直接走整个函数的总出口返回。如果没有错误,继续执行语句,新的err会覆盖旧的err,一旦出错仍然走总出口返回

这样,整个函数就只有一个总出口,重点就会放在err==nil的正确情况下,不需要去繁琐的处理err

但是这样也会产生一个问题,由于err是覆盖机制,一旦有两个语句同时发生错误,你并不能判断第一个语句是否真的发生了错误,它可能是被覆盖了,也可能是没有错误。所以上述写法在需要处理的err较少的情况下比较好用。

defer与return

在常规情况下,defer应该是写在return的前面,保证函数在进行返回之前做出defer中的操作。
但是这并不能保证defer一定能够达到你的逻辑,因为写的不好的函数中,函数会有多个出口,例如

if err!=nil{
    return false
}
defer fmt.Println("i am defer")

这样的错误处理是很常规的,此时如果err没有问题,defer仍然能够正常入栈,可以达到正常的逻辑,但是一旦err发现错误,defer 就不能正常入栈了。

所以defer一定要写在所有可能return的前面文章来源地址https://www.toymoban.com/news/detail-702299.html

到了这里,关于Say0l的安全开发-弱口令扫描工具-My-crack【红队工具】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Web安全 Acunetix漏洞扫描工具.

    Acunetix 是一个 自动化的 Web 应用程序安全测试工具,是通过检查 SQL 注入,跨站点脚本(XSS)和其他可利用漏洞等来审核您的 Web 应用程序 。一般来说,Acunetix 能够扫描任何通过网络浏览器访问并使用 HTTP/HTTPS 协议的网站或 web 应用程序。 Acunetix 提供了强大的的解决方案,然

    2023年04月14日
    浏览(49)
  • 安全配置审计概念、应用场景、常用基线及扫描工具

    软件安装完成后都会有默认的配置,但默认配置仅保证了服务正常运行,却很少考虑到安全防护问题,攻击者往往利用这些默认配置产生的脆弱点发起攻击。虽然安全人员已经意识到正确配置软件的重要性,但面对复杂的业务系统和网络结构、网络设备,如何进行安全配置仍

    2024年02月03日
    浏览(44)
  • 安全工具--- rengine安装---资产侦查漏洞扫描

    工具介绍 reNgine是一款针对Web应用渗透测试的自动化网络侦察框架,广大研究人员可以在针对Web应用程序的渗透测试过程中使用reNgine来实现信息收集,reNgine提供了一个自定义的扫描引擎,可以用于对网站和终端节点进行扫描和信息收集。 reNgine的优点在于它把所有的东西都集

    2024年02月02日
    浏览(64)
  • 基于python开发端口扫描工具

    本人仍然还在学习阶段,有问题欢迎大佬指正,希望我的文章能够帮助到你.以后我很多东西都会在博客更新,和大家一起进步,加油. 本次博客主要是开发一个端口扫描工具,用python语言,要求要能指定ip,指定c段,指定端口号和端口范围,还有多线程或者线程池实现,提高端口扫描效率

    2024年02月04日
    浏览(40)
  • 常见的安全扫描漏洞的工具、漏洞分类及处理

    Nikto 这是一个开源的Web服务器扫描程序,它可以对Web服务器的多种项目进行全面的测试。其扫描项目和插件经常更新并且可以自动更新。Nikto可以在尽可能短的周期内测试你的Web服务器,这在其日志文件中相当明显。不过,如果你想试验一下,它也可以支持 LibWhisker的反IDS方法

    2023年04月08日
    浏览(53)
  • 网络安全——漏洞扫描工具(AWVS的使用)

    一、安全漏洞产生的原因    二、什么是0day漏洞 在安全漏洞生命周期内,从安全漏洞被发现到厂商发布补丁程序用于修复该漏洞之前。 三、什么是安全漏洞生命周期 一共分为7个阶段    四、安全漏洞管理 1、    2、安全漏洞等级 (1)、微软设置了4个等级:低危、中危、

    2024年02月08日
    浏览(59)
  • 5种常用Web安全扫描工具,快来查漏补缺吧!

    漏洞扫描是一种安全检测行为,更是一类重要的网络安全技术,它能够有效提高网络的安全性,而且漏洞扫描属于主动的防范措施,可以很好地避免黑客攻击行为,做到防患于未然。那么好用的漏洞扫描工具有哪些? 答案就在本文! 1、AWVS Acunetix Web Vulnerability Scanner(简称

    2024年02月08日
    浏览(43)
  • 渗透测试——安全漏洞扫描工具APPScan的安装与基本使用步骤

            HCL AppScan Standard是安全专家和渗透测试者设计的动态应用程序安全测试工具,AppScan使用强大的扫描引擎,会自动检索目标应用程序并测试漏洞。测试结果按优先级排列,允许操作员快速分类问题、发现最关键的漏洞。每个检测到的问题都可以根据清晰且可操作的修

    2024年02月09日
    浏览(45)
  • 【云原生-K8s】镜像漏洞安全扫描工具Trivy部署及使用

    基础描述 Trivy是一个开源的容器镜像漏洞扫描器,可以扫描常见的操作系统和应用程序依赖项的漏洞。它可以与Docker和Kubernetes集成,帮助用户在构建和部署容器镜像时发现安全漏洞。Trivy支持多种漏洞数据库,包括Red Hat、Debian、Alpine等,可以根据用户的需求进行配置。Trivy还

    2024年02月05日
    浏览(58)
  • 安全人员必备漏扫工具——fscan是什么?并Win11安装fscan扫描工具、操作方法

    Fscan使用TCP连接来扫描目标主机上的端口。它会向目标主机发送一个TCP连接请求,如果目标主机响应了连接请求,说明该端口是开放的。如果目标主机没有响应连接请求,说明该端口是关闭的。 Fscan还可以使用ICMP协议来检测目标主机是否存活。当Fscan扫描一个IP地址时,它会发

    2023年04月21日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包