如何使用Shell脚本掩盖Linux服务器上的操作痕迹(推荐)

使用Shell脚本在Linux服务器上能够控制、毁坏或者获取任何东西,通过一些巧妙的攻击方法黑客可能会获取巨大的价值,但大多数攻击也留下踪迹。当然,这些踪迹也可通过Shell脚本等方法来隐藏。

寻找攻击证据就从攻击者留下的这些痕迹开始,如文件的修改日期。每一个 Linux 文件系统中的每个文件都保存着修改日期。系统管理员发现文件的最近修改时间,便提示他们系统受到攻击,采取行动锁定系统。然而幸运的是,修改时间不是绝对可靠的记录,修改时间本身可以被欺骗或修改,通过编写 Shell 脚本,攻击者可将备份和恢复修改时间的过程自动化。

操作步骤

第一步:查看和操作时间戳

多数 Linux 系统中包含一些允许我们快速查看和修改时间戳的工具,其中最具影响的当数“ Touch ”,它允许我们创建新文件、更新文件 / 文件组最后一次被“ touched ”的时间。

touch file

若该文件不存在, 运行上面的命令将创建一个名为“ file ”的新文件;若它已经存在,该命令将会更新修改日期为当前系统时间。我们也可以使用一个通配符,如下面的字符串。

touch *

这个命令将更新它运行的文件夹中的每个文件的时间戳。 在创建和修改文件之后,有几种方法可以查看它的详细信息,第一个使用的为“ stat ”命令。

stat file

运行 stat 会返回一些关于文件的信息,包含访问、修改或更新时间戳。针对一批文件可使用 ls 参数查看各文件的时间戳,使用“ -l ”或者“ long ”,该命令会列出文件详细信息,包含输出时间戳。

ls –l

现在就可以设置当前时间戳并查看已经设置的时间戳,也可使用touch来定义一个自定义时间戳,可使用“d”标志,用yyyy-mm-dd格式定义日期,紧随其后设置时间的小时、分钟及秒,如下:

touch -d"2001-01-01 20:00:00" file

通过ls命令来确认修改信息:

ls -l file

这种方法适用于修改个别时间戳,对于隐藏服务器上的操作痕迹,这个方法不太奏效,可以使用shell脚本将该过程自动化。

步骤二:组织Shell脚本

在开始编写脚本之前需要考虑清楚需要执行哪些过程。为了在服务器上隐藏痕迹,攻击者需要将文件夹的原始时间戳写入一个文件,同时能够在我们进行任何修改设置之后还能回到原始文件。

这两个不同的功能会根据用户的输入或者参数的不同而触发,脚本会根据这些参数执行相应的功能,同时我们需要有一种方法来处理错误。根据用户的输入将会进行三种可能的操作:

没有参数——返回错误消息;

保存时间戳标记——将时间戳保存到文件中;

恢复时间戳标记——根据保存列表恢复文件的时间戳。

我们可以使用嵌套语句if/or语句来创建脚本,也可以根据条件将每个函数分配给自己的“if”语句,可选择在文本编辑器或者nano中开始编写脚本。

步骤三:开始脚本

从命令行启动nano并创建一个名为“timestamps.sh”的脚本,命令如下:

nano timestamps.sh

然后进行下列命令:

