渗透测试中隐匿痕迹的一些方法
sinye56 2024-11-23 22:11 1 浏览 0 评论
渗透的过程中、渗透成功后的操作都会产生很多痕迹。我们在有条件的情况下,需要将这些痕迹清理掉,避免管理员通过痕迹找到我们,或者说是为了为下一步的渗透测试拖延时间。
我们都应该明白所有的痕迹清理都不是绝对的,只要和计算机有接触就一定会有痕迹。就算你能在目标主机清理很干净,但是对方也有可能使用了第三方的日志记录功能,这样基本就做不到完全清理。
Windows日志
windows日志记录的基本机制:
1.svchost.exe(通过svchost.exe中的某些专门用于记录日志的线程启动日志记录功能)
2.内存堆(记录到的操作会先缓存为一段内存内容)
3.xml(将内存内容通过wevtutil.exe解析为xml文件格式的文档)
4.日志(将xml文件转换为可读的日志)
日志的基本结构包括:时间、地点、用户、操作。
计算机→右键管理→系统工具→事件查看器
在右侧的操作选项中有清理日志的按钮。
但是清除日志这个操作还是会生成一条对应的日志,所以无法做到完全的日志清理。不过清不清理这最后一条日志其实没什么区别,管理员真的有心检查日志,看到一段时间以前的日志没有了,肯定会想到有问题的。
我看有网友分享这个工具:https://github.com/QAX-A-Team/EventCleaner
可以将记录日志的线程挂起,再恢复,相对直接删除所有日志,更隐蔽一些。
在dos界面使用命令:
EventCleaner suspend 暂停日志线程,停止日志记录
EventCleaner normal 恢复日志线程
EventCleaner 100 删除 event record id 为 100 的日志
针对Windows日志,还有一种伪造日志的操作:
eventcreate -l system -so administrator -t warning -d "this is a test" -id 500
但是在最新的Windows10系统中可能会有一些权限问题,最好用system账号去伪造日志。
Windows远程连接记录
如果你用这个机器作为跳板机连接过内网的其他机器,就会有3389连接记录,这个一般保存在这个位置:
可以直接右键删除,也可以在cmd的dos界面通过del命令删除。
Windows文件更新时间
文件信息中都有一个修改日期,我们可以通过脚本修改这个时间:
Function edit_time($path){$date1 =Get-ChildItem |
Select LastWriteTime|Get-Random;$date2 =Get-ChildItem |
Select LastWriteTime|Get-Random;$date3 =Get-ChildItem |
Select LastWriteTime|Get-Random;$(Get-Item $path).lastaccesstime=$date1.LastWriteTime;
$(Get-Item $path).creationtime=$date2.LastWriteTime ;
$(Get-Item $path).lastwritetime=$date3.LastWriteTime};
edit_time("D:\youdao")
可以写成脚本文件执行,也可以直接在dos打开powershell进行执行:
Windows新建账号
如果你在目标系统新建了账号,但是又不想让这个账号在登录界面中进行显示,可以修改注册表:
"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinLogon\SpecialAccounts\UserList" /v uname /T REG_DWORD /D 0
这种修改方式只影响登录界面中现实的账户,不会影响用户管理界面的账户信息。所以在没有强烈需要的情况下,不建议在目标系统新建账户。
windows痕迹清理总结
如果单条指定删除可以达到痕迹清理的效果,优先考虑这种清理方式。
传统的删除文件在短时间内被复原的机会很大,我们在操作删除文件的时候尽可能使用覆写的方式减少被复原的机会。这个就涉及到磁盘文件删除的原理了,这里不展开,简单讲就是删除一个文件,在磁盘上只是将删除标记改了一下,无法再被感知到了而已。但是在这块磁盘区域被重新写入新东西前,其实都是可以通过技术手段还原的。
在某些特定的场景下伪造痕迹也是我们提高自己隐蔽性的一种可靠的方法。
在实战中关闭进程记录看似很有用,但是在有经验的安全人员眼中完全就是暴露自己整个攻击时间的弱点,删除自己需要的记录才是最实用的
端口转发、内网穿透等知识点其实在实战中就是一种网络连接痕迹隐藏的一种方式
Linux隐藏远程SSH登录记录
隐身登录系统,不会被w、last等指令检测到。
ssh -T 账户名@目标机器ip /bin/bash -i
-T表示不分配伪终端,/usr/bin/bash 表示在登录后调用bash命令 -i 表示是交互式shell
w和last命令日志/var/log/wtmp 是utmp和wtmp的日志接口产生的,而这俩接口是正常登录分配伪终端之后才调用的,前面这个ssh命令表示登陆后调用bash命令。不是一个完整的会话,类似执行一个临时命令,系统不会分配伪终端。
Linux清除当前的history记录
如果我们不希望命令被记录,在退出会话前直接执行:
# 清除当前会话的命令历史记录
history -c
这里提的history记录其实是bash环境的history,如果你的目标主机系统默认是bash环境,那就可以使用-c清理记录,如果像kali一样默认是zsh环境,就无法通过-c清理。
Linux隐藏Vim的操作记录
当我们使用 vim时候,会在~/.viminfo留下记录:
建议使用vi,或者在vim中使用命令关闭记录:
:set history=0 :!command
但是我在kali和centos7中尝试,都没有起到作用。所以还是多使用vi吧。
Linux隐藏文件修改时间
管理员有时候会通过修改时间来判断可疑文件,我们可以把我们的后门文件的修改时间设置成几天之前的。
# 使B文件时间变得和A文件相同
touch -r A B
但是熟练一点的管理员一般都会使用stat或者find检查文件,很容易看出时间被修改的情况。
最近访问(Access):表示我们最后一次访问(仅仅是访问,没有改动)文件的时间
最近更改(Modify):表示我们最后一次修改文件的时间
最近改动(Change):表示我们最后一次对文件属性改变的时间,包括权限,大小,属性等等
创建时间(Birth):文件创建时间
可以看到几个时间之间有矛盾的地方,修改文件的时间早于文件创建时间了。
想绕过stat检测,也比较简单,将系统时间改一下,然后再执行touch命令,之后再将系统时间改回来,就不会让文件的四个时间有矛盾了。
# 查找当前目录下24小时内被创建的文件
find ./ -ctime 0 -name "*"
就算修改了时间,但是还是被搜索出来了。我暂时没什么修改文件创建时间的方法,如果有同学知道什么方式修改创建时间,请分享给我。
Linux清除系统日志痕迹
Linux 系统存在多种日志文件,来记录系统运行过程中产生的日志。
# 正常情况下至少有这些日志
/var/log/btmp 记录所有登录失败信息,使用lastb命令查看
/var/log/lastlog 记录所有用户最后一次登录时间的日志,使用lastlog命令查看
/var/log/wtmp 记录所有用户的登录、注销信息,使用last命令查看
/var/log/utmp 记录当前已经登录的用户信息,使用w,who,users等命令查看
/var/log/secure 记录与安全相关的日志信息
/var/log/message 记录系统启动后的信息和错误日志
直接覆盖日志文件的方法:
echo > /var/log/btmp
cat /dev/null > /var/log/lastlog
>指向哪个日志文件,就覆盖这个日志文件。两种方式任意一种都可以。
删除所有匹配到字符串的行,比如以当天日期或者自己的登录ip:
sed -i '/自己的ip/'d /var/log/messages
全局替换登录IP地址:
sed -i 's/192.168.166.85/192.168.1.1/g' /var/log/secure
如果你是通过某个应用的漏洞进入的目标主机,离开之前最好去清理一下这个应用的日志,可以是全部删除,也可以单独清理会包含自己信息的日志。当然清理这种日志,首先要知道这个应用日志存在哪里,这个一般在配置文件里可以找到。
我们在删除一些重要文件的时候,不要单纯地用rm命令,应该使用shred命令,这个命令能安全地从硬盘上擦除数据,默认覆盖3次,通过-n指定数据覆盖次数:
shred -f -u -z -v -n 8 filename
或者使用wipe,这个命令会使用特殊的模式来重复地写文件,从磁性介质中安全擦除文件:
wipe filename
相关推荐
- Linux在线安装JDK1.8
-
首先在服务器pingwww.baidu.com查看是否可以连网然后就可以在线下载一、下载安装JDK1.81、在下载安装的同时做好一些准备工作...
- Linux安装JDK,超详细
-
1、了解RPMRPM是Red-HatPackageManager(RPM软件包管理器)的缩写,这一文件格式名称虽然打上了RedHat的标志,但是其原始设计理念是开放式的,现在包括OpenLinux...
- Linux安装jdk1.8(超级详细)
-
前言最近刚购买了一台阿里云的服务器准备要搭建一个网站,正好将网站的一个完整搭建过程分享给大家!#一、下载jdk1.8首先我们需要去下载linux版本的jdk1.8安装包,我们有两种方式去下载安装...
- Linux系统安装JDK教程
-
下载jdk-8u151-linux-x64.tar.gz下载地址:https://www.oracle.com/technetwork/java/javase/downloads/index.ht...
- 干货|JDK下载安装与环境变量配置图文教程「超详细」
-
1.JDK介绍1.1什么是JDK?SUN公司提供了一套Java开发环境,简称JDK(JavaDevelopmentKit),它是整个Java的核心,其中包括Java编译器、Java运行工具、Jav...
- Linux下安装jdk1.8
-
一、安装环境操作系统:CentOSLinuxrelease7.6.1810(Core)JDK版本:1.8二、安装步骤1.下载安装包...
- Linux上安装JDK
-
以CentOS为例。检查是否已安装过jdk。yumlist--installed|grepjdk或者...
- Linux系统的一些常用目录以及介绍
-
根目录(/):“/”目录也称为根目录,位于Linux文件系统目录结构的顶层。在很多系统中,“/”目录是系统中的唯一分区。如果还有其他分区,必须挂载到“/”目录下某个位置。整个目录结构呈树形结构,因此也...
- Linux系统目录结构
-
一、系统目录结构几乎所有的计算机操作系统都是使用目录结构组织文件。具体来说就是在一个目录中存放子目录和文件,而在子目录中又会进一步存放子目录和文件,以此类推形成一个树状的文件结构,由于其结构很像一棵树...
- Linux文件查找
-
在Linux下通常find不很常用的,因为速度慢(find是直接查找硬盘),通常我们都是先使用whereis或者是locate来检查,如果真的找不到了,才以find来搜寻。为什么...
- 嵌入式linux基本操作之查找文件
-
对于很多初学者来说都习惯用windows操作系统,对于这个系统来说查找一个文件简直不在话下。而学习嵌入式开发行业之后,发现所用到的是嵌入式Linux操作系统,本想着跟windows类似,结果在操作的时...
- linux系统查看软件安装目录的方法
-
linux系统下怎么查看软件安装的目录?方法1:whereis软件名以查询nginx为例子...
- Linux下如何对目录中的文件进行统计
-
统计目录中的文件数量...
- Linux常见文件目录管理命令
-
touch用于创建空白文件touch文件名称mkdir用于创建空白目录还可以通过参数-p创建递归的目录...
- Linux常用查找文件方法总结
-
一、前言Linux系统提供了多种查找文件的命令,而且每种查找命令都具有其独特的优势,下面详细总结一下常用的几个Linux查找命令。二、which命令查找类型:二进制文件;...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle忘记用户名密码 (59)
- oracle11gr2安装教程 (55)
- mybatis调用oracle存储过程 (67)
- oracle spool的用法 (57)
- oracle asm 磁盘管理 (67)
- 前端 设计模式 (64)
- 前端面试vue (56)
- linux格式化 (55)
- linux图形界面 (62)
- linux文件压缩 (75)
- Linux设置权限 (53)
- linux服务器配置 (62)
- mysql安装linux (71)
- linux启动命令 (59)
- 查看linux磁盘 (72)
- linux用户组 (74)
- linux多线程 (70)
- linux设备驱动 (53)
- linux自启动 (59)
- linux网络命令 (55)
- linux传文件 (60)
- linux打包文件 (58)
- linux查看数据库 (61)
- linux获取ip (64)
- 关闭防火墙linux (53)