GoldenEye Writeup
CTF LIKE就很扯,少打
——鲁迅
0x01 信息搜集
1 | |
Host is up (0.00049s latency).
Not shown: 65531 closed ports
PORT STATE SERVICE VERSION
25/tcp open smtp Postfix smtpd
|_smtp-commands: ubuntu, PIPELINING, SIZE 10240000, VRFY, ETRN, STARTTLS, ENHANCEDSTATUSCODES, 8BITMIME, DSN,
|_ssl-date: TLS randomness does not represent time
80/tcp open http Apache httpd 2.4.7 ((Ubuntu))
|_http-server-header: Apache/2.4.7 (Ubuntu)
|_http-title: GoldenEye Primary Admin Server
55006/tcp open ssl/unknown
|_ssl-date: TLS randomness does not represent time
55007/tcp open pop3 Dovecot pop3d
|_pop3-capabilities: CAPA RESP-CODES TOP AUTH-RESP-CODE UIDL STLS USER SASL(PLAIN) PIPELINING
|_ssl-date: TLS randomness does not represent time
MAC Address: 00:0C:29:3F:27:D6 (VMware)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hopTRACEROUTE
HOP RTT ADDRESS
1 0.49 ms bogon (192.168.206.150)
- 能够看到开启4个端口,80(http)、25(smtp)、55007(pop3)、55006(ssl)
- 浏览器访问一下80端口

按照提示,让我们访问一下/sev-home/去登录

bp抓包分析后,发现传出参数是username:password的base64编码,可以爆破一波
- smtp 25端口
直接尝试nc连接,居然可以连接上

看一下支持的命令

SMTP枚举三把梭:
- msf
- nmap
- smtp-user-enum
果然,msf还是最强那把梭,另外两把都没有扫出来东西

手工测试出来root也在范围之内,上面没有显示
下一步怎么走?
枚举用户
- 结合之前的登录信息,再用来爆破Authentication密码
- 这里选用的密码表是john的

单线程py居然跑瘫了机子,SMTP无果
- POP3 55007端口
依旧采用nc连接,端口55007

使用CAPA命令查看server支持的操作,尝试手工测试,msf同步进行登录测试(太慢)

没有得到可用用户名和密码,登录失败,我这里猜测在pop server的某个账户中会隐藏重要信息
0x02 漏洞挖掘与利用
CTF LIKE就是这么trick,不真实。翻看js源码,有一句叮嘱,出现用户名和密码,unicode转换到ascii,Boris首字母改小写
账密:boris:InvincibleHack3r

顺利进入

GoldenEye的第二句话有重要信息
Please email a qualified GNO supervisor to receive the online GoldenEye Operators Training to become an Administrator of the GoldenEye system
我们需要发送一封email给主管来称为GoldenEye的管理员,那么下一步需要考虑如何利用SMTP和POP3,先尝试了用这个账密登录POP3,失败!
重新理一下资料
1 | |
发送邮件动作可以完成,但是接收没有下文,POP3 msf爆破过慢,采用我们拿到的SMTP的用户名和boris用hydra或者medusa进行爆破
用户名文件user.txt

wordlist采用比较短的fasktrack.txt

hydra使用命令
1 | |
不到5分钟,爆破成功!

netcat登录pop3,输入账密boris : secret1!

使用list命令,发现存在3封邮件,使用retr 数字依次阅读
第三封邮件有点东西

1 | |
Xenia是个可疑的名称
Attached就是最终密码?还是附件的意思?
如果是附件的话,我们用python获取一波附件(这里也可以直接用邮件软件查看,配置好pop3和smtp服务)

啥也没找到,思路陷入僵局,求助walkthrough
- 看到信件中的用户名,可以继续想到爆破,我们对root和natalya进行进一步爆破

拿到natalya的账密,root爆破无果
natalya : bird

第二封信件中拿到xenia账密
xenia : RCP90rulez!
同时得到新的路径信息,severnaya-station.com/gnocertdir,不过需要修改dns文件,对应上服务器的ip

windows改C:\Windows\System32\drivers\etc\hosts,Linux改/etc/hosts
成功进入

输入账密,登录xenia

看下web指纹