<br />
#!/bin/bash
if [ $# -eq 0 ];then
echo “Use asave (-s) or restore (-r) parameter.”
exit 1
fi

在nano中按下Ctrl + O保存这个文件,通过chmod命令将它标记为可运行的脚本。

chmod +x timestamps.sh

然后运行脚本,测试无参数时返回错误信息的功能。如果脚本返回我们的echo语句,我们就可以继续下一个条件了。

./timestamps.sh

步骤四:将时间戳写入文件

定义if语句的条件,“-s”表示执行保存功能:

<br />
if [ $1 ="-s" ] ; then
fi

当然,需要检查计划保存的时间戳文件是否存在,如果存在,我们可以删除它(名为timestamps的文件),避免重复或错误的输入,使用下面的命令:

rm -f timestamps;

然后使用“ls”命令列出所有文件和它的修改时间,可将其输出到另一个程序,如sed,以帮助我们稍后清理这个输入。

ls –l

通常会出现下面的显示结果:

-rw-r--r-- 1 user user 0 Jan 1 2017 file

为了保存时间戳,我们只需要年、月、日及文件名,下面命令可以清除“Jan”之前的信息:

ls -l file | sed 's/^.*Jan/Jan/p'

这样显示的就是我们程序需要的信息,只是需要修改月份格式为数字格式:

ls -l file | 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 ”的文件中:

do echo $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 –s
cat timestamps

步骤五:恢复文件的时间戳

在保存好原始时间戳后,需要恢复时间戳让别人觉察不到文件被修改过,可使用下面命令:

if $1 = "-r" ; then
fi

然后使用下面命令,转发文本文件的内容,并一行一行运行:

cat timestamps |while read line
do
done<br />

然后再分配一些变量让文件数据的使用更简单:

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')

定义了所有变量之后可以使用“if else”语句,根据格式化的日期更新文件的时间戳,使用touch语法:

touch -d "2001-01-01 20:00:00" file

由于每个时间都包含冒号,因此可使用下面的“ifelse”语句完成操作,整体操作如下图所示:

if [ $YEAR == *:* ]; then
touch -d $CURRENTYEAR-$MONTH-$DAY\ $YEAR:00 $FILENAME;
else
touch -d ""$YEAR-$MONTH-$DAY"" $FILENAME;
fi

步骤六:使用脚本

使用的命令主要有以下几个:

<br />
./timestamps.sh –s  保存文件时间戳
touch -d “2050-10-12 10:00:00″ *  修改目录下的所有文件时间戳
ls –a  确认修改的文件
./timestamps.sh –r  恢复文件原始时间戳

最后可以再次运行“ls -a”来查看文件的时间戳是否和之前备份的时间戳一致,整个的脚本就执行完成了,如下图所示:

总结

该脚本只是用来清除攻击服务器之后遗留的一些痕迹。为了隐藏痕迹,黑客在针对服务器实施具体的攻击时,必须仔细考虑使用的每一个方法,以及入侵服务器之后如何隐藏自己的痕迹。

通过上面的介绍我们了解到,时间戳也是“会撒谎的”,因此系统管理员必须意识到他们的许多日志和保护措施是可以被操纵的,虽然看起来好像没有异常。

以上所述是小编给大家介绍的如何使用Shell脚本掩盖Linux服务器上的操作痕迹(推荐),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • Linux 在Bash脚本中怎么关闭文件描述符的实例

    Linux 在Bash脚本中怎么关闭文件描述符的实例 在写一个Bash脚本的时候碰到一个问题,这个脚本是用来启动一个程序B的,而这个脚本又被另一个程序A调用,结果发现新启动的B进程中有很多A进 程打开的文件描述符(如Socket).因此决定在脚本中将它们关闭,因为为了简单起见,我在A程序中使用了system()来启动该脚本. 增加了关闭文 件描述符的脚本如下: #!/bin/sh cd $(dirname "$0") || exit 1 exec 3>&- exec 4&

  • Linux Shell制作录制回放功能脚本

    不久前在书上看到两个很有趣的命令--script和srciptreplay,它可以把终端会话记录到一个文件中,即是说我们可以通过终端会话来来制作命令行技巧视频教程,也可以与他人分享会话文件,而且生成的文件还只是一般的文本文件,文件的大小非常小,真是非常有意思.下面是本人写的两个shell程序,来方便进行这个有趣并有意义的操作. 一.实现代码 文件:Record.sh #! /bin/bash # Filename:Record.sh read -p "Please input the sesso

  • Linux下文件剪切的shell脚本实现代码

    需求描述 编写shell脚本实现Linux下不同目录(路径)之间的文件的剪切(移动)操作. 其中,文件移动之前所在的目录称为源目录,文件移动之后所在的目录称为目的目录.要求当源目录不存在.源目录下无文件及剪切文件成功时,均要在屏幕上输出相关的日志信息:并且,在程序执行之前,只有源目录是存在的,目的目录需要由程序创建. shell脚本 umask 0000 if [ -d $1 ] then fcnt=`ls -l $1 | wc -l` if [ $fcnt -ne 1 ] then mkdir

  • Linux下Python脚本自启动与定时任务详解

    前言 最近同事问了一个关于Python脚本自启动与定时任务的问题,发现很多的朋友对这块都不是特别的熟悉,所以本文主要给大家介绍的是关于Linux下Python脚本自启动与定时任务的相关内容,分享出来供大家参考学习,话不多说了,来一起看看详细的介绍: 一.让Python随Linux开机自动运行 准备好要自启的脚本auto.py 用root权限编辑以下文件 sudo vim /ect/rc.local 在exit 0上面编辑启动脚本的命令 /usr/bin/python3.5 /home/edgar

  • Linux定义变量脚本分享

    本文实例为大家分享了Linux定义变量脚本,供大家参考,具体内容如下 现有两段基本一样的代码,只是变量进行改变,其他都没有变化,但是执行过程中出现了不一样的结果 代码一: vi back.sh #backup import file,such as /etc/rc.local /var/spool/cron/root IP=$(ifconfig eth1|sed -nr '2s#.*addr:(.*) B.*#\1#gp') Path=/backup if [ $(date +%w) -eq 0

  • Linux下服务器重启的脚本命令

    Linux关闭和重启系统一般使用相同的命令可以实现. 在Linux系统下常用在关机/重启命令有shutdown.halt.reboot和init,但每个命令的内部工作过程是不同的. 1.shutdown命令 Shutdown命令可以安全地关闭系统,有些用户会使用直接断电源的方式来关闭计算机,这是十分危险的. Linux与Windows不同,其后台运行着许多进程,所以强制关机可能会导致进程的数据丢失,使系统处于不稳定的状态,在有的系统中甚至会损坏硬件设备. 如果在系统关机前使用shutdown命令

  • Linux上增加自定义脚本的展现量

    前言 在一台Linux机器上写好一个脚本以后,希望这个脚本让这台机器上其他用户使用,但是不可能会让别人记住这个脚本的路径,这个时候该怎么办呢? 原理 在回答上面的问题之前,我们首先思考下面这个问题:为什么我们用的很多指令都不需要绝对路径的文件名呢? 我以最常用的ls指令为例子.首先要查看指令的执行文件位置:which ls.输出的内容为:/bin/ls. 为什么ls指令就不需要以绝对路径名就能调用呢? 这是因为环境变量PATH指定了默认的检索路径.那么要怎么去查看环境变量呢? 1. 输出内置变量

  • 如何使用Shell脚本掩盖Linux服务器上的操作痕迹(推荐)

    使用Shell脚本在Linux服务器上能够控制.毁坏或者获取任何东西,通过一些巧妙的攻击方法黑客可能会获取巨大的价值,但大多数攻击也留下踪迹.当然,这些踪迹也可通过Shell脚本等方法来隐藏. 寻找攻击证据就从攻击者留下的这些痕迹开始,如文件的修改日期.每一个 Linux 文件系统中的每个文件都保存着修改日期.系统管理员发现文件的最近修改时间,便提示他们系统受到攻击,采取行动锁定系统.然而幸运的是,修改时间不是绝对可靠的记录,修改时间本身可以被欺骗或修改,通过编写 Shell 脚本,攻击者可将备

  • 通过Shell脚本批量创建服务器上的MySQL数据库账号

    1.项目背景 因监控需要,我们需要在既有的每个MySQL实例上创建一个账号.公司有数百台 MySQL 实例,如果手动登入来创建账号很麻烦,也不现实.所以,我们写了一个简单的shell脚本,用来创建批量服务器的mysql 账号.  2.执行脚本内容; #!/bin/bash ## 此段shell 脚本的主要功能是实现在多个SQL Server IP实例上,创建账号.输入参数是两个,第一个是数据库所在的IPs,即多个Server IP构成的字符串,IP间用逗号隔开.第二个参数是 端口(3306 或

  • Jar包一键重启的Shell脚本及新服务器部署的一些经验分享

    前言 最近公司为客户重新部署了一套新环境,由我来完成了基础环境的配置,配置过程中总结了一些经验,分享给各位园友 使用 curl 命令检查网络 拿到新服务器后,首先检查服务器网络是否通畅.我们常用的 ping 命令使用的是 ICMP 协议,大部分服务器都设置了域名出入站规则,即使某些地址可以 ping 通,也存在服务器无法访问的情况.这时可以使用 curl host:port 命令来测试该服务器能否正常发送 http 请求到外部服务器 安装 JDK 新服务器一般没有 JDK ,可以使用 java

  • Windwos下使用winscp和批处理实现通过SSH端口上传文件到Linux服务器上

    Windwos下使用winscp和批处理实现通过SSH端口上传文件到Linux服务器上 今天同事想在windows上使用winscp上传文件到linux服务器上,又想偷懒想使用批处理来进行上传,还好只固定上传一个php文件,多了还真不好搞. 1.下载winscp 大家可以去网上自己找,我把winscp安装在c:下的 2.把要执行的命令保存到文件winscp.bat里,这个winscp.bat可以自己创建,我是放在d:下的. winscp.bat脚本内容: 复制代码 代码如下: option co

  • 在linux服务器上安装Jenkins

    Jenkins是用java编写的开源持续集成工具,目前被国内外各公司广泛使用.本章教大家如何在linux服务器上安装Jenkins. 一.获得一台linux服务器 要在linux下安装git,首先你得先有一台linux服务器,作为小白,手头的机器肯定都是windows的,搞个虚拟机安装对我这种小白简直是折磨人:这里使用最简单的方式获得一台linux服务器,就是从阿里云上租一台.镜像选择CentOS7.3 64位. 二.安装jdk Jenkins的运行需要依赖jdk,所以在安装Jenkins之前我

  • 查看linux服务器上mysql配置文件路径的方法

    在类NUIX的系统中,配置文件的位置一般在/etc/my.cnf 或者 /etc/MySQL/my.cnf 我们见过有些人尝试修改配置文件但是不生效,因为他们修改的并不是服务器读取的文件.例如Debian下,/etc/mysql/my.cnf才是MySQL读取的配置文件,而不是/etc/my.cnf. 如果不知道当前使用的配置文件路径,可以尝试下面的操作: 对于服务器上只有一个MySQL实例的典型安装,这个命令很有用 以上就是小编为大家带来的查看linux服务器上mysql配置文件路径的方法全部

  • 在Linux服务器上安装 memcached的基本操作

    一.memcached的安装 1.下载 memcached-1.4.33.tar.gz.libevent-2.0.22-stable.tar.gz 安装 memcached 依赖 libevent 2.安装 libevent a.解压 [root@iZ28b4kreuaZ webserver]# tar zxvf libevent-2.0.22-stable.tar.gz b.安装在 /usr/local/下 进入解压目录下:[root@iZ28b4kreuaZ libevent-2.0.22-

  • Tomcat在Linux服务器上的BIO、NIO、APR模式设置方法

    一.BIO.NIO.AIO 先了解四个概念: 同步 : 自己亲自出马持银行卡到银行取钱(使用同步IO时,Java自己处理IO读写). 异步 : 委托一小弟拿银行卡到银行取钱,然后给你(使用异步IO时,Java将IO读写委托给OS处理,需要将数据缓冲区地址和大小传给OS(银行卡和密码),OS需要支持异步IO操作API). 阻塞 : ATM排队取款,你只能等待(使用阻塞IO时,Java调用会一直阻塞到读写完成才返回). 非阻塞 : 柜台取款,取个号,然后坐在椅子上做其它事,等号广播会通知你办理,没到

  • shell脚本将Oracle服务器中数据定时增量刷新到ftp服务器中

    现有需求:将oracle数据库中的数据准实时同步至某ftp服务器中,以便前端应用能定时从ftp服务器目录中取增量数据 方法:将加工脚本写为存储过程,然后利用shell脚本执行该存储过程并将增量数据导出为txt文件并传送到ftp服务器,利用crontab定时每5分钟执行一次shell脚本,从而实现oracle库中数据持续增量刷新到ftp服务器 其中crontab以及ftp和存储过程的编写并没有难度,shell脚本的功能稍稍复杂,现在将脚本记录下以备后查 总结 以上所述是小编给大家介绍的shell脚

  • python 读取Linux服务器上的文件方法

    使用Python语句,读取Linux远端服务器上的文件打印到控制台的代码实现: 下载包:paramiko import paramiko #服务器信息,主机名(IP地址).端口号.用户名及密码 hostname = "" port = 22 username = "" password = "" client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.Au

随机推荐