第3章〓Linux操作系统攻防实训
























Linux的基本思想是“一切皆文件”,包括命令、硬件和软件设备、进程等,对于操作系统内核而言这些资源都被视为拥有各自特性或类型的文件。Linux是一款开源的操作系统,用户可以通过网络或其他途径免费获取,并可以任意修改其源代码。正是由于“一切皆文件”和开源这两大特点,来自全世界的无数程序员参与了对Linux的开发、维护工作,任何人都可以根据自己的兴趣和灵感对其进行修改和完善,这让Linux吸收了无数程序员的智慧,在发展中不断壮大,已成为目前在服务器应用领域市场占有率最高的操作系统,也被互联网资源的提供者视为最安全可靠的操作系统。不过,“安全”这一概念是相对的,即在互联网中不存在绝对的安全,各类针对Linux系统的攻击行为依然存在,只是攻击的方式和难度与Windows等其他系统不同而已。






3.1Linux基本命令的使用

3.1.1预备知识: Linux的字符终端

Linux系统的字符终端窗口为用户提供了一个标准的命令行接口,在字符终端窗口中,会显示一个Shell提示符,通常为$。用户可以在提示符后输入带有选项和参数的字符命令,并能够在终端窗口中看到命令的运行结果,此后,将会出现一个新的提示符,标志着新命令行的开始。字符终端窗口中出现的Shell提示符因用户不同而有所差异,其中,普通用户的命令提示符为$,超级管理员用户的命令提示符为#。这两个符号之间所表示的用户身份的差别,在Linux攻防中是非常重要的。因为在Linux用户的提权攻击过程中,同一用户账户在不同时间段登录系统后,如果在字符终端窗口中提示符从$变为#,说明提权操作已成功。

Linux系统中的命令是区分大小写的。在Linux命令行中,用户可以使用Tab键来自动补齐命令,即可以只输入命令的前几个字母,然后按Tab键,系统将自动补齐命令。按Tab键时,如果系统只找到一个和输入字符相匹配的目录或文件则自动补齐; 如果没有匹配的内容或有多个相匹配的名称,系统将发出警鸣声,若用户再按一下Tab键,系统将列出所有相匹配的内容,以供用户利用向上或向下的光标键来选择。

Linux支持翻查曾经执行过的历史命令。如果要在一个命令行上输入和执行多条命令,可以使用分号来分隔命令,如cd /;ls; 如果要使程序以后台方式执行,只需在要执行的命令后跟上一个&符号即可。

3.1.2实验目的和条件
1.  实验目的

通过本实验,使读者掌握以下内容。


(1) Linux命令行的操作方法。 

(2) 文件目录类命令的使用方法。

(3) 系统信息类命令的使用方法。

(4) 进程管理类命令的使用方法。

2. 实验条件

本实验需要在一台运行Linux操作系统的计算机上完成,这台计算机既可以是一台物理机,也可以是一台虚拟机(在实验中,如果没有特殊要求,建议使用虚拟机)。本实验使用的Linux操作系统为Red Hat Linux。

3.1.3实验过程

步骤1: 进入实验用的Red Hat Linux操作系统后,在命令行终端窗口中可以输入简单的命令,如图31所示。




图31Linux的字符操作界面


在命令行中,用户可以先熟悉一些简单的命令,并了解这些命令的用途。其中,浏览目录类命令主要包括pwd、cd、ls等,浏览文件类命令主要包括cat、more、less、head、tail等,目录操作类命令主要包括mkdir、rmdir等,文件操作类命令主要包括cd、rm、diff、tar、mv、whereis、grep等。

步骤2: 在图32中,开始演示浏览目录类命令pwd、cd、ls的使用。其中,ls la /home/命令可以列出home目录中包含隐藏文件在内的所有文件。其他浏览目录类命令希望读者自己动手进行练习。




图32浏览目录


步骤3: 在图33中,开始演示浏览文件类命令cat、more、less、head、tail的使用。




图33浏览文件


步骤4: 在图34中,开始演示目录操作类命令mkdir、rmdir的使用。




图34目录操作


步骤5: 在图35中,开始演示文件操作类命令cd、rm、diff、tar、mv、whereis、grep的使用。




图35文件操作


在Linux操作系统中,还有一些常用的命令。

dmesg: 显示系统诊断信息、操作系统版本号、物理内存大小及其他信息。

df: 查看文件系统的各个分区占用情况。

du: 查看某个目录中的各级子目录使用硬盘空间数。

free: 查看系统内存、虚拟内存的大小及占用情况。

date: 查看和设置当前日期和时间。

cal: 显示指定月份或年份的日历。

clock: 显示系统时钟。

ps: 查看系统进程。

kill: 向进程发送强制终止信号。

killall: 根据进程名发送终止信号。

nice: 指定运行程序优先级。

renice: 根据进程的进程号来改变进程的优先级。

