Hello 各位小伙伴们大家好,周末过的愉快吗?
刚好最近学习了使用python编写banner获取脚本,今天就跟大家一起一步一步再学习一遍吧。
Part.1
说明篇
什么是banner?
banner可以理解为我们连上服务器后,服务器响应的第一条欢迎语句。
通常通过banner我们可以获取到服务器正在运行的服务,以及服务的名称和相关版本信息。
例如linux下的nc命令,如下:
又或者是windows下的telnet返回信息:
由以上两个返回信息,我们可以知道这两台服务器的ftp版本分别为2.3.4和3.0.2。
获取服务的版本信息后,我们是不是就可以针对性地进行渗透了呢。
Part.2
代码篇
1、基本代码
首先我们来编写一个简单的基本代码,实现上面所说的功能。
这里涉及到了socket模块,什么是socket呢?可以简单的理解socket就是一个连接,说明如下:
脚本运行结果如下,成功取得banner:
这样基础代码就完成了,关于socket模块的详细使用方法,我将在近期推出。接下来,我们一步一步来完善这个程序。
2、添加漏洞版本判断功能
假设ftp 3.0.2 版本为一个已知漏洞版本,添加if语句来对扫描的IP地址进行判断,判断是否为3.0.2版本,修改代码如下:
运行结果:
3、添加异常处理功能
为什么需要添加异常处理功能呢??
修改代码如下:
4、函数封装
为了方便多次调用,将代码根据功能分成不同的模块,改写代码如下:
注:if __name__== "__main__"
5、对多IP进行扫描
当前代码仅对192.168.211.168进行判断,我们可以添加for循环,对多IP进行扫描:
其他代码不变,部分输出结果:
6、从文本中读取ip地址进行扫描
我们可以从文本中读取指定的IP地址进行扫描,修改代码如下:
注:文件操作的基本流程:
7、为代码添加多线程
经测试,当扫描IP地址为一整个网段时,需要10分钟才能全部扫描完成,这是因为程序需要等待第一个IP扫描完成后,才能扫描第二个IP地址。
此时我们可以为代码添加多线程,对多个IP同时进行扫描,修改代码如下:
桥豆麻袋,connect函数去哪里了?
(请往下看)
为了让我们自定义的check函数,connect函数,能在相同线程中,对一组数据同步进行处理。我们将connect函数从main()中拿出来,放到check函数中进行调用:
connect函数代码保持不变,接下来运行代码,不到1分钟即可完成254个IP地址扫描。
8、optparse模块
optparse模块,通过选项向脚本传递所需的参数。
(1)当我们运行一些软件时,如sqlmap,可以向脚本传递一些参数,接下来利用optparse模块,为我们的脚本也添加此功能。
添加-f 选项,让脚本扫描指定的模块。
添加-i 选项,让脚本扫描指定的IP地址所在的整个网段。
该部分代码构想如下:
注释如下:
2)接下来,再添加 help功能,为我们设置的选项提供说明,修改代码如下:
尝试使用 -h 功能:
好了,接下来将以上构想放进我们的代码中,我们就可以使用选项,对指定文件或者是IP网段进行扫描了,各部分代码说明如下:
9、功能测试
接下来对我们的脚本进行测试:
(1)不传入任何参数,运行结果:
(2)传入错误的文件名
(3)-f 传入正确的文件,进行扫描
(4)-i 传入一个ip地址,对所在网段进行扫描,部分截图如下:
注:因为采用多线程,各线程执行速度不同,此处会有错位显示的情况,但影响不大,解决方法还在思考中...
Part.3
完结篇
全代码
好啦,到此我们的代码就全部完成了,涉及了大量python基础知识,没看明白的小伙伴,可以针对不明白的函数在百度查询,可以轻松获取解答哦。
最后附上完整代码:
Peace