** 此后如竟没有炬火,我便是唯一的光。**
Python学习的意义
- 学习相关安全工具的原理;
- 掌握自定义工具以及拓展开发;
- 解决实战中无工具或手工麻烦批量化等情况;
- 在二次开发Bypass,日常任务,批量测试利用等方面均有帮助;例如SRC批量收集并利用,AWD批量利用获取FLAG,CTF加解密脚本等;
涉及相关技术
- Socket部分技术
- 进程命令执行
- 交互参数执行
- NMAP工具模块使用
- 异常处理
案例一:IP&Whois&系统指纹获取代码段-外网
查询IP
功能:例如输入域名www.xxx.com;返回解析的IP
原理:利用Python中的socket模块的gethostbyname函数能够实现解析域名 IP 地址的功能
def ip_check(url):
IP = socket.gethostbyname(url)
print(IP)
#return IP
输入某一个域名,解析的结果如下:
whois查询
功能:输入目标地址,能够查询目标的whois信息
原理:Python的whois模块的whois函数能够获取目标的whois信息;需要导入python-whois模块
import whois
#该段代码是小迪老师的代码,而在自己编写的时候需要使用的是whois.query(url),但是出现了错误
def whois_check(url):
data = whois.whois(url)
print(data)
案例二:CDN&子域名&端口扫描&交互代码段-外网
判断CDN
功能:输入目标地址,能够判断目标是否是CDN服务器
原理:Python通过os库的system函数调用执行系统的nslookup命令来解析目标地址,如果解析地址的IP地址过多,那么说明使用了CDN服务器。
def cdn_check(url):
ip_check(url)
commend = 'nslookup '+url
ip_CDN = os.popen(commend).read()
ip_count = ip_CDN.count('.')
if ip_count>9:
print('存在CDN,具体结果如下:')
print(ip_CDN)
else:
print('不存在CDN,具体结果如下:')
print(ip_CDN)
通过点号来判断是否存在CDN,本方法,其实可以使用正则,我还没学会。
子域名查询
实现功能,查询目标的子域名
原理:如输入 www.baidu.com;先正则去掉 www;然后加载字典,如内容为 aa;与处理后的 url 进行 拼接,即 aa.baidu.com;然后调用 socket 模块的 gethostbyname 函数来判断该域名是否能够 解析 IP,如果能说明该域名存在,不能则说明不存在。
方法有两种:
- 利用字典加载爆破进行查询
- 利用ping或者第三方接口进行查询
def zyum_check(url):
urls = url.replace('www','')
for zym_dic in open('D:\Python\CTF\Python_信息收集\dic.txt'):
zym_dic = zym_dic.replace('\n','')
para = zym_dic+urls
try:
ip = socket.gethostbyname(para)
print(para+'->'+ip)
time.sleep(0.1)
except Exception as e:
pass
端口扫描
实现功能 能跑判断对应端口是否开放
原理 Socket 模块的 socket 函数
方法:
- 原生态:自写socket协议tcp、udp扫描
- 调用第三方masscan、nmap模块等扫描(内网)
- 调用系统工具脚本执行
def duankou_check(url):
IP = ip_check(url)
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
port = {'20','21','22','25','23','80','443','135','110','8080','9080','9090','3389','8081','1521','1433','3306','139'}
for de_port in port:
result = server.connect_ex((IP,int(de_port)))
if result==0:
print(de_port+' is open')
else:
print(de_port+' is close')
案例三:Py格式解析环境与可执行程序格式转换-Pyinstaller
制作网上大佬的脚本工具,使用cmd+参数。例如sqlmap工具。
import socket
import os
import time
import whois
import sys
import nmap
#输入域名
#web_name = input()
#通过域名反查IP地址
def ip_check(url):
IP = socket.gethostbyname(url)
print(IP)
return IP
#识别目标域名是否采用了CDN
#通过nslookup来查看回显的结果是否存在两个及以上的IP地址
#利用python去执行系统命令
'''
共有四种方法:
1. os.system() //不能将结果的值取出,不能进行操作
2. os.popen() //返回的是一个对象,那么继续通过read便可以将对象中的内容读取出来
3. commands模块
4. subprocess模块
'''
'''
ip_CDN = os.system('nslookup www.xiaodi8.com')
print(ip_CDN)
'''
def cdn_check(url):
ip_check(url)
commend = 'nslookup '+url
ip_CDN = os.popen(commend).read()
ip_count = ip_CDN.count('.')
if ip_count>9:
print('存在CDN,具体结果如下:')
print(ip_CDN)
else:
print('不存在CDN,具体结果如下:')
print(ip_CDN)
'''
端口扫描
1. 原生态:自写socket协议tcp、udp扫描
2. 调用第三方masscan、nmap模块等扫描(内网)
3. 调用系统工具脚本执行
'''
def duankou_check(url):
IP = ip_check(url)
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
port = {'20','21','22','25','23','80','443','135','110','8080','9080','9090','3389','8081','1521','1433','3306','139'}
for de_port in port:
result = server.connect_ex((IP,int(de_port)))
if result==0:
print(de_port+' is open')
else:
print(de_port+' is close')
#whois反查
#通过第三方库进行查询或者是通过第三方接口进行查询
'''data_whois = whois.query(web_name)
print(data_whois)'''
#子域名查询
#1. 利用字典加载爆破进行查询
#2. 利用ping或者第三方接口进行查询
def zyum_check(url):
urls = url.replace('www','')
for zym_dic in open('D:\Python\CTF\Python_信息收集\dic.txt'):
zym_dic = zym_dic.replace('\n','')
para = zym_dic+urls
try:
ip = socket.gethostbyname(para)
print(para+'->'+ip)
time.sleep(0.1)
except Exception as e:
pass
#通过nmap进行内网存活主机的端口的探针
#关于nmap的出错,配置安装这方面的错误,可以借鉴这篇文章拿https://blog.csdn.net/mkmlmkmlmkml/article/details/116094552
def nmapscan():
nm = nmap.PortScanner()
try:
data = nm.scan(hosts='192.168.52.0/24',arguments='-T4 -F')
print(nm.all_hosts())
print(nm.csv())
print(data)
except Exception as e:
print('error')
if __name__ == '__main__':
#zyum_check('www.xueersi.com')
#cdn_check('www.xueersi.com')
#ip_check('www.xueersi.com')
check = sys.argv[1]
url = sys.argv[2]
if check=='-cdn':
cdn_check(url)
elif check=='-zym':
zyum_check(url)
elif check=='-ip':
ip_check(url)
elif check=='-port':
duankou_check(url)
else:
zyum_check(url)
cdn_check(url)
ip_check(url)
duankou_check(url)
#nmapscan()
那么针对nmap内网探针存活的主机,那么内网中的主机,可能不存在python的解析环境。所以需要将我们的脚本打包生成可执行文件,例如windows中的exe文件。
需要安装pyinstaller,通过pip install pyinstaller,先安装。
之后就可以直接使用pytinstaller -F 脚本文件名。那么便会直接在C:\Users\用户\dist下面生成对应的可执行文件,通过cmd便可以直接执行该文件。
我这里没有开虚拟机,所以内网中没有主机存活。
版权归原作者 YAy17 所有, 如有侵权,请联系我们删除。