top: 实时监控进程状态。

bg、jobs、fg: 控制进程显示。

3.1.4任务与思考

考虑到部分读者对Linux操作系统的命令行操作不熟悉,本实验主要通过对常用命令的介绍,使读者逐渐熟悉Linux的操作环境,并初步掌握一些常用命令的功能和使用方法。

Linux在服务器应用中占有绝对的优势,目前DNS、DHCP、NAT等大量的互联网基础信息服务都构建在Linux操作系统之上,同时Web、EMail、FTP等服务平台也主要选择Linux操作系统。对于网络攻防的学习来说,读者必须通过系统学习来掌握Linux操作系统的相关操作,同时对Linux的工作机制有一个全面深入的认识。其中包括Linux操作系统在进程与线程管理、内在管理、系统管理、设备控制、网络、系统调用等方面形成的特有工作机制,掌握这些工作机制为全面学习 Linux操作系统的功能及应用特点是非常有帮助的。

请读者借助各类工具,通过查阅相关文献,并进行实验操作,来掌握与Linux工作机制相关的内容。






3.2Linux用户和组的管理

3.2.1预备知识: Linux用户和组的管理特点

Linux操作系统是一个多用户、多任务的操作系统,允许多个用户同时登录到同一个系统,使用系统资源。为了使所有用户的工作顺利进行、保护每个用户的文件和进程、规范每个用户的权限,需要区分不同的用户,因此产生了用户账户和组群。

用户账户是用户的身份标识,用户通过用户账户可以登录到系统,并且访问已经被授权的资源。系统依据账户来区分属于每个用户的文件、进程、任务,并给每个用户提供特定的工作环境,使每个用户的工作都能各自独立不受干扰地进行。

Linux系统下的用户账户分为普通用户账户和超级用户账户(root)2种类型。其中,超级用户账户又称为根用户或管理员账户,可以对普通用户和整个系统进行管理。Linux系统下的账户管理具有以下特点。

(1) 组群也被称为工作组,是具有相同特性的用户的逻辑集合,使用组群有利于系统管理员按照用户的特性组织和管理用户,提高工作效率。

(2) 在为资源授权时可以把权限赋予某个组群,组群中的成员即可自动获得这种权限。

(3) 一个用户账户至少属于一个用户组,当某一用户账户属于多个组群的成员时,其中某个组群是该用户的主组群(私有组群),其他组群是该用户的附属组群(标准组群)。

(4) 每一个用户都有一个唯一的身份标识,称为用户ID(UID); 每一个用户组也有一个唯一的身份标识,称为用户组ID(GID)。其中,root用户的UID为0。

(5) 普通用户的UID可以在创建时由管理员指定,如果不指定,用户的UID默认从500开始顺序编号。

Linux系统下,用户账户文件有以下两个。

(1) /etc/passwd文件: 用户账户信息。

(2) /etc/shadow文件: 用户口令。

Linux系统下,组群文件有以下3个。

(1) /etc/group文件: 组群账户信息。

(2) /etc/gshadow文件: 组群口令、管理员等管理信息。

(3) /etc/login.defs文件: 设置用户账户限制的文件,该文件中的配置对root用户无效。

3.2.2实验目的和条件
1.  实验目的

通过本实验,使读者掌握以下内容。

(1)  用户和组群的配置文件。

(2)  Linux下用户的创建、管理和维护。

(3)  Linux下组群的创建、管理和维护。

(4)  用户账户管理器的使用方法。

2. 实验条件

本实验中所使用的Linux操作系统为Red Hat Linux,既可以运行在物理机上,也可以运行在虚拟环境中。对于初学者来说,建议在VMware等虚拟机环境中安装Linux操作系统,进行相关的实验。

3.2.3实验过程

步骤1: 使用cat/etc/passwd命令查看/etc/passwd文件,如图36所示。




图36查看/etc/passwd文件


需要说明的是,/etc/passwd文件每行使用“:”分隔几个域,真正的密码被保存在shadow文件中。

步骤2: 使用cat/etc/shadow命令查看/etc/shadow文件,如图37所示。



图37查看/etc/shadow文件


需要说明的是,所有用户对passwd文件均可读取,但只有root用户对shadow文件可读,因此密码被存放在shadow文件中更安全。

步骤3: 使用cat/etc/group命令查看/etc/group文件。用户的组账户信息被放在group文件中,任何用户都可以查看且用“:”将几个域分开,如图38所示。




图38查看/etc/group文件


步骤4: 使用cat/etc/gshadow命令查看/etc/gshadow文件。gshadow文件用于存放组群的加密口令、组管理员等信息,只有root用户可读,其被用“:”分隔成4个域,如图39所示。




图39查看/etc/gshadow文件


步骤5: 使用useradd或adduser命令创建新用户。命令格式为“useradd [选项] <username>”。例如,创建一个名为cloud用户,如图310所示。




