• 【Python脚本进阶】1.2、python脚本基础知识(下)


    目录

    一、文件输入/输出

    简介:

    示例:

    二、sys模块

    简介:

    示例:

    三、OS模块

    简介:

    示例:

    四、漏扫脚本

    示例:


    (我所用为python3+pycharm)

    一、文件输入/输出

    简介:

    假设有一个名为vuln_ b anners.txt 文本文件, 这个文件的每一行都列出了一个已知有漏洞的特定服务版本(的banner) 。

    通过读取这个文本文件, 来判断banner 是否有漏洞的服务器,避免使用一大堆if语句去判断。

    示例:

    cat vuln_banners.txt
    3Com 3CDaemon FTP Server Version 2.0
    Ability Server 2.34
    CCProxy Telnet Service Ready
    ESMTP TABS Mail Server for Windows NT
    FreeFloat Ftp Server (Version 1.00)
    IMAP4revl MDaemon 9.6.4 ready
    MailEnable Service, Version: 0-1.54
    NetDecision-HTTP-Server 1.0
    PSO Proxy 0.9
    SAMBAR
    Sami FTP Server 2.0.2
    Spipe 1.0
    TelSrv 1.5
    WDaemon 6.8.5
    WinGate 6.1.1
    Xitami
    YahooPOPs! Simple Mail Transfer Service Ready


    在checkVulns函数中换上了新的代码。这里以只读模式('r')打开文本文件,用.readlinesO方法遍历文件中的每一行, 并将其与我们的banner做比较。

    注: 必须用.strip('\r')方法去掉每一行的回车键。检测到匹配, 打印一个有漏洞的服务器的banner

    1. def checkVulns(banner):
    2. f = open("vuln_banners.txt", 'r')
    3. for line in f.readlines():
    4. if line.strip('\n') in banner:
    5. print('Server is vulnerable: '+banner.strip('\n'))



    二、sys模块

    简介:

    内置的sys模块使我们能访问到由Python 解释器使用或维护的对象, 其中包括标志、版本、整型数的最大尺寸、可用的模块、hook路径、标准错误/输入/输出的位置, 以及调用解释器的命令行参数

    示例:

    把一个文本文件的文件名作为命令行参数传递sys.argv 列表中含有所有的命令行参数

    第一个sys.argv[0]元素中的是Python 脚本的名称

    列表中的其余元素中则记录了之后所有的命令行参数

    如果我们只是传递一个额外的参数, sys.argv 中应该包含两个元素(脚本名称、传入的参数)

    1. import sys
    2. if len(sys.argv) != 2:
    3. filename = sys.argv[1]
    4. print('Reading Vulnerabilities From: ' + filename)



    三、OS模块

    简介:

    内置的OS 模块提供了丰富的适用于Mac、NT 或Posix 的操作系统的函数。这个模块允许程序独立地与操作系统环境、文件系统、用户数据库以及权限进行交互

    示例:

    用户把一个文本文件的文件名作为命令行参数传递进来, 先检查一下该文件是否存在、当前用户是否有权限读取该文件,其中任一条件不满足, 就向用户显示一条相应的错误信息

    1. import sys
    2. import os
    3. if len(sys.argv) == 2:
    4. filename = sys.argv[1]
    5. if not os.path.isfile(filename):
    6. print(filename + ' does not exist.')
    7. exit(0)
    8. if not os.access(filename, os.R_OK):
    9. print(filename + ' access denied.')
    10. exit(0)
    11. print('Reading Vulnerabilities From: ' + filename)



    四、漏扫脚本

    示例:

    重新整合上面学过的这些重新整合一下Python 漏洞扫描脚本的各个部分

    1. import socket
    2. import sys
    3. import os
    4. def retbanner(ip, port):
    5. try:
    6. socket.setdefaulttimeout(2)
    7. s = socket.socket()
    8. s.connect((ip, port))
    9. banner = s.recv (1024)
    10. return banner
    11. except Exception as e:
    12. return e
    13. def checkVulns(banner,filename):
    14. f = open(filename,'r')
    15. for line in f.readlines():
    16. if line.strip ('\n') in banner:
    17. print('Server is vulnerable: ' + banner.strip ('\n'))
    18. def main():
    19. if len(sys.argv) == 2:
    20. filename = sys.argv[1]
    21. if not os.path.isfile(filename):
    22. print(filename + ' does not exist.')
    23. exit(0)
    24. if not os.access(filename, os.R_OK):
    25. print(filename + ' access denied.')
    26. exit(0)
    27. else:
    28. print('Usage: ' + str(sys.argv[0]) + ' ')
    29. exit(0)
    30. portList = [21, 22, 25, 80, 110, 443]
    31. for x in range(147, 150 ):
    32. ip = '192.168.190.' + str( x )
    33. for port in portList:
    34. banner = retbanner(ip,port )
    35. if banner:
    36. print(ip + str(banner))
    37. checkVulns(banner, filename)
    38. if __name__ == '__main__':
    39. main()

  • 相关阅读:
    Vue3项目开发:配置文字两行显示,超出部分用省略号
    做自媒体视频需要怎么做才能年收入一百万?
    vue页面跳转
    目标检测标注的时代已经过去了?
    docker 镜像分层
    leetcode_39 组合总和
    使用StackWalker类打印当前运行堆栈信息
    SpringBoot 项目实战 ~ 5.菜品管理
    【PC】2023年11月商店更新
    [SpringBoot系列]NoSQL数据层解决方案
  • 原文地址:https://blog.csdn.net/qq_53079406/article/details/126006697