入侵日志清理之linux篇
一个常规的入侵思路,可能是先通过sql注入/弱密码之类的找到管理员用户名密码,登录后台,上传webshell,或者直接找到上传漏洞直接上webshell,然后各种小马大马溢出之类的提权,最后成功拿到root权限。 当然上面是一个很理想的情况,实际上你很可能在某一步就被卡住了。。。被卡住了怎么解决不是本文讨论的,出门右转找灰灰。 回归主题,清理日志。。。我们一般遇到的日志有几类,不同的日志清理方法可能也略有不同,一个个来说
web服务的访问日志 想要清理日志,你首先得知道日志在哪。。。几个默认路径出于时间关系不列了,自己谷歌或者问楼下吧。说下不在默认路径时候的寻找方法,其实也很简单,找到web服务的配置文件,打开来看看,里边都会有写 nginx-conf
找到日志了,你首先得明确你想清理什么。。。把日志全部干掉自然是一种清理方式,但这太粗暴了,稍有经验的管理员就会很快发现被入侵了。最好的,自然是把我们自己的痕迹抹去即可
View Code: bash cat access.log | grep help.php 上面这只是个示例,实际上你可以吧help.php替换成任何东西,比如你的IP,你的UA之类的。个人建议这个筛选条件依然应该尽可能精确,把其他日志保留下来。
本来这是个图文教程,但是我发现我随便选的这个站点他的日志这么多年都打在一个文件里了。。。大小已经50G了。。。如果每个操作都截图的话,会卡死的。。。所以还是不截图了。。。
接着刚才的说,你已经找到了要去除哪些日志,那可以使用grep的-v把结果反选,这样子出来的就是要留下的日志,最后用>重定向把内容写入文件。注意,源文件和目标文件不能是同一个,不然会悲剧。。。
View Code: bash cat access.log | grep -v help.php > /tmp/a.log cat /tmp/a.log > access.log 有时候你可能会碰到日志没有权限读写之类的问题,这时候你可以ls -l 看一下具体的权限和所有者。附上两条修改语句
View Code: bash chmod 777 access.log chown www:www access.log 上面的777代表所有人都有权限读写和执行。下面的www是你当前的用户名(其实还有一个是组,但是就不要了解那么多了。。。)
zippo 在< 入侵日志清理之linux篇>的一些补充 中提出了使用sed来进行清除日志的方法,在此也列出来供大家参考
linux自带一个流编辑器(stream editor)名字叫sed. 具体更多信息请问谷歌, 这里只介绍一点技巧.
情景: 在目标机器上架设了一个pptp的vpn, 守护进程pptpd. 目标: 清除pptpd在/var/log/messages中留下的日志.
提取具体日志关键词, 构造正则表达式, 通过sed命令删除匹配的行.
View Code: bash sed -i -e ‘/pptpd/d’ /var/log/messages sed -i -e ‘/123.123.123.123/d’ /var/log/messages 以上第一条是删除所有包含pptpd这个字符串的行, 第二条是删除包含123.123.123.123这个字符串(我们自己的IP)的行.
web服务日志部分清理到此完毕
web应用日志清理 一些比较完善的web应用,如discuz,对于一些操作,如后台操作,每一步都有记录,这很明显也是我们需要干掉的。开源程序下载看一下就知道日志在哪了。。。
如果存的形式是文本文件(一般是这样子),那么清理方式和上面的一样,不再重复。下面说一下蛋疼的数据库存储方式的清理(之所以说是蛋疼,因为这样子那张表得多大啊。。。又不是频繁会去查找的数据。。。)
一般来说,一张日志表往往可能有user, ip, timestamp, action等字段,记录了谁从什么地方在什么时间做了什么操作。依然,我们首先得想办法找出自己的操作来,假设我登录后台的时候用的帐号是新增的,叫hacker。那就很好办了,根据user删除即可
View Code: sql
DELETE FROM applogs WHERE user
=‘hacker’
请大家自行以此类推。。。
linux history命令日志的删除 history命令真是个好东西,往往我找不到一些路径的时候,看看管理员以前做了什么,就都知道了。。。管理员也是这么想的,嗯。看看history命令的日志就知道你做了什么。这很明显不是我们想要的。。。那么如何删除呢?history命令自带了这个功能
View Code: bash history -c 但这样子查看history的时候就知道最后执行的一条指令是删除日志。。。有没有别的方法呢?当然有。这个日志是保存在~/.bash_history中的(科普时间:~代表当前用户的主目录,例如一个用户叫hacker,那他的主目录一般是/home/hacker,当然这并不绝对)通过别的手段把这文件干掉即可
p.s. 如果你是“借用”别人帐号的,那可以用vi/vim之类的编辑器删掉你做坏事的那几行即可。保持低调,嗯。。。
zippo大牛在补充一文中同样提到了另外一种方法,就是直接禁用history。注意此方法仅在交互的shell中有效,并且会使上下箭头重复最近命令这功能失效。
View Code: bash unset HISTORY HISTFILE HISTSAVE HISTZONE HISTORY HISTLOG; export HISTFILE=/dev/null; export HISTSIZE=0; export HISTFILESIZE=0 灰灰在回复中提供了另外一种思路,我觉得更加不错。就是在你进入系统后,首先备份一下.bash_history,当你撤退的时候在把这备份文件还原。
linux 登录日志的清扫 这个其实可能有很多处,但我一般就修改两处,一个是last命令展示的最近登录用户,另外一个是你ssh登录时提示的最近登录时间。这两个修改用同一个工具都可以完成,logtamper. 下载地址去谷歌一下吧。。。我翻了一下我本地只有编译好的了,没有源码。。。 使用方法说一下, 清除某用户的特定日志:./wtmpclean 用户名 IP地址
View Code: bash ./wtmpclean root 127.0.0.1 修改最后一次登录记录 ./wtmpclean -m 用户名 IP地址 时间
View Code: bash ./wtmpclean -m root 127.0.0.1 1989:6:4:23:59 暂时就这些,有想到的以后补充。。。码字真是体力活。。。