2017-2018-2 20179306 《网络攻防技术》SQL注入、TCP/IP网络协议攻击实验
SQL注入实验
实验介绍
在本次实验中,我们修改 phpBB的web应用程序,并且关闭了phpBB实现的一些对抗SQL注入的功能。因而我们创建了一个可以被SQL注入的phpBB版本。尽管我们的修改是人工的,但是它们代表着web开发人员的一些共同错误。学生的任务是发现SQL注入漏洞,实现攻击者可以达到的破坏,同时学习抵挡这样的攻击的技术。
预备知识
1、 SQL语言
结构化查询语言(Structured Query Language)简称SQL:是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
2、SQL注入
SQL注入:SQL注入能使攻击者绕过认证机制,完全控制远程服务器上的数据库。SQL是结构化查询语言的简称,它是访问数据库的事实标准。目前,大多数Web应用都使用SQL数据库来存放应用程序的数据。几乎所有的Web应用在后台都使用某种SQL数据库。跟大多数语言一样,SQL语法允许数据库命令和用户数据混杂在一起的。如果开发人员不细心的话,用户数据就有可能被解释成命令,这样的话,远程用户就不仅能向Web应用输入数据,而且还可以在数据库上执行任意命令了。
sql注入原理讲解
3、SQL注入危害
非法读取、篡改、添加、删除数据库中的数据。
盗取用户的各类敏感信息,获取利益。
通过修改数据库来修改网页上的内容。
私自添加或删除账号。
注入木马等等。
环境配置
实验需要三样东西, Firefox、 apache、 phpBB2(镜像中已有):
① 运行 Apache Server:镜像已经安装,只需运行命令sudo service apache2 start
② phpBB2 web 应用:镜像已经安装,通过 http://www.sqllabmysqlphpbb.com 访问,应用程序源代码位于/var/www/SQL/SQLLabMysqlPhpbb/
③ 配置 DNS: 上述的 URL 仅仅在镜像内部可以访问,原因是我们修改了/etc/hosts文件使 http://www.sqllabmysqlphpbb.com 指向本机 IP。如果需要在其他机器访问,应该修改 hosts 文件,使 URL 映射到 phpBB2 所在机器的 IP。
④ 关闭对抗措施
PHP 提供了自动对抗 SQL 注入的机制,被称为 magic quote,我们需要关闭它:
找到/etc/php5/apache2/php.ini
找到 magic_quotes_gpc = On 这一行改为 magic_quotes_gpc = Off
重启 Apache:sudo service apache2 restart
实验任务
① 对 SELECT 语句的攻击
首先访问虚拟机内的URL:www.sqllabmysqlphpbb.com
。在进入phpBB之前系统会要求你登陆。这个登陆认证由服务器上的 login.php 实现,需要用户输入用户名
和密码来通过认证。用户键入用户名和密码后,login.php 会将它们与 mysql 数据库中的 username 和user_password 字段进行比较,如果匹配就登陆主界面。和其他大多数 web 应用程序一样, PHP程序使用 SQL 语言与背后的数据库交互。在 phpBB2 中,下面的语句实现了对用户的认证。
SELECTuser_id,username,user_password,user_active,user_level,
user_login_tries,user_last_login_try
FROMUSERS_TABLE
WHEREusername=‟$username‟ANDuser_password=‟md5($password)‟;
if(foundonerecord)
then{allowtheusertologin}
按常理来说,如果输入错误的用户名或密码,肯定是登录不了的。但是对于有SQL注入漏洞的网站来说,只要构造特殊的“字符串”,就能够成功登录。如在用户名输入框中输入' or 1=1#
,密码随便输入,此时合成的SQL查询语句为:select * from users where username='' or 1=1#' and password=md5('')
。
“#”在mysql中是注释符,这样井号后面的内容将被mysql视为注释内容,不会去执行。即select * from users where username='' or 1=1#' and password=md5('')
等价于select * from users where username='' or 1=1
,因为1=1永远成立的,即where子句总是为真,该sql语句进一步简化之后,等价于select * from users
。由于该页面不让输入“=”,所以我们只能输入alice'#
,就可以在不知道alice密码的情况下登录了。
② 对 UPDATE 语句的攻击
当用户想要在 phpBB2 中修改他们的资料时,可以点击 Profile,然后填写表单修改。用户发送修改请求后,会执行include/usercp_register.php
中的一条 UPDATE SQL 语句。在这条语句中同样有一个 SQL 注入漏洞。
下面演示以 alice 登陆,目标是修改ted 的资料信息,包括他的密码。攻击成功后将可以登陆 Ted 的账号。
点击Memberlist查看ted的信息,可以看到一个带参数的脚本,猜测ted的id为6。
我们在profile页面中修改ted的信息,只需在修改资料后面加上'where user_id=6#
,即将update语句中interests后的语句全部注释掉,并将where条件设置成ted的id。
再次点击Memberlist查看ted的信息,发现已经修改成功!
③ 对抗 SQL 注入
SQL 注入漏洞的根本原因是没有将代码和数据区分开。当组建一个 SQL 语句时,程序(如 PHP 程序)知道哪个部分是代码哪个部分是数据。不幸的是当 SQL 语句送往数据库执行时,这个边界被打破,当程序被注入时, SQL 解释器看到的边界可能和最初的边界不一样。为了解决这个问题,保持服务端程序和数据库看到的边界一样就十分重要。
(1)使用 magic_quotes_gpc 避开特殊字符。我们只需要在单引号前加一个反斜杠()PHP 提供了自动在单引号、双引号、反斜杠和空字符前添加反斜杠的机制,如果这个
选项启用,那么所有这些从用户输入的特殊字符会被加反斜杠。启用方法为,修改/etc/php5/apache2/php.ini
的 magic_quotes_gpc = On
,然后重启 Apache。
(2)使用 addslashes()来避开特殊字符。
PHP 的方法 addslashes()可以达到 magic quote 同样的功能。如果 magic quote 没有弃用, phpBB2 的 代 码 会 使 用 该 功 能 来 防 止 SQL 注 入 攻 击 。 请 查 看 /var/www/SQL/SQLLabMysqlPhpbb 目录下的 common.php。实际上为了使 SQL 注入攻击成 功,我们注释掉了 phpBB2 的保护措施。
请修改回 phpBB2 的保护功能,并观察移除下面代码中”and FALSE”前后的区别,描述 这个保护机制如果防止 SQL 注入攻击的。
if( !get_magic_quotes_gpc() and FALSE )
为了帮助描述区别,你需要打印出 SQL 语句。
(3)使用 mysql_real_escape_string 避开特殊字符。
(4)Prepare Statement
TCP/IP网络协议攻击实验
实验介绍
以SEED为攻击机,以Linux Metasploitable/Windows Metasploitable做靶机完成TCP/IP协议攻击,提交自己攻击成功截图,加上自己的学号水印。任选两个攻击:
ARP缓存欺骗攻击
ICMP重定向攻击
SYN Flood攻击
TCP RST攻击
TCP 会话劫持攻击
ARP缓存欺骗攻击
ARP 缓存是 ARP 协议的重要组成部分。当使用 ARP 协议解析了某个 MAC 地址和 IP 地址的映射关系,该映射便会被缓存下来。因此就不用再使用 ARP 协议来解析已存在缓存 中的映射关系。但是因为 ARP 协议是无身份认证的,所以 ARP 缓存很容易被恶意的虚假 ARP 数据报实施欺骗。这样的攻击被称为 ARP 缓存欺骗(或 ARP 缓存投毒)。 在这样的攻击中,攻击者通过伪造 ARP 数据报来欺骗被攻击主机的电脑使之缓存错误 的 MAC 地址和 IP 地址映射。因攻击者的动机不同,攻击的结果也有很多。例如,攻击者 可以使被攻击主机的默认网关 IP 映射到一个不存在的 MAC 地址达到 DoS 攻击,攻击者也 可以使被攻击主机的通信重定向至其他机器等等。 你的任务是演示 ARP 缓存欺骗攻击是怎么工作的。任务中一些有用的命令:linux 下可 以使用 arp 来检查当前的 ARP 缓存。
SEED攻击机IP:192.168.110.134 MAC地址:00:0c:29:36:7d:ab
Windows靶机IP:192.168.110.137 MAC地址:00:0c:29:16:54:9b
Linux靶机IP:192.168.110.136 MAC地址:00:0c:29:c1:3a:fc
用攻击机ping通两台靶机,ping完之后拿arp -a命令进行查看:
netwox的33号工具参数说明:
利用33号工具构造ARP数据报文进行ARP欺骗攻击:
将这两个报文发送出去,之后我们就能查出欺骗的mac和ip的对应信息:
可以看到,靶机的MAC地址已经变为攻击机的MAC地址!
攻击机通过netwox的88号工具可以伪装MAC地址,使靶机B相信靶机A的ip对应的MAC地址为伪造的MAC地址,将我的学号20179306作为伪造的MAC地址,伪造MAC地址为00:0c:20:17:93:06:
攻击结果如图:
MAC地址已经变为我的学号。
ICMP重定向攻击
ICMP 重定向报文是路由器为网络中的机器提供最新的路由信息以达到最短路由而使 用的。当主机收到一个 ICMP 重定向报文就会根据报文来更新自己的路由表。由于缺乏确认 机制,如果攻击者想要使被攻击主机使用特定路由,他们只要向被攻击主机发送欺骗性的 ICMP 重定向报文,使它改变路由表即可。 你的任务是演示 ICMP 重定向攻击是如何工作的,并描述一下观察到的结果。在 linux 可以使用 route 命令检查路由表。
SEED攻击机IP:192.168.110.134 MAC地址:00:0c:29:36:7d:ab
Windows靶机IP:192.168.110.137 MAC地址:00:0c:29:16:54:9b
记录下最初靶机的路由表状态:
这时我们开启netwox进行ICMP路由重定向,使用第86号工具,按照工具提示进行数据包的篡改:
这句话的意思是,嗅探网络中来自主机192.168.110.137的TCP包,一旦出现,就以网关192.168.110.2的名义,向数据包的源地址发送一个ICMP重定向报文,使之使用192.168.110.134作为默认的路由。
靶机ping baidu.com,可以看到wireshark立刻截获了靶机发往目标服务器的的相关报文,如下图所示:
然后这时我们再查看靶机的路由表,和之前的相对比,靶机已经错误的将网关更改为了我们的攻击机的IP地址:
SYN Flood攻击(SYN洪泛攻击)
SYN flood攻击是DoS攻击的一种形式,攻击者向被攻击主机的TCP端口大量发送SYN 请求包,但不去完成 TCP 的”三次握手”的过程,例如攻击使用一个假的 IP 地址,或只是简 单地不再继续建立 TCP 连接的过程,这都使被攻击主机处于”半连接”状态(即在”三次握手” 过程中,有了前两次握手,SYN 包和 SYN-ACK 包的传输,但没有最后一次 ACK 包的确认)。 被攻击主机的主机会使用一个队列来保存这种半连接的状态,当这个队列存储空间满了的时
候,目标主机便无法再接受任何其它连接。这一队列的空间大小事实上是一个系统变量,在 Linux 中,可以这样查看它的大小: # sysctl –q net.ipv4.tcp_max_syn_backlog
我们还可以使用”netstat -na”命令去检查队列的使用情况。处于半连接的连接状态被标示 为”SYN-RECV”,完成了”三次握手”的连接被标示为”ESTABLISHED”。
在这一任务中,你需要演示 SYN flood 攻击。你可以使用 Netwox 去实施攻击,并使用嗅探器来获取数据包。攻击实施的过程中,在被攻击主机上运行”netstat -na”命令去观察受攻击的情况。请描述你的攻击是否成功。
SYN Cookie保护机制:如果你的攻击看起来并不成功,你可以检查一下目标主机的 SYN Cookie 机制是否被开启。
SYN cookie 是针对 SYN flood 攻击的一种保护机制。这一机制会在探测到 SYN flood 攻击时开始生效。你可以使用 sysctl 命令去打开或关闭这一机制:
# sysctl -a | grep cookie (查看 SYN cookie 的当前状态)
# sysctl -w net.ipv4.tcp_syncookies=0 (关闭 SYN cookie)
# sysctl –w net.ipv4.tcp_syncookies=1 (打开 SYN cookie)
请分别在 SYN cookie 机制打开和关闭两种情况下实施你的 SYN flood 攻击,并比较结果。
实验步骤
SEED攻击机IP:192.168.110.134 MAC地址:00:0c:29:36:7d:ab
Windows靶机IP:192.168.110.137 MAC地址:00:0c:29:16:54:9b
Linux靶机IP:192.168.110.136 MAC地址:00:0c:29:c1:3a:fc
首先用Windows靶机连接Linux靶机的23号端口:
关闭Linux靶机的SYN cookie:
SEED攻击机使用netwox的76号工具进行TCP SYN Flood拒绝服务攻击:
靶机上运行”netstat -na”命令去观察受攻击的情况:
靶机会收到大量TCP报文,影响正常通讯。
23号端口连接失败。
TCP RST攻击
TCP RST攻击也称伪造TCP重置报文攻击,它通过更改TCP协议头的标志位中的“reset”比特位(0变1),来关闭掉一个TCP会话连接。
SEED攻击机IP:192.168.110.134 MAC地址:00:0c:29:36:7d:ab
Windows靶机IP:192.168.110.137 MAC地址:00:0c:29:16:54:9b
Linux靶机IP:192.168.110.136 MAC地址:00:0c:29:c1:3a:fc
首先用Windows靶机连接Linux靶机的23号端口:
利用netwox的78号工具进行攻击:
此时连接已断开:
wireshark当中也捕捉到了断开连接的数据包: