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。
1
arp-scan -l

屏幕截图 2026\-01\-18 173943\.png

端口扫描

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

屏幕截图 2026\-01\-18 174025\.png

漏洞扫描

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

image\.png

Web漏洞

Nano CMS框架远程代码执行

  • 我们尝试访问目标IP地址80端口的页面,通过浏览不同页面,发现网站的Blog模块使用的是NanoCMS

image\.png

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

image\.png

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

  • 还收集到一个比较关键的信息,是一个看起来比较敏感的路径**/data/pagesdata.txt**。

image\.png

  • 尝试访问一下这个路径。
1
http://192.168.11.130/~andy/data/pagesdata.txt

image\.png

  • 可以看到账号和密码但是被hash加密了"username";s:5:"admin";s:8:"password";s:32:"9d2f75377ac0ab991d40c91fd27e52fd"。

  • 使用插件发现可是是通过MD5加密得到的密文。

image\.png

  • 通过工具解密顺利得到明文。

image\.png

  • 使用账号密码发现登陆成功。

image\.png

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

image\.png

image\.png

  • 直接打开我们刚刚上传的shell文件。

image\.png

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

image\.png

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

  • 在 kali 上开启监听后触发该脚本,发现监听成功。

1
nc -lvnp 4444

image\.png

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

image\.png

/list 目录下的 SQL 注入

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

image\.png

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

image\.png

/~andy/data/nanoadmin.php?action=addpage 目录下的存储型 XSS

  • 之前利用了这个页面上传反弹Shell,其实这个页面还存在存储型XSS。

image\.png

image\.png

  • 可以发现只有Page Title框存在存储型XSS。

Phake Organization Event Manager页面的远程代码执行

  • 之前我们通过SQL注入已经实现了拖库,现在我们直接把用户信息梭哈出来。
1
sqlmap -r sql -D drupal -T users -dump

image\.png

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

image\.png

  • 在create content-page里可以发现上传格式可以选择PHP格式,所以感觉这里远程代码执行。

内网渗透(提权)

  • 查看当前用户和版本内核,发现内核版本较低,但我们只是一个权限很低的用户。
1
uname -a
1
whoami

image\.png

image\.png

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

1
cat /etc/passwd

image\.png

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

image\.png

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

image\.png

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

image\.png

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

image\.png

总结与修复建议

根因

  1. /data/pagesdata.txt 可被直接访问,且其中以 MD5(无盐)保存后台账号口令;
  2. 后台”新建页面”功能允许写入任意 PHP 代码,等于把代码执行权交给了后台用户;
  3. mailing list 处查询字符串拼接,存在 SQL 注入;
  4. 系统内存在明文记录 root 口令的笔记文件,且普通用户可读。

修复

  • 禁止直接访问数据目录(data/ 应放在 Web 根目录之外),并对数据/上传目录关闭脚本解析;
  • 口令存储改为 bcrypt / PBKDF2 等带盐慢哈希;
  • 后台写入的内容必须在服务端做白名单与转义,禁止写入可执行代码;
  • SQL 全部参数化;
  • 禁止在服务器上明文保存凭据,敏感文件权限最小化。