专业编程基础技术教程

网站首页 > 基础教程 正文

渗透测试中隐匿痕迹的一些方法

ccvgpt 2024-12-15 11:48:43 基础教程 5 ℃

渗透的过程中、渗透成功后的操作都会产生很多痕迹。我们在有条件的情况下,需要将这些痕迹清理掉,避免管理员通过痕迹找到我们,或者说是为了为下一步的渗透测试拖延时间。

我们都应该明白所有的痕迹清理都不是绝对的,只要和计算机有接触就一定会有痕迹。就算你能在目标主机清理很干净,但是对方也有可能使用了第三方的日志记录功能,这样基本就做不到完全清理。

渗透测试中隐匿痕迹的一些方法

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

Tags:

最近发表
标签列表