图310创建新用户


需要说明的是,如果系统中创建的用户名已经存在,将出现如图311所示的提示信息。




图311当要创建的用户在系统中存在时出现的提示信息


useradd命令的选项含义。

c comment: 用户的注释性信息。

d home_dir: 指定用户的主目录。

e expire_date: 禁用账号的日期,格式为: YYYYMMDD。

f inactive_days: 设置账户过期多少天后,用户账户被禁用。

u UID: 指定用户的UID。

g initial_group: 用户所属主组群的组群名称或GID。

G grouplist: 用户所属的附属组群列表。

m: 如果用户主目录不存在,则创建它。

M: 不要创建用户主目录。

n: 不要为用户创建用户私人组群。

p: 加密的口令。

r: 创建UID小于500的不带主目录的系统账号。

s: 指定用户的登录Shell,默认为/bin/bash。

步骤6: 新建用户user1,UID为510,指定其所属的私有组为cloud(cloud组的标志符为1001),用户的主目录为/home/user1,用户的Shell为/bin/bash,用户的密码为123456,账户永不过期,如图312所示。




图312新建用户


步骤7: 新建了用户后,要为用户设置口令,未设置口令的用户不能登录系统,使用user1来登录系统(logout注销后,再使用user1用户登录),如图313所示。



图313为新建用户设置口令


步骤8: 重新使用root账户登录,使用命令passwd,指定和修改user1用户账户口令,如图314所示。




图314指定和修改user1用户账户口令


需要说明的是,超级用户root可以为自己和其他用户设置口令,而普通用户只能为自己设置口令。

步骤9: 使用创建组群命令groupadd或addgroup创建一个群组testgroup,如图315所示。




图315创建组群


步骤10: 使用tail 1/etc/group命令查看新建的组群信息,如图316所示。




图316查看新建的组群信息


步骤11: 修改组群、gid、组群名称,如图317所示。




图317修改组群、gid、组群名称


3.2.4任务与思考

Linux系统通过基于角色的身份认证方式实现对不同用户(user)和(group)的分类管理, 来确保多用户、多任务环境下操作系统的安全性。

请读者查阅相关的文献,并通过上机操作,掌握Linux系统下用户和组群的创建与管理方法。






3.3Linux文件权限管理

3.3.1预备知识: Linux文件权限管理的特点

文件是操作系统用来存储信息的基本结构,是一组信息的集合,它通过文件名来唯一标识。Linux中的文件名称最长可为255个字符,这些字符可用“A~Z”“0~9”“.”“_”“”等符号来表示。与其他操作系统相比,Linux最大的不同点是没有“扩展名”这一概念,也就是说文件的名称和该文件的类型没有直接的关系,例如,sample.txt可能是一个可执行文件,而sample.exe也可能是文本文件,甚至可以不使用扩展名。

Linux文件名的另一个特性是区分大小写。例如,sample.txt、Sample.txt、SAMPLE.txt在Linux系统中分别代表不同的文件,但在DOS和Windows系统下却是指同一个文件。在Linux系统中,如果文件名以“.”开始,表示该文件为隐藏文件,需要使用ls a命令才能显示。

1. 文件权限概述

Linux系统中的每一个文件或目录都包含有访问权限,这些访问权限决定了谁能访问和如何访问这些文件和目录。通过设置,可以从以下3种访问方式限制访问权限。

(1) 只允许用户自己访问。

(2) 允许一个预先制定的用户组中的用户访问。

(3) 允许系统中的任何用户访问。

用户能够控制一个给定的文件或目录的访问程度。一个文件或目录可能有读、写及执行权限。当创建一个文件时,系统会自动地赋予文件所有者读和写的权限,这样可以允许所有者能够显示文件内容和修改文件。文件所有者可以将这些权限改变为任何他想指定的权限。一个文件也许只有读权限,禁止任何修改; 也可能只有执行权限,允许像一个程序一样来执行。

如图318所示,每一行的第一个字符一般用来区分文件的类型,一般取值为d、、l、b、c、s、p。具体含义如下。

d: 表示一个目录,在ext文件系统中目录也是一种特殊的文件。

: 表示该文件是一个普通的文件。

l: 表示该文件是一个符号链接文件,实际上它指向另一个文件。

b、c: 分别表示该文件为区块设备或其他的外围设备,是特殊类型的文件。

s、p: 这些文件关系到系统的数据结构和管道,通常很少见到。




图318显示文件的类型


2. 文件权限的组成

如图318所示的显示结果中,每一行的第2~10个字符表示文件的访问权限。这9个字符每3个为一组,左边3个字符表示所有者权限,中间3个字符表示与所有者同一组用户的权限,右边3个字符是其他用户的权限。代表的意义如下。

(1) 字符2、3、4表示该文件所有者的权限,也简称为u(user)的权限。

