history隐藏历史命令记录的小技巧

history隐藏历史命令记录的小技巧

history执行过程

不能删除所有的命令记录,需要确保操作是有记录的,但是执行的部分命令又不想被别人知道orz。

试想这样一种场景?

0x01 不记录历史命令执行

set +o history   //设置命令不记录进history
set -o histoty  //设置命令记录进history

以下图为例,记录了最近执行的历史命令。

0x02 使用history -d 删除指定命令记录

history n        //显示最近n条历史命令记录
history -d n     //删除第n条命令记录

这种方式过于明显,删除的操作也被记录进去。

0x03 编辑 ~/.bash_history 文件删除历史记录

这里有两种方式生效:
1、需要执行history -w 将内存的记录写入文件
2、断开shell后会自动将内存的记录写入文件

同理可以手动编辑 ~/.bash_history 删除历史记录。

但是通过这种方式删除历史命令,只要当前shell没有断开,history看到的还是没有删除的状态,这是为什么呢?
参考 图-history 执行过程

与上面同理:
1、执行history -r 从文件读取到内存中
2、下次新起shell后会将文件读取到内存中

使用sed命令快速删除的技巧

比如前3868行是用户的正常操作记录,3868以后是恶意的操作记录。我们可以只保留正常的操作,删除不必要痕迹的历史操作记录,这里,我们只保留前150行:

0x04 执行命令前加入空格(部分可用)

[root@VM-8-4-centos ~]# [space] command // [space]表示空格

测试时使用的是腾讯云的centos,是改过/etc/bashrc系统配置。因此在部分系统上是可用的,如果不生效则需要修改bashrc使这种方式生效。

echo HISTCONTROL=ignorespace >> ~/.bashrc 
source ~/.bashrc

0x05 chattr +ai .bash_history 不记录后续历史记录

这种方式比较hack,通过给.bash_history文件加入特殊权限(不可编辑和追加),使history命令看到的记录永远都是一致的。

chattr +ai ~/.bash_history

这样history永远都只有执行 chattr +ai .bash_history 命令之前的历史记录(下次新起shell时还是先读取.bash_history文件到内存中)。这种方式使内存中的记录无法成功写入文件,从而达到隐藏命令记录的效果。

在下次新打开一个shell的情况下,重启启用历史记录可执行下面的命令恢复。

chattr -ai .bash_history   

0x06 隐藏ssh登录记录(补充)

虽然隐藏了history执行命令的记录,但是从ssh登录的记录依然可以看到对应的时间段有ssh连接执行过程操作。

下面的方式可以隐藏ssh的登录记录,不会被w、last等指令检测到。

ssh -T root@目标ip /bin/bash -i 

但是/var/log/secure日志中还是能检测到。所以最好干掉ssh日志中包含对应连接ip的记录。

sed -i '/.*192.168.0.1.*/d' /var/log/secure

删除指定ip在ssh日志中的记录。

总结

上面总结的5种方式都可以实现对部分history命令记录的隐藏,但是最推荐的还是直接编辑 .bash_history 文件的方式实现,毕竟linux下一切皆文件(本质)。

赞赏

微信赞赏支付宝赞赏

Zgao

愿有一日,安全圈的师傅们都能用上Zgao写的工具。

2条评论

匿名 发布于11:01 下午 - 1月 23, 2022

刚好来看高总的博客就更新了是吧

    Zgao 发布于2:40 下午 - 1月 24, 2022

    hhh,这都被你发现了

发表评论