Moodle系统,YUI库,PHP,Apache,Ubuntu
Google一下Moodle,存在的漏洞有XSS、RCE、SSRF、SQL注入等等,之后进一步翻翻searchexploit
- 第一次接触moodle系统,里面的信息量很大,先到处翻一翻
发现Message处存在交流信息

用户名是doak,继续尝试爆破

成功爆破,获得新账密
doak : goat
二话不说,登入pop3 server

moodle新账密
dr_doak :4England!
登入moodle,发现一个文件,遂下载下来

又是一波提示

上文告诉我们doak博士抓到了admin的登录明文账密,但是他不能直接告诉我们,现在我们需要下载一张名叫for-007的图片,既然是CTF-LIKE,那么就需要开启应对misc套路的狗招了
图片分析,先用notepad打开看看,发现没有啥信息;然后属性打开,发现标题存在base64编码

解码,得到xWinter1995x!,推测是密码

kali中使用exif和binwalk查看(没有可提取物)

现在的可疑用户名:for James,ForJames,forjames,James,james,admin, adm1n,大小写可能有差异,于是python构造好用户名fuzz,bp爆破
账密为admin : xWinter1995x!,登录之

后面经过一番查找和exp的直接利用,发现都存在问题,再次学习前辈walkthrough
- moodle学习管理系统存在远程代码执行漏洞,此次可以通过
Site administration -> Server -> System paths中修改Path to aspell为python反弹shell代码,当在富文本编辑器中点击拼写检查时就会触发这段代码
1 | |

漏洞具体解释如下

- 可是当我操作的时候,发现点击拼写检测并不能触发


- 这继续陷入思考,当点击时代码未被触发,先想到是某些配置没有开启,但是自己对系统也不熟,必定要google一番
想到的搜索关键词
moodle spell checker can't work,how to make spell checker work in moodle,how to use moodle spell checker,how to pentest with moodle spell checker,exploit moodle with spell checker
逐一检查之后并没有结果,于是仔细回看反弹shell代码处是否写错或者漏掉重要信息
- 代码没有写错,但是发现之前漏掉了重要信息aspell,我们安装了吗?

结合之前做DC-1的经验,于是去侧边栏的Site administration -> Server -> Plugin查看下是否安装该插件,发现在Overview中没有aspell插件信息,可是也没有提供直接安装的接口或者点击按钮

继续google搜集信息

看一下如何在HTML编辑器中安装spell checker,得知aspell是一款GNU的拼写检测器,可是安装需要在服务器内部用apt-get进行,所以可以肯定这条路到底了,往回返看看别的路!

下面这条信息点醒了我,我们并不需要真正去安装spell checker,因为刚才的编辑器是富文本类型,可能很多插件已经集成到上面了。这么考虑,下一步就要将moodle中TinyMCE editor等富文本编辑器信息搜集。

把刚才google出来的所有编辑器信息先看一遍,发现了有趣的东西,可谓字字珠玑

moodle已经不支持Google Spell,可是moodle默认又是Google Spell,所以我们的aspell点击不会成功。这里又说明了,只要能够看见aspell的system path,就说明aspell已经安装。下面就只需要按照提示完成spell engine的修改,路径是Administration > Site administration > Plugins > Text editors > TinyMCE HTML editor > Check spelling
- 把默认的spell engine从Google Spell替换为PSpellShell

保存后,kali上设置好nc监听,找个富文本编辑器点击检查,getshell

0x03 提权&get flag
继续搜集信息,查看当前用户权限,系统版本

发现能用python,升完交互shell后,kali上searchexploit找提权exp

就采用第一个overlaf,本地gcc编译一波,本地python开启http server下面就想办法将其传到靶机上

继续在靶机上测试发现能使用wget,遂下载overlaf二进制文件,为其修改权限后执行,成功提权
这里有点互相trick的感觉,我把靶机的gcc缺失问题给屏蔽掉了,一般来说需要从靶机wget到exp再本机编译,然后才会遇到没有gcc的问题,再改掉exp内部的编译命令,将gcc改成cc或者clang

下到/root/看flag

拿到flag,访问/006-final/xvf7-flag/

0x04 总结
- 真实场景下也会有程序员把重要信息遗留在js等静态文件中,思路要放开
- 反反复复信息搜集,爆破也是必要的,别操之过急
- exp需要时可做适当修改
0x0N 参考资料
SMTP
Penetration Testing an SMTP Server
POP
Walkthrough
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!