(2) 字符5、6、7表示该文件所有者属组群中组成员的权限。例如,此文件拥有者属于“user”组群,该组群中有6个成员,表示这6个成员都有此处指定的权限,简称为g(group)的权限。

(3) 字符8、9、10表示该文件所有者所属组群以外的权限,简称为o(other)的权限。

9个字符根据权限种类的不同,也分为以下几种类型。

r(read,读取): 对文件而言,具有读取文件内容的权限; 对目录来说,具有浏览目录的权限。

w(write,写入): 对文件而言,具有新增、修改文件内容的权限; 对目录来说,具有删除、移动目录内文件的权限。

x(execute,执行): 对文件而言,具有执行文件的权限; 对目录来说,该用户具有进入目录的权限。

: 表示不具有该项权限。

每个用户都拥有自己的主目录,该目录通常在/home目录下,这些主目录的默认权限为rwx; 执行mkdir命令所创建的目录,其默认权限为rwxrxrx。用户可以根据需要修改目录的权限。

默认的权限可用umask命令修改。例如,执行umask 777命令,便可以屏蔽所有的权限,之后建立的文件或目录,其权限都变成000。

3. 文件与目录设置的特殊权限

由于特殊权限会拥有一些“特权”,因而用户如果无特殊需求,不应该启用这些权限,避免安全方面出现严重漏洞,造成攻击者入侵,甚至破坏系统。

(1) s或S(SUID、set UID)。当可执行的文件拥有了这个权限后便能得到特权,使任意访问该文件的所有者都能够使用全部系统资源。请注意具备SUID权限的文件,攻击者经常利用这种权限,以SUID配上root账号拥有者,在系统中开启后门,供需要时进出使用。

(2) s或S(SGID、set GID)。设置在文件上面,其效果与SUID相同,只不过将文件所有者换成用户组,该文件可以任意访问整个用户组所能使用的系统资源。

(3) t或T(sticky)。/tmp和/var/tmp目录供所有用户暂时访问文件,即每位用户都拥有完整的权限进入该目录,去浏览、删除和移动文件。在文件建立时系统会自动设置权限,如果这些默认权限无法满足需要,此时可以使用chmod命令来修改权限。

通常在权限修改时可以用两种方式来表示权限类型: 数字表示法和文字表示法。

chmod命令的格式为: “chmod [选项]文件”。

数字表示法是指将读取(r)、写入(w)和执行(x)分别以4、2、1来表示,没有授权的部分就表示为0,然后再把所授予的权限相加而成。

3.3.2实验目的和条件
1. 实验目的

通过本实验,使读者掌握以下内容。

(1) 使用chmod命令按照要求更改用户对于特定文件的权限。

(2) 使用unmask命令更改默认权限。

(3) 使用chown命令更改文件的所属用户和组。

2. 实验条件

本实验中所使用的Linux操作系统为Red Hat Linux,既可以运行在物理机上,也可以运行在虚拟环境中。对于初学者来说,建议本实验在运行在虚拟机环境中的Red Hat Linux系统上进行。

3.3.3实验过程

步骤1: 在test的家(home)目录中建立一个user子目录,如图319所示。



图319在test的home目录中建立一个user文件夹


步骤2: 在user目录下建立一个file文件,如图320所示。



图320在user目录建立一个file文件


步骤3: 查看file文件的所有属性,命令为ls l,如图321所示。




图321查看file文件的所有属性


步骤4: 对文件file设置权限,使其他用户可以对此文件进行写操作,并查看设置结果,命令为chmod o+w file,如图322所示。




图322对文件file设置权限


步骤5: 取消同组用户对file文件的读取权限,并查看设置结果,命令为chmod gr file,如图323所示。



图323取消同组用户对file文件的读取权限


步骤6: 用数字形式为文件file设置权限,所有者可读、可写、可执行; 其他用户和所属组用户只有读和执行权限。设置完成后查看设置结果,命令为chmod 755 file,如图324所示。




图324用数字形式为文件file设置权限,所有者可读、可写、可执行


步骤7: 用数字形式更改文件file的权限,使所有者只能读取此文件,其他任何用户都没有权限。查看设置结果,具体命令为chmod 400 file,如图325所示。




图325用数字形式更改文件file的权限,使所有者只能读取此文件


步骤8: 改变文件的所有者,查看目录test及其中文件的所属用户和组,修改file文件的所有者为test,命令为chown test.test file,如图326所示。




图326改变文件的所有者


3.3.4任务与思考

在 Linux系统中,不仅仅是普通的文件,包括目录、字符设备、块设备、套接字等在内的所有类型都以文件形式被对待,即“一切皆是文件”。 Linux系统中对所有文件与设备资源的访问控制都通过VFS(virtual file system,虚拟文件系统)来实现,所以在Linux系统的虚拟文件系统安全模型中,可通过设置文件的相关属性来实现系统的授权和访问控制。 

