声明:
请勿用于非法入侵,仅供学习。传送门 -》中华人民共和国网络安全法
文章目录
- 声明:
- 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
还有没有别的执行命令的函数哈,如果有,童鞋们的拦截规则可多添加几个)