美文网首页python热爱者码农的世界程序员
挑战全网多线程批量扫描&爆破弱服务端口工具, Pytho

挑战全网多线程批量扫描&爆破弱服务端口工具, Pytho

作者: Python新世界 | 来源:发表于2018-08-17 13:37 被阅读24次
image

前言

你学习Python的目的是什么呢?是在大佬口中听说“Python大法好”而学习的,还是想自写爬虫爬取数据(数据、图片、各种内容),还是想自写自动化小工具,还是单纯的欣赏这门语言呢?

今天我来带领大家手把手写一个多线程批量扫描、爆破弱服务端口的工具。

image

捋一下思路

1.这个多线程扫描工具需要一个完善的多线程模板,一个完善的多线程模板需要用到哪些知识呢?

threading多线程模块,Queue队列模块,超时处理机制,异常处理机制等。

2.其次我们要扫描的是一个比较大的网段的IP的某一个开启弱服务的端口,我们并不能手动一个一个的输入IP地址,所以需要IP地址块和IP的转换。

image

3.我们想要爆破的服务可以是:1433端口(SQL Server数据库),3306端口(MySQL数据库),3389端口(RDP连接),6379端口(Redis数据库),27017端口(MongoDB数据库)等等等可以爆破或者匿名访问的端口和服务。

所以首先要探测端口开放情况,如果开放,进行下一步的匿名访问检测或者爆破检测,此时需要用到的知识点:socket模块探测端口,对应端口服务的核心爆破规则编写,当然相应的也离不开超时处理以及异常处理。

4.最后再加入帮助文档,以及我们自己特色的Logo,这样就可以完成我们自己的小工具啦!

先放一张我们最终工具完成后的效果图(Redis匿名访问版本):

image

完善的多线程模板

image

源码:

image

源码分析:

image

讲的这么详细,大家应该理解的不错了吧。

image

IP地址块转换

由于工具中需要直接输入一整个大的网段,所以此时我们需要用到IP地址块转换,例:

image

这就是IP地址块的转换。

这个概念和转换方式大家应该理解吧。

不懂的话详情百度IP地址块。

Python中内置一个ipaddr模块,可以直接在两者之间轻松转换,用法如下:

image image

运行结果:

image

从192.168.1.0输出到192.168.1.255。

后续的就是将这些要扫描的IP放入queue队列中,配合上面的多线程模板进行下一步扫描工作。

端口开放检测

基本操作,使用socket模块,创建套接字使用TCP协议探测端口开放情况。

使用方法如下(代码是在最终工具中截取的):

image

IP就是在队列queue中取出的IP,这就是使用socket套接字探测端口开放情况的简单代码。

sys.stdout.write是标准化输出,解决多线程并发输出不对齐问题。

这个代码探测了6379端口开放情况。

image

核心代码

好了,前期准备工作完成了,我们有了一套完善的多线程模板,并且将需要扫描的IP群也放入了队列模块,并且开启了多线程,也完成了端口开放扫描,终于走到了最后的核心代码区域。

笔者这里写的是Redis数据库未授权访问的批量扫描工具,所以核心代码就是检测Redis是否可以匿名访问。

image

最后的核心代码:

image

向6379端口发送一个ping,通过返回的PONG检测是否可以未授权访问,当然也可以使用Python连接Redis数据库并且尝试向内写入一对key和value,如果写入成功,也能检测出是否存在未授权访问漏洞,不过第一种方法比较简单。

image

Logo制作以及帮助文档撰写

Logo的制作使用Linux下的工具figlet,帮助文档使用Python内置模块argparse,我在前面详细介绍过这两款工具,现在用上了吧哈哈

image

logo_code = 'CiAgIF9fXyAgICAgICAgIF9fXyAgICAgX18gIF9fXyAgX18KICAvIF8gXF9fXyBfX18vIChfKV9fIC8gLyAvIC8gfC8gLwogLyAsIF8vIC1fKSBfICAvIChfLTwvIC9fLyAvICAgIC8gCi9fL3xffFxfXy9cXyxfL18vX19fL1xfX19fL18vfF8vIAoKQXV0aG9yOmh0dHA6Ly93d3cuaW1zdW5zaGluZS5jbgogICAg'

logo = base64.b64decode(logo_code)

print logo

print ''

parser = ArgumentParser()

parser.add_argument("-i", dest="cidr_ip", default = "192.168.1.1/16", help="The CIDR IP Like 192.168.1.1/24")

parser.add_argument("-t", dest="thread_count", type=int, default=100, help="The Thread Number")

args = parser.parse_args()

parser.print_help()

logo_code是事先使用base64加密过的,目的是让Logo的嵌入不显得那么突兀,只需要base64解密一次,再将它输出至屏幕就可以了。

image image

完成,炫酷!

抛砖引玉

既然本次笔者是批量检测的Redis数据库匿名访问,那是否可以是MongoDB、ldap匿名访问呢?甚至是MySQL数据库弱口令的爆破的,答案当然是可以的。

如:

MongoDB数据库未授权访问核心代码(连接数据库并尝试插入数据):

image

MySQL数据库弱口令爆破核心代码(两个open是读取用户以及密码字典,然后尝试远程连MySQL):

image

笔者再给大家列一些弱端口以及对应的服务吧,不过核心的爆破代码,需要自己慢慢研究咯~~

(PS:并不全面,仅供参考)

image

相关文章

网友评论

    本文标题:挑战全网多线程批量扫描&爆破弱服务端口工具, Pytho

    本文链接:https://www.haomeiwen.com/subject/dgwzbftx.html