• 2019-2020-2 20175329许钰玮《网络对抗技术》Exp8 Web基础


    实验目的

    实验内容

    • 操作程序规律
      • 运行脚本或可执行文件
      • 查看配置文件
      • 出错找日志

    Web前端HTML

    • 能正常安装、启停Apache。理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML。

    Web前端javascipt

    • 理解JavaScript的基本功能,理解DOM。编写JavaScript验证用户名、密码的规则。

    Web后端:MySQL基础:正常安装、启动MySQL,建库、创建用户、修改密码、建表

    • 最简单的SQL注入,XSS攻击测试
    • 功能描述:用户能登陆,登陆用户名密码保存在数据库中,登陆成功显示欢迎页面。

    实验步骤

    环境搭建

    apache2搭建

    • 使用指令/etc/init.d/apache2 start开启服务
    • 在浏览器里输入localhost查看

    mysql环境搭建

    • 因为kali中自带安装了mysql所以我们只需要对其初始化然后运行即可sudo /etc/init.d/mysql start
    • mysql -u root -p启动mysql并输入指令
    • 后面的这些指令就不说了吧,是在之前刘念老师的课上学到过的mysql指令调用哈,不会的就看看我截图指令吧。
    • 建立一个我们所需要的数据库咯
    • 然后插入一条我们的个人信息啦。
    • 在这里前期准备就完成咯。

    php搭建

    • service apache2 start是为了搭建接口我们在这里使用php语言需要和mysql数据做一个连接。
    • 然后我们编写几个简单php文件放在/var/www/html下面
    <?php
    phpinfo()
    ?>
    

    • 这样我们就能看见php搭建成功咯

    自己编写一个简单的网站

    • 接下来,我们自己简单地写一个网站,只完成最基本的登录功能即可。
    • 我们之前创建了web_db这个数据库,在web_db中添加了users表,并插入了一条数据。
    • 登录的用户名为xuyuwei,口令为20175329。

    用HTML写登录表单

    • 首先我们编写前端的登录页面,非常简单。
    • 我们编写一个名叫login.html的登录表单
    <html>
    <head>
      <title>Welcome</title>
    </head>
    <body>
      <h1>Welcome!</h1>
      <form method="POST" action="login.php">
        <label>
          Name:
          <input type="text" id="username" name="username" />
        </label> 
        <br />
        <label>
          Password:
          <input type="password" id="password" name="password" />
        </label> 
        <br />
        <div id="feedback"></div>
    	<br />
        <input type="submit" value="login" />
      </form>
      
      <script src="event.js"></script>
      
    </body>
    </html>
    
    • 核心部分就是form表单,input标签的name属性是后台php接收参数时要用到的。
    • <input type="password">是密码框,尽管在屏幕上被隐藏了口令,但不代表传输过程中是安全的。

    用JavaScript处理事件

    • 我们编写event.js处理事件。当焦点离开用户名输入框时,如果用户输入的字符少于5个,我们在页面反馈信息,提示用户名不应该少于5个字符。
    function checkUsername() {                            
      var elMsg = document.getElementById('feedback');   
      if (this.value.length < 5) {                       
        elMsg.textContent = 'Username must be 5 characters or more';  
      } else {                                           
        elMsg.textContent = '';                           
      }
    }
    
    var elUsername = document.getElementById('username');
    elUsername.onblur = checkUsername;  
    

    用PHP编写后台逻辑

    • 我们用PHP处理前端提交的表单。依葫芦画瓢,照搬学长的代码。
    • 下面是login.php
    <?php
    $username=$_POST["username"];
    $password=$_POST["password"];
    
    $query_str="SELECT * FROM users where username='$username' and password='$password';";
    $mysqli = new mysqli("127.0.0.1", "debian-sys-maint", "SY7hZpYpuHu5YJY4", "web_db");
    
    if ($mysqli->connect_errno) {
        printf("Connect failed: %s
    ", $mysqli->connect_error);
        exit();
    }
    
    if ($result = $mysqli->query($query_str)) {
        if ($result->num_rows > 0 ){
                echo "<br><h3>Hello, $username</h3>  <br> ";
        } 
        else {
            echo "<br><h3> login failed!!!! </h3><br> " ; }
        $result->close();
    }
    $mysqli->close();
    ?>
    
    
    • 虽然我对PHP一窍不通,但是这段代码的逻辑很容易从字面上理解的。
    • 和Java的JDBC相比,php连接数据库还是挺方便的。
    • 这里故意用字符串拼接的方式构成$query_str查询语句,方便后面的SQL注入。
    • 如果用参数化语句的话,就能大大提高对SQL注入的免疫力。

    最终效果

    • 虽然这个网站挺简陋的,但能把原理了解清楚就行。
    • 登陆成功咯

    SQL注入: XSS攻击测试

    • XSS本质是脚本的执行,当然不一定是JavaScript,也可以是一段html片段。
    • 我们现在就让网站执行一次弹窗。当然,真正的XSS攻击不会这么简单。
    • 输入'or 1=1 # <script>alert("xss")</script>
    • 如果成功你就和我弹个窗哈哈哈哈
    • 当然,作为注入的内容,也可以是HTML片段。
    • 比如,展示图片

    实验问题与回答

    问题一:

    • 在配置mysql的时候刚刚开始输入指令mysql start的时候被报错
    • 我突然想起来之前启动apache2的时候使用过这个全局初始环境指令然后就在这里试了试,没想到成功了。于是我对这个init.d的作用有点好奇就查了查.
    • 突然发现一个重新配置软件环境的好方法呢。

    问题二:

    • 刚刚开始搭建环境的时候,php官方版本写的是安装php5的方法,网上很多嵌套的博客都是安装php5的方法,我在寻思先康康有没有php于是调用了一下whereis php就可以看见
    • 后面我把安装php5的指令更改为php7发现里面的东西都是配置好的只等着使用就ok了,看来kali下面的东西都挺配套的呀。

    问题三:

    • 刚刚开始做搭环境所有都很顺利但是到了这一步人就傻了,搁置来来回回也有一周多的时间
    • 后面在解答过程中刘老师提供的思路真的太棒了,一下就把困惑我好久的问题迎刃而解了。刘老师说在使用root作为账户的时候需要管理员权限,如果作为数据库连接没有考虑到这个情况所以无论root管理下的账户密码数据库消息是否完全匹配都不一定能连接上,于是让我再建立一个账户,那好呗我就用kali登陆咯。
    • 后面就是我们所预期的实验结果了

    实验总结

    这次的实验和之前的刘念老师的web课程很多地方都是相似的,知识是相同的,我突然发现在linux下面有成熟的配件搭建环境起来更加直接简单。还记得当时为了搭建刘念老师的web真的是....而且关于1=1这个恒等式刘老师上课也是讲过的,让我再一次对于安全漏洞方面有了更加深入的理解和了解。倒数第二次试验了,说实话...这学期都快结课了...

  • 相关阅读:
    如何提高代码质量
    高效代码审查的十个经验
    代码质量管理(一)
    企业级分布式事务
    X/Open DTP——分布式事务模型
    patchca整合Spring MVC生成超炫的验证码
    兄弟,不要这样写服务器代码
    [转]预备知识—程序的内存分配
    [转]MMORPG服务器架构
    myEclipse使用有感
  • 原文地址:https://www.cnblogs.com/xyejava/p/12868140.html
Copyright © 2020-2023  润新知