请读者查阅相关文献,结合Linux的VFS的特点,对Linux的文件系统进行系统的学习,并通过具体的实验操作掌握其管理方法。






3.4Linux系统日志的清除

3.4.1预备知识: Linux系统日志的特点

日志(log)是指系统所指定对象的某些操作和操作结果按时间先后顺序组合后形成的集合。每个日志文件由日志记录组成,每条日志记录描述了一次单独的系统事件。通常情况下,系统日志是用户可以直接阅读的文本文件,其中包含了一个时间戳和一个信息或子系统所特有的其他信息。日志文件为服务器、工作站、防火墙和应用软件等信息资源相关活动记录必要的、有价值的信息,这对系统监控、查询和安全审计是十分重要的。

从攻击者的角度来看,日志文件中记录的事件信息对攻击者掌握系统的运行内容和运行状况是很有帮助的; 而从防范的角度来看,日志中可以记录几乎所有的攻击行为,这些事件信息对于确定攻击源及攻击意图,进而确定相应的防范方法都是很有价值的。

1.  Linux系统中的主要日志

在Linux系统中,有以下3个主要的日志子系统。

(1) 系统访问日志。多个程序会记录该日志,分别被记录到/var/log/wtmp 和/var/log/utmp中,telnet和ssh等程序都会更新wtmp与utmp文件,系统管理员可以根据该日志跟踪到谁在什么时间登录过系统。

(2) 进程统计日志。进程统计日志由Linux内核记录,当一个进程终止时,进程终止文件(pacct或acct)中会对这一事件进行记录。进程统计日志可以供系统管理员分析系统使用者对系统进行的配置,以及对文件进行的操作。

(3) 错误日志。Syslog日志系统已经被许多设备兼容,Linux的Syslog可以记录系统事件,主要由syslogd程序执行,Linux系统下各种进程、用户程序和内核都可以通过Syslog文件记录重要信息,错误日志被记录在/var/log/messages中。

2. Linux系统日志的工作特点

在Linux系统中,有关当前登录用户的信息被记录在文件utmp中; 登录进入和退出等信息被记录在文件wtmp中; 最后一次登录文件可以用lastlog命令查看; 数据交换、关机和重启也被记录在wtmp文件中。所有的记录都包含时间戳。这些文件(lastlog通常不大)在具有大量用户的系统中增长十分迅速。例如,wtmp文件可以无限增长,除非被定期截取,因此许多系统以一天或一周为单位把wtmp配置成循环使用。它通常由cron运行的脚本来修改,且这些脚本将被重新命名并循环使用wtmp文件。通常,wtmp在第一天结束后命名为wtmp.1; 第二天结束后wtmp.1变为wtmp.2; 如此循环,直到变为wtmp.7。

3.4.2实验目的和条件
1. 实验目的

通过本实验,使读者主要掌握以下内容。

(1) Linux日志的作用。

(2) Linux日志的存放位置及工作特点。

(3) Linux日志的删除方法。

2. 实验条件

本实验中所使用的Linux操作系统为Red Hat Linux,既可以运行在物理机上,也可以运行在虚拟环境中。

3.4.3实验过程
1. 查看Linux系统日志

主要操作步骤如下。

步骤1: 以root身份登录系统后,执行cat /var/log/messages等命令查看以下各个日志内容,如图327所示。



图327查看各类日志内容

其中,/var/log/messages是核心系统日志文件,它包含了系统启动时的引导消息,以及系统运行时的其他状态消息。I/O错误、网络错误和其他系统错误都会被记录到这个文件中,而其他信息,如某个用户的身份被切换为 root,也在这里列出。如果服务正在运行(如运行中的DHCP服务器),也可以在 messages文件中观察到它的活动。通常,/var/log/messages是系统管理员在进行故障诊断时首先要查看的文件。

此外,还包括以下日志。

/var/log/secure: 与安全相关的日志信息。

/var/log/maillog: 与邮件相关的日志信息。

/var/log/cron: 与定时任务相关的日志信息。

/var/log/spooler: 与新设备相关的日志信息。

/var/log/boot.log: 守护进程启动和停止相关的日志信息。

步骤2: 以root身份登录后,执行who /var/log/wtmp(如图328所示)或last命令,查看wtmp文件的内容。该日志文件永久记录每个用户登录、注销及系统的启动、停机的事件。因此随着系统正常运行时间的增加,该文件也会越来越大,其增加的速度取决于系统用户登录的次数。该日志文件可以用来查看用户的登录记录,通过last命令可以访问这个文件获得这些信息,既可以反序从后向前显示用户的登录记录,也能根据用户、终端tty或时间显示相应的记录。 


步骤3: 使用history命令,查看最近所执行过的命令,如图329所示。




图328查询wtmp文件的内容




图329查看最近所执行过的命令



2.  手动删除Linux日志

常用的日志文件如下。

accesslog: 记录http/web的传输。

acct/pacct: 记录用户命令。

aculog: 记录Modem的活动。

btmp: 记录失败的记录。

lastlog: 记录最近几次成功登录的事件和最后一次不成功的登录。

messages: 从syslog中记录信息(有的链接到syslog文件)。

syslog: 从syslog中记录信息(通常链接到messages文件)。

utmp: 记录当前登录的每个用户。

wtmp: 一个用户每次登录进入和退出时间的永久记录。

xferlog: 记录FTP会话。

一般情况下,需要清除的日志主要有lastlog、utmp(utmpx)、wtmp(wtmpx)、messages、syslog等。

步骤1: 输入ls /var/log命令,查看/var/log目录下的日志文件,如图330所示。




图330查看log文件夹下的日志文件


步骤2: 使用root身份登录系统,执行rm f /var/log/wtmp命令,如图331所示,再用ls /var/log命令查看/var/log目录下的日志文件,发现wtmp被删除,如图332所示。



图331执行删除命令




图332确认wtmp文件已经被删除


当以root用户身份登录系统后,既可以使用rm f /var/log/wtmp命令来将对应的日志删除,也可以使用truncate s 0 /var/log/wtmp命令将内容清空,以上两种方式虽然能够彻底地消除攻击者留下的痕迹,但是会被系统管理员发现。因此,可以选择使用编辑器对日志文件进行选择性的修改,具体命令为vi /var/log/wtmp。其中,有关Linux系统下的vi编辑器的使用方法,读者可通过查阅相应的文献,并通过上机操作来掌握。

使用相同的方法,可以对其他日志文件进行修改、删除操作。

3.4.4任务与思考

由于Linux系统是基于文件记录的系统日志,尽管重要的日志文件已经是二进制的,但是由于Linux是开源的操作系统,因此有些情况下攻击者在入侵后经常会通过消除日志信息来“打扫战场”。虽然在这种情况下日志信息显得不是那么可靠,但是如果能够综合运用Linux系统提供的大量命令,通过系统地、关联地分析还是能够找到攻击者的蛛丝马迹。

Linux系统提供了功能强大和类型丰富的日志功能,希望读者能够通过全面学习和不断实践,掌握Linux系统日志的组成、存放位置及安全管理方法。







3.5使用John the Ripper破解
Linux系统密码

3.5.1预备知识: John the Ripper介绍

John the Ripper是一款在已知密文的情况下尝试破解出明文的密码破解工具,其支持DESs、MD4、MD5等目前大多数的加密算法。John the Ripper虽然支持UNIX、Linux、Windows、DOS模式、BeOS、OpenVMS等多种类型的系统架构,但主要用于破解不够牢固的UNIX/Linux系统密码。John the Ripper的官方网站为http://www.openwall.com/john/,下面介绍它提供的4种破解模式。

1. 简单破解模式

简单破解模式(single crack mode)为专门针对“使用账号作为密码”的用户,如某一个账号用户名为admin,对应的密码为admin888、admin123等。使用这种破解模式时,John the Ripper会根据密码内的账号进行密码破解,并且将多种字词变化的规则套用到账号内,以增加破解的成功率。

2. 字典破解模式

字典破解模式(wordlist crack mode)需要用户指定一个字典文件,John the Ripper会读取用户给定的字典文件中的单词进行破解。John the Ripper中自带了一个字典,其文件名为password.lst,文件中包含了一些常用来作为密码的单词。

这种方式比较简单,使用者只需告诉John the Ripper密码文件的位置即可,在这种模式下John the Ripper会自动使用字词变化功能进行破解。

3. 增强破解模式

增强破解模式(incremental mode)是John the Ripper中功能最为强大的破解模式,它会自动尝试所有可能的字符组合,以之当作密码来破解。该模式属于暴力破解方法,所以破解过程中所用的时间较长。

4. 外挂破解模式

外挂破解模式(external mode)是让使用者通过用C语言编写“破解模块程序”,然后将编写后的“破解模块程序”挂接在John the Ripper环境下,进行密码破解操作。“破解模块程序”是用C语言编写的函数,该函数的功能是根据破解需要产生字典文件,John the Ripper通过读取字典文件中的单词来破解密码。

3.5.2实验目的和条件
1. 实验目的

通过本实验,使读者主要掌握以下内容。

(1)  Linux操作系统中用户密码的保存特点。

(2)  常见密码的破解方法。

(3)  John the Ripper工具的使用方法。

2.  实验条件

本实验可在一台运行Windows Server 2003及以上版本的Windows服务器操作系统上运行,同时,在正式实验之前,需要安装John the Ripper工具软件。

3.5.3实验过程

步骤1: 以系统管理员身份正常登录Windows服务器操作系统,然后进入John the Ripper工具软件工具的安装文件夹(本实验为D:\tools\john179),主要有doc和run两个文件夹。其中,主程序为run文件夹下的john.exe,john.ini为它的配置文件。

