zoukankan      html  css  js  c++  java
  • 《网络攻防实践》第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;

    登陆成功

  • 相关阅读:
    2017-09-13
    JavaSE07——异常
    FastDFS入门、搭建以及应用(转载)
    Centos7安装JDK1.8
    「扫盲」 Elasticsearch(转载)
    Java06——面向对象
    Java05——数组
    Java02——基础
    spring boot 配置文件配置项 数字特殊处理问题
    java动态代理机制之自定义实现动态代理
  • 原文地址:https://www.cnblogs.com/lxy666666/p/6848548.html
Copyright © 2011-2022 走看看