《网络攻防实践》第11周学习总结

实验一 TCP/IP攻防实验

SYN 泛洪攻击

SYN攻击是一种DoS(Denial of Service)攻击,在这种攻击中黑客向被攻击者的TCP端口发送很多SYN请求,但是黑客并不是想完成三次握手协议,而是使用伪造的IP地址或者只进行三次握手协议中的第一次握手。因为SYN数据包用来打开一个TCP链接,所以受害者的机器会向伪造的地址发送一个SYN/ACK数据包作为回应,并等待预期的ACK响应。每个处于等待状态,半开的链接队列都讲进入空间有限的待处理队列。由于伪造的源地址实际上并不存在,所以将那些等待队列中的记录删除并完成建立TCP连接所需的ACK响应用于不会到来,相反每个半开的连接一定会超时,这将花费一段比较长的时间。
只要攻击者使用伪造的SYN数据包继续泛洪受害者的系统,受害者的待处理队列将一直处于满员,这使得真正的SYN数据包几乎不可能到达系统并打开有效的TCP连接。
正常情况如下:

Telnet服务器的端口情况

现在对Telnet服务器端口23进行洪泛攻击:

此时查看Telnet服务器的端口23的待处理队列如下:

此时Telnet客户端无法再次连接Telnet服务器

对Telnet和SSH的TCP RST攻击

TCP RST攻击可以终止两个被攻击主机之间的TCP连接。
比如:Machine 2(IP:192.168.40.138)的Telnet客户端和Machine 3(ip:192.168.40.142)的Telnet服务器之间建立了 Telnet连接,我们向Telnet客户段发送 TCP RST,就可以终止两者之间的TCP连接。
构造一个 TCP TST包发送给Telnet服务器,这样Telnet 服务器就会断开连接:

实验二 SQL注入

实验所用的web应用程序称为Collabtive,禁用Collabtive的若干防护措施,创建了一个容易受到SQL注入攻击的Collabtive版本。
首先可按照实验文档进行环境配置:

测试:http://www.sqllabcollabtive.com

配置DNS:

1.select语句的SQL注入

查看class.user.php的375行

并将其改为

 $sel1 = mysql_query ("SELECT ID, name, locale, lastlogin, gender, FROM user WHERE (name = '$user ') #' OR email = '$user') AND pass = '$pass'");

我们在$user后面加上) # 这样就会只验证用户名,后面的会被#注释

登陆成功

lab2 update语句的sql注入

有一个在这个SQL语句中的SQL注入漏洞;

sudo vim /var/www/SQL/Collabtive/include/class.user.php

我们可以找到如下的代码

function edit($id, $name, $realname, $email, $tel1, $tel2, $company,
              $zip, $gender, $url, $address1, $address2, $state,
              $country, $tags, $locale, $avatar = "", $rate = 0.0)
    {
    $name = mysql_real_escape_string($name);
    $realname = mysql_real_escape_string($realname);

    //modified for SQL Lab
    //$company = mysql_real_escape_string($company);
    $email = mysql_real_escape_string($email);

    // further escaped parameters removed for brevity...

    $rate = (float) $rate;
    $id = (int) $id;

    if ($avatar != "")
        {
            $upd = mysql_query("UPDATE user SET name='$name', email='$email',
                                tel1='$tel1', tel2='$tel2', company='$company',
                                zip='$zip', gender='$gender', url='$url',
                                adress='$address1', adress2='$address2',
                                state='$state', country='$country',
                                tags='$tags', locale='$locale',
                                avatar='$avatar', rate='$rate' WHERE ID = $id");
        }
    else
        {
            // same query as above minus setting avatar; removed for
            // brevity
        }
    if ($upd)
        {
            $this->mylog->add($name, 'user', 2, 0);
            return true;
        }
    else
        {
            return false;
        }
    }

我们会发现​sql语句为:SELECT ID WHERE name=​'$user',并且company的位置是存在注入漏洞,原理同lab1。

这样我们就可以越权来修改其他用户的信息及密码;我们使用任意用户,如: bob bob 进行登录;

在编辑用户的位置:user 填 ted 用户;

Company 处填:

', `pass` = '9d4e1e23bd5b727046a9e3b4b7db57bd8d6ee684' WHERE ID = 4 # '

注:这里的 9d4e1e23bd5b727046a9e3b4b7db57bd8d6ee684 就是pass的md5值;

点击修改,然后我们退出当前用户,使用ted用户登录,这个时候ted用户的密码应该是pass;

登陆成功

posted @ 2017-05-13 11:54  李学生  阅读(422)  评论(1编辑  收藏  举报