Linux痕迹清除
在渗透的过程中,我们会经常遇到linux。由于linux日志非常详细而且方便查看,导致我们的操作记录很 有可能会在管理员前面暴露无遗,所以这次主要跟大家分享一下在linux下面如何隐藏我们的登陆日志和 操作日志。按照客户端的情况,大概分为两种,一种linux,一种windows。
此处的服务端测试系统为CentOS 7.9。
一、 当客户端系统为linux时。
在linux下面相对简单,可以采用以下命令登陆,不会在w、 last、 lastlog里面留下痕迹:
ssh -o UserKnownHostsFile=/dev/null -T user@host /bin/bash -i
或者:
ssh -o UserKnownHostsFile=/dev/null -luser host /bin/bash -i
如果目标更改了端口,在host后面加上 -p 端口就可以了。
登陆之后,记得先执行以下的命令,清除当前会话所有缓存:
unset HISTFILE;unset HISTSIZE;unset HISTORY;unset HISTSAVE;unset HISTFILESIZE
遇到需要交互的时候,可以用python模拟出一个pty:
python -c 'import pty;pty.spawn("/bin/sh")'
模拟pty之后再清除当前会话所有缓存:
unset HISTFILE;unset HISTSIZE;unset HISTORY;unset HISTSAVE;unset HISTFILESIZE
这样子,在w、 last、 lastlog命令里面都无法查看到我们登陆。
不过依然会在/var/log/目录下面的日志里留下登陆成功或者失败的记录。这个痕迹的删除我们先把 windows下面隐藏登陆痕迹讲完之后再详细列出。
二、 当客户端为windows时。
如果我们内网渗透的时候获得了一台windows机器,条件允许的情况下可以用frp或者nps做一个代理, 然后在linux里面用proxychains这个工具代理用第一种方法登陆。条件不允许的话,可以用xshell等工具 登陆:
登陆进去第一件事就是清除当前会话的所有缓存:
unset HISTFILE;unset HISTSIZE;unset HISTORY;unset HISTSAVE;unset HISTFILESIZE
并且一定要注意的是,我们要记住这个last login
的时间和IP
,到时候修改最后登陆时间有用。
现在这台机器上次管理登陆的时间是2022年1月18日 17:56:32, IP是192.168.136.129
接着使用logtamper。这个工具是xi4oyu大牛在2008年的时候写的,已经有十几个年头了,依然可以使 用。唯一有不好的地方在于,它不能指定删除某条记录。我在xi4oyu大牛的代码基础上修改了一下,增加了一个修改特定记录的功能。
上传到临时目录:
解压后进入目录make一下:
这里面一共有三个文件:
其中logtamper是我们刚刚编译好的, logtamper-static-2.x是xi4oyu大牛之前编译好的静态执行文件, 但是我发现在一些3.x的内核里面会有一些小错误,所以在centos 7.9里面重新编译了一个。建议如果有 gcc的话,最好还是在当前环境make一下,毕竟linux的机制不像windows一样可以通用。
执行一下logtamper看帮助:
第一个参数-f是指定日志文件的位置,一般都是默认的,不需要指定。
-h是隐藏当前在线用户,就是w命令显示的。
执行以下代码:(就是用户和当前登陆的IP)
./logtamper -h root 192.168.136.129
可以看到当前用户已经看不到了。
-w是隐藏last命令看到的日志,但是这里有个小缺陷,只能删除指定IP和用户名的登陆记录。如果管理 员登陆的IP和我们当前登陆的IP一致,那么就会把管理之前的登陆记录也一并删除。所以我加了最后的 参数,一会再介绍。
假设我们要删除从192.168.136.157登陆的root日志:
./logtamper -w root 192.168.136.157
可以看到执行后192.168.136.157这个登陆记录已经删除了:
-m 是设置最后一次登陆时间。
使用以下的命令将它设置成刚才我们登陆的时候记录的时间(2022年1月18日 17:56:32)和IP 192.168.136.129:
./logtamper -m root 192.168.136.129 pts/0 2022:01:18:17:56:32
可以看到最后一次登陆时间已经被还原成之前的了:
-u 是我新增加的参数,它的作用是删除从上往下第n条(n是接着-u之后的数字)用户登陆记录(reboot不计算在里面),为了防止我们登陆的IP和管理一致的时候可以单独删除我们自己的记录。n留空的话默 认删除最上面一条。
现在最后一次登陆是我们的:
执行下面的命令:
./logtamper -u
可以看到我们最近的登陆记录没有了。
三、 /var/log下面的日志删除。
现在我们已经是可以在w、 last、 lastlog命令下都看不到了,但是由于linux系统的日志严谨性, 在/var/log下面还存在一些日志文件会记录我们的登陆等敏感操作,对于这些文件也不能忽略。
当前系统是CentOS,需要注意的文件
有/var/log/secure、 /var/log/messages、 /var/log/audit/audit.log等等。这里以/var/log/secure为例介 绍一下方法。
首先看一下有多少行:
cat /var/log/secure | wc -l
可以cat一下看看自己登陆进来的日志在大概第几行,然后将上面的内容导出到另外一个文件。如果行数 特别多无法cat的话,可以大概估算一下,取个70%差不多。
这里我们把前25行不属于我们的日志导出到另一个文件,然后改变属性,再替换掉原来的日志文件。为 什么要替换呢?因为linux的机制,如果你单纯只是再把另外一个文件cat到日志里面,那么我们注销的 时候,就会留下注销的日志。如果替换掉,基于linux的机制,文件属性被改变,会有一段时间无法写 入。同时我们可以利用touch -r复制/var/log文件夹的时间,这样,即使我们覆掉/var/log/secure,/var/log文件夹也不会让管理察觉到被修改了:
cat /var/log/secure | head -n 25 > x chmod 0600 x touch -r /var/log log mv -f x /var/log/secure touch -r log /var/log rm -rf log
这样,我们文件夹的时间还是跟原来的一致,而且/var/log/secure在一段时间内系统也无法往里面写日 志了。
工具
文中自己改写的logtamper工具关注公众号后回复【logtamper】获取下载地址
