黑客技巧:利用shell脚本掩盖对Linux服务器的操作痕迹攻击也会留下痕迹。当然,这些痕迹也可以通过Shell脚本等方式隐藏起来。寻找攻击的证据从攻击者留下的这些痕迹开始,例如文件修改日期。每个Linux文件系统中的每个文件都有一个修改日期。系统管理员发现文件的最后修改时间会提醒他们系统受到攻击,并采取措施锁定系统。幸运的是,修改时间并不是绝对可靠的记录,修改时间本身是可以被欺骗或修改的。通过编写shell脚本,攻击者可以自动执行备份和恢复修改时间的过程。第一步:查看和操作时间戳大多数Linux系统都包含一些工具,可以让我们快速查看和修改时间戳,其中影响最大的是“Touch”,它允许我们创建新文件、更新文件/文件组,最后“触摸”发生的时间。touchfile如果文件不存在,运行上面的命令将创建一个名为“file”的新文件;如果已经存在,该命令会将修改日期更新为当前系统时间。我们也可以像下面的字符串那样使用通配符。touch*此命令将更新运行它的文件夹中每个文件的时间戳。创建和修改文件后,有几种方法可以查看其详细信息,第一种是“stat”命令。statfile运行stat返回有关文件的一些信息,包括访问、修改或更新时间戳。对于一批文件,可以使用ls参数查看每个文件的时间戳,使用“-l”或“long”,该命令会列出文件的详细信息,包括输出时间戳。ls–l现在可以设置当前时间戳并查看已经设置的时间戳,也可以使用touch定义自定义时间戳,可以使用“d”标志定义日期,格式为yyyy-mm-dd,接着是然后设置时间的时分秒,如下:touch-d"2001-01-0120:00:00"file通过ls命令确认修改信息:ls-lfile这个方法是适用于修改个别时间戳,这种方法对于隐藏服务器上的操作痕迹不是很有效,这个过程可以使用shell脚本自动化。第二步:组织您的shell脚本在开始编写脚本之前,您需要考虑需要执行哪些过程。为了隐藏服务器上的痕迹,攻击者需要将文件夹的原始时间戳写入文件,并且在我们进行任何修改设置后能够返回到原始文件。这两种不同的功能会根据用户的输入或参数被触发,脚本会根据这些参数执行相应的功能。同时,我们需要一种方法来处理错误。将根据用户的输入执行三种可能的操作:无参数——返回错误信息;savetimestampmark——将时间戳保存到文件中;restoretimestampmark-根据保存列表恢复文件的时间戳。我们可以使用嵌套的if/or语句创建脚本,或者根据条件将每个函数分配给它自己的“if”语句,可选择在文本编辑器或nano中开始编写脚本。第三步:启动脚本从命令行启动nano,创建一个名为“timestamps.sh”的脚本,命令如下:nanotimestamps.sh然后执行以下命令:#!/bin/bashif[$#-eq0];thenecho“使用保存(-s)或恢复(-r)参数。”exit1fi在nano中按Ctrl+O保存这个文件,并通过chmod命令将其标记为可执行脚本。chmod+xtimestamps.sh然后运行脚本测试无参数时返回错误信息的功能。如果脚本返回我们的echo语句,我们可以继续下一个条件。./timestamps.sh第四步:将时间戳写入文件定义if语句的条件,"-s"表示执行保存功能:if[$1="-s"];然后fi当然需要检查一下你打算保存的时间戳文件是否存在,如果存在,我们可以删除它(名为timestamps的文件)??,避免重复或错误的条目,使用以下命令:rm-ftimestamps;然后使用“ls”命令列出所有文件及其修改时间,可以输出到另一个程序,如sed,帮助我们稍后清理这个输入。ls–l通常会显示如下结果:-rw-r--r--1useruser0Jan12017file为了保存时间戳,我们只需要年月日和文件名,如下命令即可清除“Jan之前的信息”:ls-lfile|sed's/^.*Jan/Jan/p'这个显示了我们程序需要的信息,只需要将月份格式修改为数字格式即可:ls-lfile|sed's/^.*Jan/01/p'用数字替换所有月份:ls-l|sed-n's/^.*Jan/01/p;s/^.*Feb/02/p;s/^.*Mar/03/p;s/^.*Apr/04/p;s/^.*May/05/p;s/^.*Jun/06/p;s/^.*Jul/07/p;s/^.*Aug/08/p;s/^.*Sep/09/p;s/^.*Oct/10/p;s/^.*Nov/11/p;s/^.*Dec/12/p;'在一个文件夹中运行,我们会看到如下图所示的结果:然后通过“>>”将输出发送到名为“timestamps”的文件中:doecho$x|ls-l|sed-n's/^.*Jan/01/p;s/^.*Feb/02/p;s/^.*Mar/03/p;s/^.*Apr/04/p;s/^.*May/05/p;s/^.*Jun/06/p;s/^.*Jul/07/p;s/^.*Aug/08/p;s/^.*Sep/09/p;s/^.*Oct/10/p;s/^.*Nov/11/p;s/^.*Dec/12/p;'>>timestamps至此,脚本完成了前两个操作,结果显示如下图:可以在下面用“-s”标记测试脚本,使用cat查看保存的信息:./timestamps.sh–scattimestamps第五步:恢复文件的时间戳并保存原来的时间戳后,需要恢复时间戳,这样别人就察觉不到文件被修改了,可以使用如下命令:if$1="-r";thenfi然后使用以下命令转发文本文件的内容并逐行运行:cattimestamps|whilereadlinedodone然后分配一些变量以便更轻松地处理文件数据:MONTH=$(echo$line|cut-f1-d);DAY=$(echo$line|cut-f2-d);FILENAME=$(echo$line|cut-f4-d);YEAR=$(echo$line|cut-f3-d)而四个变量在保存的时间戳文件中是一致的,但是如果时间戳发生在过去的一年,它只会显示时间而不显示年份。如果我们需要确定当前年份,我们可以指定为我们编写脚本的年份,或者要从系统返回年份,使用cal命令查看日历。然后检索第一行,只显示想要的年份信息:CURRENTYEAR=$(cal|head-1|cut-f6--d|sed's///g')定义好所有变量后,可以用"ifelse"语句,根据格式化日期更新文件的时间戳,使用touch语法:touch-d"2001-01-0120:00:00"file由于每次时间都包含一个冒号,可以使用下面的"ifelse"语句完成运算,整体运行如下图所示:if[$YEAR==*:*];thentouch-d$CURRENTYEAR-$MONTH-$DAY$YEAR:00$FILENAME;elsetouch-d""$YEAR-$MONTH-$DAY""$FILENAME;fi第六步:使用脚本使用以下命令:./timestamps.sh–s保存文件时间戳touch-d“2050-10-1210:00:00”*修改ls目录下所有文件的时间戳–a确认修改后的文件./timestamps.sh–r恢复文件原来的时间戳最后可以再次运行“ls-a”查看文件的时间戳是否与上次备份的时间戳一致,整个脚本被执行,如下图所示:总结该脚本只是用来清除一些攻击服务器后留下的痕迹。为了隐藏踪迹,黑客在对服务器进行特定攻击时,必须仔细考虑每一种手段,以及入侵服务器后如何隐藏自己的踪迹。我们从上面的介绍中了解到,时间戳也是可以“说谎”的,所以系统管理员必须意识到他们的很多日志和保护是可以被操纵的,即使它们看起来很正常。来自:FreeBuf.COM,作者:JingleCats链接:www.freebuf.com/articles/system/155579.html推荐阅读1.SQLServer、MySQL、Oracle数据库优缺点总结2.吃透各种终端类型Linux的使用与概念3.Shell脚本中'$'符号的多种用法4.一篇文章理解Shell中各种括号的作用5.写出靠谱的Shell脚本有什么建议?6.外壳编程|脚本参数与交互及常见问题7、如何理解Linuxshell中的“2>&1”?8.一篇文章看懂HTTPD服务的访问控制9.详解Linux环境下HTTPD服务的部署10.今天,公众号一周年!欢迎关注公众号:杰哥的IT之旅
