CTF5 靶场渗透测试报告(NanoCMS 从信息泄露到 Getshell)
本文为自建靶场环境(Kali 192.168.11.128 → 靶机 192.168.11.130)的练习记录,非真实业务系统。
执行摘要:目标开放 22/25/80/110/111/139/143/445/901/3306。入口是 80 端口的 NanoCMS:/data/pagesdata.txt 可直接访问,泄露后台账号哈希(MD5 无盐),解密后登录后台;后台”新建页面”功能可写入 PHP 代码,落点为一句话木马 → 反弹 shell。另在 mailing list 处存在 SQL 注入,可拖库;提权通过 /home 下的笔记文件拿到 root 口令。
结论:完整链路是”敏感文件泄露 → 后台接管 → Getshell → 提权”。入口不是漏洞利用而是信息泄露,这类问题恰恰最容易被扫描器漏掉。
信息收集
主机探测
- 使用
arp-scan -l发现目标靶机的IP地址是192.168.11.130。

端口扫描
- 使用
nmap 192.168.11.130发现目标靶机开启了:22,25,80,110,111,139,143,445,901,3306端口。

漏洞扫描
- 尝试使用nmap扫描一下我们刚刚找到的开放端口,发现80端口下的内容是比较多的,开放了很多页面,还有sql注入等漏洞,这里或许是我们的一个突破口。
1
| `nmap` --script=vuln -p22,25,80,110,111,139,143,445,901,3306 192.168.11.130
|

Web漏洞
Nano CMS框架远程代码执行
- 我们尝试访问目标IP地址80端口的页面,通过浏览不同页面,发现网站的Blog模块使用的是NanoCMS

- 这里我们先通过
searchsploit nanocms搜索一下是否有现成的可以利用的漏洞。

发现真的是存在一个远程代码执行,但是在当前页面下,我们貌似没有找到可以植入我们远程代码的地方,通过上网搜集资料发现Nano CMS是一个基于PHP的内容管理系统 (CMS)。“ Nano CMS是您所能找到的最小的CMS。用户界面和功能非常非常简单和非常容易使用。Nano CMS的核心功能是基于文件并且可以执行 根本不使用任何数据库,这使得安装起来超级容易只是提取就可以了。
还收集到一个比较关键的信息,是一个看起来比较敏感的路径**/data/pagesdata.txt**。

1
| http://192.168.11.130/~andy/data/pagesdata.txt
|




- 浏览页面发现在后台可以新建页面选项卡,在这里我们可以自己写入代码,尝试写入木马,直接创建一个一句话木马,直接创建成功。



- 我们尝试用Antsword连一下,发现直接连接成功了。

接着需要一个反向连接拿回交互式 shell。用的是公开的 PHP 反弹脚本,本地只需改两处:$yourip 改为攻击机 IP、$yourport 改为监听端口(本次 192.168.11.128:4444)。思路三步:① 脚本落地到可访问目录 ② 触发后由目标主动连回 ③ 攻击机用 nc 监听接收。完整脚本不在此贴出,避免被当作可直接复用的武器化代码。
在 kali 上开启监听后触发该脚本,发现监听成功。

- 目前的反弹shell不是交互式的,我们需要生成一个交互式的Bash Shell。
1
| python -c 'import pty; pty.spawn("/bin/bash")'
|

/list 目录下的 SQL 注入
- 在80端口的Home我们可以发现一个
mailing list字样,点进去发现有一个向Phake组织注册的功能,感觉这里可能存在SQL注入。

- 使用
'发现四个框都会出现数据库报错,这里我们直接使用BP抓包,再利用sqlmap梭哈,可以看到有很多注入点,并且拿到了数据库名称。

/~andy/data/nanoadmin.php?action=addpage 目录下的存储型 XSS
- 之前利用了这个页面上传反弹Shell,其实这个页面还存在存储型XSS。


- 可以发现只有Page Title框存在存储型XSS。
Phake Organization Event Manager页面的远程代码执行
- 之前我们通过SQL注入已经实现了拖库,现在我们直接把用户信息梭哈出来。
1
| sqlmap -r sql -D drupal -T users -dump
|

- 可以看到我们得到了几个用户的信息,这里我们选择一个
patrick用户他的密码是password,我们直接尝试登录,发现登陆成功。

- 在
create content-page里可以发现上传格式可以选择PHP格式,所以感觉这里远程代码执行。
内网渗透(提权)
- 查看当前用户和版本内核,发现内核版本较低,但我们只是一个权限很低的用户。


目前没有好的办法进行提权,我们先访问以下/etc/passwd文件看看可不可以找到相关的线索。(也尝试访问了/etc/shadow发现没有权限)

- 发现目标主机中有很多的bash用户,所有有没有可能会有用户把root密码记录在某个文档中,我们用grep命令递归寻找一下home下所有含有pass字样的文档,并且过滤掉错误的输出。
1
| grep -R -i pass /home/* 2>/dev/null
|

- 这里我们发现一个带有
Root passwd字样的文件。

- 我们直接
cat一下,发现了一个50$cent字样很可疑,极有可能就是root用户的密码。
1
| cat /home/patrick/.tombpy/481bca0d-7206-45dd-a459-a72ea1131329.note
|

- 我们直接尝试登录root用户,发现成功登录,权限也是最高的。

总结与修复建议
根因
/data/pagesdata.txt 可被直接访问,且其中以 MD5(无盐)保存后台账号口令;
- 后台”新建页面”功能允许写入任意 PHP 代码,等于把代码执行权交给了后台用户;
- mailing list 处查询字符串拼接,存在 SQL 注入;
- 系统内存在明文记录 root 口令的笔记文件,且普通用户可读。
修复
- 禁止直接访问数据目录(
data/ 应放在 Web 根目录之外),并对数据/上传目录关闭脚本解析;
- 口令存储改为 bcrypt / PBKDF2 等带盐慢哈希;
- 后台写入的内容必须在服务端做白名单与转义,禁止写入可执行代码;
- SQL 全部参数化;
- 禁止在服务器上明文保存凭据,敏感文件权限最小化。
CTF5 靶场渗透测试报告(NanoCMS 从信息泄露到 Getshell)