漏洞挖掘过程中特殊情况下python基础库的使用
字数 1379 2025-08-23 18:31:18
Python基础库在受限环境下的漏洞挖掘技巧
前言
在渗透测试或漏洞挖掘过程中,经常会遇到可以在线运行代码但权限受限的平台。这些平台通常会对高危操作(如直接执行系统命令)进行限制。本文将详细介绍如何利用Python基础库在受限环境下实现文件读取、目录遍历、内网探测等操作,从而绕过限制进行漏洞挖掘。
文件读取技术
基本文件读取
在受限环境中,直接调用系统命令可能被禁止,但文件操作通常是被允许的。可以使用Python内置的open()函数读取系统文件:
file = open('/etc/passwd', 'r')
try:
text = file.read()
print(text)
finally:
file.close()
这段代码可以成功读取/etc/passwd文件内容,获取系统用户信息。
安全注意事项
- 使用
try-finally确保文件句柄被正确关闭 - 考虑使用
with语句简化代码并自动处理文件关闭
with open('/etc/passwd', 'r') as file:
print(file.read())
目录遍历技术
使用os.listdir()
要读取其他文件,首先需要知道目录结构。可以使用os.listdir()函数列出目录内容:
import os
def file_name_listdir(file_dir):
for files in os.listdir(file_dir):
print("files", files)
file_name_listdir("/")
功能说明
- 可以列出指定目录下的所有文件和子目录
- 适用于递归遍历整个文件系统
- 可以配合文件读取功能获取敏感文件内容
内网探测技术
端口扫描实现
在受限环境中,虽然不能直接执行系统命令,但可以使用Python的socket库进行网络探测:
import socket
import ipaddress
def scan_port(host, port, timeout=1):
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.settimeout(timeout)
try:
client_socket.connect((host, port))
print(f"Port {port} is open on {host}")
return True
except socket.timeout:
return False
except socket.error:
print(f"Port {port} on {host} is closed")
return True
finally:
client_socket.close()
def port_scanner(target_network, target_ports, timeout=1):
for ip in ipaddress.IPv4Network(target_network, strict=False):
current_ip = str(ip)
for port in target_ports:
if not scan_port(current_ip, port, timeout):
break
if __name__ == "__main__":
target_network = "192.168.0.1/24"
target_ports = range(1, 2)
port_scanner(target_network, target_ports)
技术要点
-
主机存活探测:
- 通过尝试连接TCP端口判断主机是否存活
- 即使端口关闭也说明主机存活(返回True)
- 只有超时才认为主机不存活(返回False)
-
网络扫描优化:
- 使用
ipaddress模块处理IP范围 - 设置合理的超时时间提高扫描效率
- 遇到超时立即跳过当前IP
- 使用
-
端口扫描:
- 可以指定任意端口范围
- 支持批量扫描整个网段
HTTP/HTTPS请求构造
基本HTTP请求
通过socket可以构造原始的HTTP请求:
import socket
def send_http_request():
server_address = ('192.168.0.1', 80)
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
client_socket.connect(server_address)
request_data = "GET / HTTP/1.1\r\nHost: 192.168.0.1\r\n\r\n"
client_socket.sendall(request_data.encode())
response_data = client_socket.recv(1024)
print("Response from server:\n", response_data.decode())
except Exception as e:
print(f"Error: {e}")
finally:
client_socket.close()
HTTPS请求实现
使用ssl模块可以建立加密连接:
import socket
import ssl
def send_https_request():
server_address = ('192.168.0.1', 443)
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
client_socket.connect(server_address)
ssl_socket = ssl.wrap_socket(client_socket, ssl_version=ssl.PROTOCOL_TLS)
request_data = "GET / HTTP/1.1\r\nHost: 192.168.0.1\r\n\r\n"
ssl_socket.sendall(request_data.encode())
response_data = ssl_socket.recv(1024)
print("Response from server:\n", response_data.decode())
except Exception as e:
print(f"Error: {e}")
finally:
client_socket.close()
请求构造技巧
-
请求头构造:
- 必须包含
Host头部 - 每行以
\r\n结束 - 请求结束需要额外的
\r\n
- 必须包含
-
响应处理:
- 可以分多次接收大响应
- 解码响应内容时注意字符编码
-
扩展功能:
- 可以构造POST请求提交数据
- 可以设置自定义请求头
- 可以处理Cookie和Session
综合应用场景
内网渗透流程
-
信息收集:
- 读取系统配置文件
- 列出目录结构寻找敏感文件
-
内网探测:
- 扫描内网存活主机
- 识别开放服务端口
-
服务利用:
- 对发现的服务构造特定请求
- 尝试利用已知漏洞
-
横向移动:
- 获取凭证后尝试其他主机
- 通过中间件进一步渗透
防御规避技巧
-
降低检测率:
- 增加操作间隔时间
- 限制扫描范围和速度
- 使用随机化参数
-
权限维持:
- 写入计划任务或启动项
- 创建隐藏用户或后门
-
数据外传:
- 使用DNS或ICMP隧道
- 分块传输敏感数据
防御建议
-
沙箱限制:
- 限制Python可用模块
- 监控文件系统操作
- 阻止原始套接字创建
-
网络防护:
- 实施严格的网络隔离
- 监控异常内网连接
- 限制出站连接
-
日志审计:
- 记录所有代码执行行为
- 分析异常文件访问模式
- 监控端口扫描行为
总结
在受限环境中,通过巧妙利用Python基础库可以实现:
- 文件系统操作(读取、遍历)
- 网络探测(主机发现、端口扫描)
- 服务交互(HTTP/HTTPS请求)
这些技术组合使用可以绕过许多安全限制,进行有效的漏洞挖掘和内网渗透。防御方需要采取多层次的安全措施来防范此类攻击。