声明:
请勿用于非法入侵,仅供学习。传送门 -》中华人民共和国网络安全法
文章目录
- 声明:
- 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代码

并且程序中默认开启了pyimport
pyimport声明:
最后,Js2Py还支持使用“pyimport”语句从JavaScript导入任何Python代码

好的,到这里基本就差不多了,总结下原理:
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中,因为centos中python的版本默认是2.7的,就懒得去弄了,直接放到kali中

此处是更新后修改的内容,进入src/pyload/core/utils/misc.py中进行修改

到目录下执行
python3 setup.py build
python3 setup.py install
python3 setup.py build_locale
pyload

启动服务后访问9666端口

访问/flash/addcrypted2并用burp抓包,更改请求方式为POST
如果看懂了上面的漏洞原理分析,那么这个payload应该能秒懂
就是给jk参数传入pyimport语句,语句的内容为用os.system执行系统命令创建一个文件
到服务中eval_js将jk中的pyimport语句当js执行
pyimport变成js后继续执行,将后面的os.system当成python代码执行

发送数据包后查看tmp目录,命令执行成功

流量特征分析
通过wireshark抓取数据包分析
看数据包的时候发现,有的时候攻击的请求头是http协议有的时候是tcp协议,但返回包是http的
就很不理解,问了下师傅,因该有可能是网络或者服务连接的问题
同样如果看懂了上面的漏洞原理分析,那特征也就很好提取了
1.请求方式为POST
2.url固定为/flash/addcrypted2
3.请求体中必须给jk传值,并且值必须含有pyimport
4.os.system执行命令
ps(我不知道python还有没有别的执行命令的函数哈,如果有,童鞋们的拦截规则可多添加几个)




