步骤2: John the Ripper工具为命令行下使用的一个软件,有关操作都需要在命令提示符下进行。选择“开始”→“运行”选项,在出现的对话框中输入cmd命令,按Enter键后打开“命令提示符”窗口,输入cd tools\john179\run命令进入run文件夹,如图333所示。




图333切换到John the Ripper所在的文件夹


步骤3: 



图334John the Ripper工具的参数说明


John the Ripper工具的命令使用格式为“john [选项] [密码文件]”。运行john.exe命令后,如图334和图335所示的窗口中对每一个参数的功能及使用方法进行了详细说明,读者可根据需要选择使用相关的参数。

步骤4: 破解Linux系统密码。John the Ripper是对密码文件进行破解的工具,要破解Linux系统密码,首先要取得它的密码文件,假设在实验中已取得了一个Linux系统的密码文件shadow,shadow文件在实验之前已经复制到D:\tools\john179\run文件夹中。现在需要对shadow文件进行破解操作,最简单的破解命令为john.exe shadow,运行过程和结果如图335所示。




图335运行john.exe shadow命令,破解shadow文件


可以看到,破解出root用户的密码为abc123。密码破解的字典文件password.lst为文本文件,用户可以用记事本将其打开,然后根据破解需要自己添加字典内容,John the Ripper进行密码破解时会读取文件中的内容逐个测试。

3.5.4任务与思考

本实验的操作过程相对简单,但涉及的知识面较广,主要包括常见的加密算法和加密机制、Linux系统中用户密码的存储和管理方式、密码破解方法等。请读者在本实验的基础上对以上内容进行深入系统的学习。

同时,John the Ripper是一款功能强大的密码破解工具,其提供了大量的参数,不同参数体现了不同的应用功能,也为不同情况下的密码破解提供了帮助和支持。读者可在本实验操作的基础上,参阅John the Ripper软件的帮助文档或其他技术资料,并通过具体操作全面掌握John the Ripper软件的使用方法。






3.6Meterpreter键盘记录

3.6.1预备知识: Metasploit框架介绍

