• 网安学习-Python安全开发


    目录

    Python学习的意义

    涉及相关技术

    案例一:IP&Whois&系统指纹获取代码段-外网

    查询IP

    whois查询

    案例二:CDN&子域名&端口扫描&交互代码段-外网

    判断CDN 

    子域名查询

    端口扫描

    案例三:Py格式解析环境与可执行程序格式转换-Pyinstaller


            此后如竟没有炬火,我便是唯一的光。

    Python学习的意义

    1. 学习相关安全工具的原理;
    2. 掌握自定义工具以及拓展开发;
    3. 解决实战中无工具或手工麻烦批量化等情况;
    4. 在二次开发Bypass,日常任务,批量测试利用等方面均有帮助;例如SRC批量收集并利用,AWD批量利用获取FLAG,CTF加解密脚本等;

    涉及相关技术

    1. Socket部分技术
    2. 进程命令执行
    3. 交互参数执行
    4. NMAP工具模块使用
    5. 异常处理

    案例一:IP&Whois&系统指纹获取代码段-外网

    查询IP

    功能:例如输入域名www.xxx.com;返回解析的IP

    原理:利用Python中的socket模块的gethostbyname函数能够实现解析域名 IP 地址的功能

    1. def ip_check(url):
    2. IP = socket.gethostbyname(url)
    3. print(IP)
    4. #return IP

    输入某一个域名,解析的结果如下:

    whois查询

    功能:输入目标地址,能够查询目标的whois信息

    原理:Python的whois模块的whois函数能够获取目标的whois信息;需要导入python-whois模块

    1. import whois
    2. #该段代码是小迪老师的代码,而在自己编写的时候需要使用的是whois.query(url),但是出现了错误
    3. def whois_check(url):
    4. data = whois.whois(url)
    5. print(data)

    案例二:CDN&子域名&端口扫描&交互代码段-外网

    判断CDN 

    功能:输入目标地址,能够判断目标是否是CDN服务器

    原理:Python通过os库的system函数调用执行系统的nslookup命令来解析目标地址,如果解析地址的IP地址过多,那么说明使用了CDN服务器。

    1. def cdn_check(url):
    2. ip_check(url)
    3. commend = 'nslookup '+url
    4. ip_CDN = os.popen(commend).read()
    5. ip_count = ip_CDN.count('.')
    6. if ip_count>9:
    7. print('存在CDN,具体结果如下:')
    8. print(ip_CDN)
    9. else:
    10. print('不存在CDN,具体结果如下:')
    11. print(ip_CDN)

    通过点号来判断是否存在CDN,本方法,其实可以使用正则,我还没学会。

    子域名查询

    实现功能,查询目标的子域名

    原理:如输入 www.baidu.com;先正则去掉 www;然后加载字典,如内容为 aa;与处理后的 url 进行 拼接,即 aa.baidu.com;然后调用 socket 模块的 gethostbyname 函数来判断该域名是否能够 解析 IP,如果能说明该域名存在,不能则说明不存在。

    方法有两种:

    1. 利用字典加载爆破进行查询
    2. 利用ping或者第三方接口进行查询
    1. def zyum_check(url):
    2. urls = url.replace('www','')
    3. for zym_dic in open('D:\Python\CTF\Python_信息收集\dic.txt'):
    4. zym_dic = zym_dic.replace('\n','')
    5. para = zym_dic+urls
    6. try:
    7. ip = socket.gethostbyname(para)
    8. print(para+'->'+ip)
    9. time.sleep(0.1)
    10. except Exception as e:
    11. pass

    端口扫描

    实现功能 能跑判断对应端口是否开放

    原理 Socket 模块的 socket 函数

    方法:

    1. 原生态:自写socket协议tcp、udp扫描

    2. 调用第三方masscan、nmap模块等扫描(内网)

    3. 调用系统工具脚本执行

    1. def duankou_check(url):
    2. IP = ip_check(url)
    3. server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    4. port = {'20','21','22','25','23','80','443','135','110','8080','9080','9090','3389','8081','1521','1433','3306','139'}
    5. for de_port in port:
    6. result = server.connect_ex((IP,int(de_port)))
    7. if result==0:
    8. print(de_port+' is open')
    9. else:
    10. print(de_port+' is close')

    案例三:Py格式解析环境与可执行程序格式转换-Pyinstaller

    制作网上大佬的脚本工具,使用cmd+参数。例如sqlmap工具。

    1. import socket
    2. import os
    3. import time
    4. import whois
    5. import sys
    6. import nmap
    7. #输入域名
    8. #web_name = input()
    9. #通过域名反查IP地址
    10. def ip_check(url):
    11. IP = socket.gethostbyname(url)
    12. print(IP)
    13. return IP
    14. #识别目标域名是否采用了CDN
    15. #通过nslookup来查看回显的结果是否存在两个及以上的IP地址
    16. #利用python去执行系统命令
    17. '''
    18. 共有四种方法:
    19. 1. os.system() //不能将结果的值取出,不能进行操作
    20. 2. os.popen() //返回的是一个对象,那么继续通过read便可以将对象中的内容读取出来
    21. 3. commands模块
    22. 4. subprocess模块
    23. '''
    24. '''
    25. ip_CDN = os.system('nslookup www.xiaodi8.com')
    26. print(ip_CDN)
    27. '''
    28. def cdn_check(url):
    29. ip_check(url)
    30. commend = 'nslookup '+url
    31. ip_CDN = os.popen(commend).read()
    32. ip_count = ip_CDN.count('.')
    33. if ip_count>9:
    34. print('存在CDN,具体结果如下:')
    35. print(ip_CDN)
    36. else:
    37. print('不存在CDN,具体结果如下:')
    38. print(ip_CDN)
    39. '''
    40. 端口扫描
    41. 1. 原生态:自写socket协议tcp、udp扫描
    42. 2. 调用第三方masscan、nmap模块等扫描(内网)
    43. 3. 调用系统工具脚本执行
    44. '''
    45. def duankou_check(url):
    46. IP = ip_check(url)
    47. server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    48. port = {'20','21','22','25','23','80','443','135','110','8080','9080','9090','3389','8081','1521','1433','3306','139'}
    49. for de_port in port:
    50. result = server.connect_ex((IP,int(de_port)))
    51. if result==0:
    52. print(de_port+' is open')
    53. else:
    54. print(de_port+' is close')
    55. #whois反查
    56. #通过第三方库进行查询或者是通过第三方接口进行查询
    57. '''data_whois = whois.query(web_name)
    58. print(data_whois)'''
    59. #子域名查询
    60. #1. 利用字典加载爆破进行查询
    61. #2. 利用ping或者第三方接口进行查询
    62. def zyum_check(url):
    63. urls = url.replace('www','')
    64. for zym_dic in open('D:\Python\CTF\Python_信息收集\dic.txt'):
    65. zym_dic = zym_dic.replace('\n','')
    66. para = zym_dic+urls
    67. try:
    68. ip = socket.gethostbyname(para)
    69. print(para+'->'+ip)
    70. time.sleep(0.1)
    71. except Exception as e:
    72. pass
    73. #通过nmap进行内网存活主机的端口的探针
    74. #关于nmap的出错,配置安装这方面的错误,可以借鉴这篇文章拿https://blog.csdn.net/mkmlmkmlmkml/article/details/116094552
    75. def nmapscan():
    76. nm = nmap.PortScanner()
    77. try:
    78. data = nm.scan(hosts='192.168.52.0/24',arguments='-T4 -F')
    79. print(nm.all_hosts())
    80. print(nm.csv())
    81. print(data)
    82. except Exception as e:
    83. print('error')
    84. if __name__ == '__main__':
    85. #zyum_check('www.xueersi.com')
    86. #cdn_check('www.xueersi.com')
    87. #ip_check('www.xueersi.com')
    88. check = sys.argv[1]
    89. url = sys.argv[2]
    90. if check=='-cdn':
    91. cdn_check(url)
    92. elif check=='-zym':
    93. zyum_check(url)
    94. elif check=='-ip':
    95. ip_check(url)
    96. elif check=='-port':
    97. duankou_check(url)
    98. else:
    99. zyum_check(url)
    100. cdn_check(url)
    101. ip_check(url)
    102. duankou_check(url)
    103. #nmapscan()

    那么针对nmap内网探针存活的主机,那么内网中的主机,可能不存在python的解析环境。所以需要将我们的脚本打包生成可执行文件,例如windows中的exe文件。

    需要安装pyinstaller,通过pip install pyinstaller,先安装。

    之后就可以直接使用pytinstaller -F 脚本文件名。那么便会直接在C:\Users\用户\dist下面生成对应的可执行文件,通过cmd便可以直接执行该文件。

    我这里没有开虚拟机,所以内网中没有主机存活。 

  • 相关阅读:
    带权并查集(poj-1182 食物链)
    计算一个区间时间差值,时间保留剩下的差值
    2023老博会|山东老龄产业展|老年用品展|适老度假与旅游展
    图解算法数据结构-LeetBook-栈和队列04_望远镜中最高的海拔_滑动窗口
    大数据生态中的 RocketMQ 5.0
    避免使用违规词,企业新媒体营销应注重品牌形象维护
    【U8+】用友U8+客户端登录账套的时候, 提示: 已成功与服务器建立连接,但是在登录过程中发生错误; 指定的网络名不再可用。
    基于springboot+vue网上图书商城54
    机器学习:人工智能的子领域之一
    go演示GRPC的用法
  • 原文地址:https://blog.csdn.net/weixin_44770698/article/details/126324376