pyLoad远程代码执行漏洞(CVE-2023-0297)复现以及原理流量特征分析

声明:

请勿用于非法入侵,仅供学习。传送门 -》中华人民共和国网络安全法

文章目录

  • 声明:
  • pyLoad介绍
  • 漏洞介绍
  • 影响版本
  • 不受影响版本
  • 漏洞原理
  • 漏洞环境搭建以及复现
  • 流量特征分析

pyLoad介绍

pyLoad是一个用 Python 编写的免费和开源下载管理器,可用于NAS、下一代路由器、无头家庭服务器以及任何能够连接到互联网并支持 Python 编程语言的设备。

漏洞介绍

pyLoad 存在代码注入漏洞,未经身份验证的攻击者可以通过滥用 js2py 功能执行任意 Python 代码。

影响版本

pyLoad <= 0.4.20
另外,小于0.5.0b3.dev31版本的pyLoad开发版本也受此漏洞影响。

不受影响版本

pyLoad > 0.4.20(正式版本尚未发布)
另外,官方已更新pyLoad安全开发版本0.5.0b3.dev31可供下载。

漏洞原理

这里直接给github链接,里面也有exp可进行利用
https://github.com/bAuh0lz/CVE-2023-0297_Pre-auth_RCE_in_pyLoad

此处通过request在前端页面处直接传值给jk
eval_js函数再将jk传入的值当成js代码来执行
也就是说此时我们可以执行任意js代码

pyLoad远程代码执行漏洞(CVE-2023-0297)复现以及原理流量特征分析_第1张图片
并且程序中默认开启了pyimport

pyimport声明:
最后,Js2Py还支持使用“pyimport”语句从JavaScript导入任何Python代码

pyLoad远程代码执行漏洞(CVE-2023-0297)复现以及原理流量特征分析_第2张图片
好的,到这里基本就差不多了,总结下原理:

1.直接在前端传值
2.传入内容为pyimport语句格式的字符串,然后赋值给上面的jk
3.jk中的pyimport语句字符串到下面被eval_js函数当成js代码执行了
4.此时字符串被js执行后,pyimport语句格式的字符串也就不再是字符串了,它就变成正常的js代码了,也就是说js会去加载执行pyimport
5.上面说了pyimport语句会将js代码导入python中执行
6.此时我们写入的恶意pyimport语句就会被带入python代码中执行

漏洞环境搭建以及复现

搭建环境的时候踩了很多坑,浪费了很多的时间

github上直接下载环境 https://github.com/pyload/pyload

可以进去下载历史版本进行搭建

因为我在搭建历史版本环境的时候总是报错,所以就没有使用历史版本。直接下载最新版本,然后将版本更新后的代码更改回去。

将程序放kali中,因为centospython的版本默认是2.7的,就懒得去弄了,直接放到kali
pyLoad远程代码执行漏洞(CVE-2023-0297)复现以及原理流量特征分析_第3张图片
此处是更新后修改的内容,进入src/pyload/core/utils/misc.py中进行修改

pyLoad远程代码执行漏洞(CVE-2023-0297)复现以及原理流量特征分析_第4张图片

到目录下执行
python3 setup.py build
python3 setup.py install
python3 setup.py build_locale
pyload
pyLoad远程代码执行漏洞(CVE-2023-0297)复现以及原理流量特征分析_第5张图片
启动服务后访问9666端口

pyLoad远程代码执行漏洞(CVE-2023-0297)复现以及原理流量特征分析_第6张图片

访问/flash/addcrypted2并用burp抓包,更改请求方式为POST

如果看懂了上面的漏洞原理分析,那么这个payload应该能秒懂

就是给jk参数传入pyimport语句,语句的内容为用os.system执行系统命令创建一个文件
到服务中eval_jsjk中的pyimport语句当js执行
pyimport变成js后继续执行,将后面的os.system当成python代码执行

pyLoad远程代码执行漏洞(CVE-2023-0297)复现以及原理流量特征分析_第7张图片
发送数据包后查看tmp目录,命令执行成功

pyLoad远程代码执行漏洞(CVE-2023-0297)复现以及原理流量特征分析_第8张图片

流量特征分析

通过wireshark抓取数据包分析
看数据包的时候发现,有的时候攻击的请求头是http协议有的时候是tcp协议,但返回包是http
就很不理解,问了下师傅,因该有可能是网络或者服务连接的问题

同样如果看懂了上面的漏洞原理分析,那特征也就很好提取了
1.请求方式为POST
2.url固定为/flash/addcrypted2
3.请求体中必须给jk传值,并且值必须含有pyimport
4.os.system执行命令
ps(我不知道python还有没有别的执行命令的函数哈,如果有,童鞋们的拦截规则可多添加几个)

pyLoad远程代码执行漏洞(CVE-2023-0297)复现以及原理流量特征分析_第9张图片

你可能感兴趣的:(漏洞复现,python,开发语言,安全,web安全)