Kali预装了最常用的高级漏洞利用工具集,Metasploit框架(http//www.metasploit.com)便是其中之一。Metasploit是一个免费的、可下载的框架,通过该框架,用户可以获取、开发针对计算机软件漏洞实施攻击的工具,也可以使用Metasploit本身附带数百个已知软件漏洞的专业级漏洞攻击工具。Metasploit框架使用Ruby程序语言编写,具有较好的扩展性。

Metasploit框架由库、接口和模块3部分组成,其中,本实验关注的重点是各个接口和模块的功能。Interfaces(控制台、CLI、Web、GUI等)为处理模块(漏洞利用、有效载荷、辅助工具、加密引擎、Nops等)提供操作接口。每个模块都有自己的价值,在渗透测试中起到不同的作用,具体如下。

(1) 漏洞利用。漏洞利用是一串验证性代码,主要针对目标系统的特定漏洞开发。

(2) 有效载荷。有效载荷是一段恶意代码,也可能是漏洞验证程序的一部分,还可能是独立编译后用于在目标系统上运行的任意命令。

(3) 辅助工具。辅助工具是一个工具集,用于扫描、嗅探、区域拨号、获取指纹及其他安全评估任务。

(4) 加密引擎。开发用来加密渗透测试中的有效载荷,以对抗杀毒软件、防火墙、IDS/IPS及其他类似的反恶意软件的查杀。

(5) NOP(空操作)。NOP是一个汇编指令,通常插入shellcode中,不起任何作用,只是用来为有效载荷占位。

Meterpreter是Metasploit框架中的一个功能模块,通常作为漏洞溢出后的攻击载荷来使用,攻击载荷在触发漏洞后能够返回给攻击者一个控制通道。Meterpreter是一种先进的、隐蔽的、多功能的、可动态扩展的载荷,通过dll注入的方式进入目标内存,支持脚本和插件在运行时进行动态装载,以保持可扩展性。Meterpreter的主要功能包括提权、保存系统账号、记录关键信息、保持后门服务、开启远程桌面等,同时Meterpreter shell的整个通信过程都是默认加密的。

3.6.2实验目的和条件
1. 实验目的

Metasploit框架是一个功能非常强大的开源平台,其提供了开发、测试和使用恶意代码所需要的环境,为渗透测试、shellcode编写和漏洞研究提供了一个可靠平台。Metasploit框架是一个庞大的系统,在一个实验中无法完全反映其功能。本实验主要介绍了Metasploit框架中Meterpreter模块的部分应用,主要目的是让读者对Metasploit框架有个初步的认识。

2. 实验条件

本实验所需要的软硬件清单如表31所示。


表31Meterpreter键盘记录实验清单




类型
序号
软硬件要求
规格
攻击机
1
数量
1台
2
操作系统版本
Kali Linux 2020

3
软件版本
Metasploit v5.0.101
靶机
1
数量
1台

2
操作系统版本
Windows XP
3
软件版本
Home Edition


3.6.3实验过程

步骤1: 打开Kali 2020攻击机,如图336所示。




图336Kali 2020图形界面


步骤2: 开启一个新的终端,输入msfconsole命令启动Metasploit。

步骤3: 输入search ms03_026命令,查询“MS03026”漏洞利用模块的相关信息,如图337所示。在查询到“MS03026”漏洞利用模块后,还可以输入info exploit/windows/dcerpc/ms03_026_dcom命令,进一步了解MS03_026_dcom漏洞的详细信息。




图337查询“MS03026”漏洞利用模块的相关信息


步骤4: 在掌握“MS03_026”漏洞相关信息的基础上,输入use exploit/windows/dcerpc/ms03_026_dcom命令,加载该漏洞利用模块,如图338所示。通过命令提示符的改变,说明该模块已经成功加载。同时还加载了默认payload“windows/meterpreter/reverse_tcp”。




图338加载ms03_026_dcom漏洞利用模块


步骤5: 输入show options命令查看需要进行配置的选项,如图339所示。

步骤6: 输入set RHOSTS 192.168.138.131命令,设置靶机的IP地址; 接着输入exploit命令,将探测到对方的系统类型和语言版本,并且显示已经打开的meterpreter会话,如图340所示。




图339查看可配置选项






图340设置靶机IP并运行漏洞利用模块


步骤7: 在“meterpreter>”后输入help命令,可以获得关于Meterpreter的详细使用方法说明,如图341所示。




图341获得关于Meterpreter的详细使用方法说明


步骤8: 执行完exploit后,就已经获得了一个Meterpreter shell。接下来输入getuid命令,可以看到已经获取了系统权限。然后输入sysinfo命令,查看目标主机的信息,如图342所示。可以看到被攻击主机的名字、系统类型、架构类型、系统语言等信息。




图342查看目标主机的信息


步骤9: 接下来,输入run hashdump命令,获取系统用户的Hash值,如图343所示。




图343获取系统用户的Hash值


在获得了目标主机的Hash值后,可以使用相关的软件(如Ophcrack John the ripper)进行破解,具体方法在此不再赘述。请读者在查阅相关文献资料的基础上,通过上机操作,学习有关Ophcrack等破解工具的应用特点和使用方法。

步骤10: Meterpreter还能够获得并记录目标主机上的键盘输入信息,即远程记录对方在自己的计算机上输入的信息。首先,输入ps命令,查看目标主机上运行的进程,如图344所示,可以查看到explorer.exe程序的ID是1500。




图344查看目标主机上运行的进程


步骤11: 输入migrate 1500命令,将Meterpreter会话移植到explorer.exe程序中,如图345所示。

步骤12: 输入getuid命令,可以看到当前用户变为了Owner,输入getsystem再次获得系统权限,如图345所示。




图345移植到explorer.exe程序并获得系统权限


步骤13: 启动键盘记录命令keyscan_start,开始记录键盘信息,如图346所示。




图346开始记录键盘信息


步骤14: 输入keyscan_dump命令,存储目标主机上捕获的键盘记录,如图347所示。

步骤15: 在靶机上,打开“记事本”编辑工具,随便输入一些字符(如This is a text)。然后,在Kali中再次运行keyscan_dump命令,就可以获取到键盘输入的信息,如图348所示。

步骤16: 输入keyscan_stop命令,停止键盘记录,如图348所示。




图347存储目标主机上捕获的键盘记录




图348获取到键盘输入的信息并停止记录



3.6.4任务与思考

本实验通过一个具体示例,介绍了Metasploit框架的功能特点。在本实验中,Metasploit框架被构建在Linux环境中。虽然Metasploit是一款免费的开源安全漏洞检测工具,但其也可以安装在Windows系统上。

在Windows环境下安装Metasploit时,用户可以从Metasploit的官方网站(http://www.metasploit.com/)下载Windows版本的安装程序,具体的安装过程类似于安装其他Windows环境下的应用程序,只是在安装前需要关闭杀毒软件,否则会因杀毒软件与Metasploit冲突导致安装失败。

Metasploit目前提供了3种用户使用接口: GUI模式、Console模式和CLI(命令行)模式(原来还提供一种Web模式,目前已经不再支持)。这3种模式的使用特点各异,一般建议在Console模式中使用(如图349所示),因为在Console模式中不仅可以使用Metasploit所提供的所有功能,还可以执行其他的外部命令(如ping)。




图349Metasploit的Console模式


对Linux操作不是很熟悉的读者可以选择在Windows环境下安装和配置Metasploit架构。

另外,在本实验的基础上,读者可以在Metasploit帮助文档和技术资料的帮助下,通过具体实验掌握Metasploit的主要应用功能。