2018-2019-2 网络对抗技术 20165230 Exp8 Web基础

实验目的

理解HTML,学会Web前端、Web后端和数据库编程及SQL注入、XSS攻击测试
教程php

实验内容

  • 操做程序规律
    • 运行脚本或可执行文件
    • 查看配置文件
    • 出错找日志
  • Web前端HTML
    • 能正常安装、启停Apache。理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML。
  • Web前端javascipt
    • 理解JavaScript的基本功能,理解DOM。编写JavaScript验证用户名、密码的规则。
  • Web后端:MySQL基础:正常安装、启动MySQL,建库、建立用户、修改密码、建表
  • Web后端
  • 最简单的SQL注入,XSS攻击测试
    • 功能描述:用户能登录,登录用户名密码保存在数据库中,登录成功显示欢迎页面。

实验步骤

(一)Web前端HTML

Apache

  • 使用service apache2 start启动Apache。使用netstat -aptn查看端口信息,看到80端口被Apache2监听,启动成功
    html

    若是有其余应用有端口冲突,能够修改ports.conf前端

  • 对Apache进行测试:打开网页127.0.0.1:80可打开上次实验克隆的网页,在Apache的工做目录下/var/www/html编辑一个测试文件,咱们就能够只在在网页打开看到了
    java

HTML编程

  • 编写一个简单网页,包含一个表单,输出用户名、密码而后提交,提交以后会跳转到“login.php”mysql

  • 在Apache的工做目录下新建一个html文件并经过浏览器打开
    linux

(二) Web前端javascipt

基础知识理解

  • 什么是FORM(表单)
    • 表单至关于一个数据容器,提交表单的同时会将容器中的全部数据提交给后台处理
  • 表单的两种提交方法,GET和POST
    • GET - 从指定的资源请求数据,只应当用于取回数据,不该在处理敏感数据时使用
    • POST - 向指定的资源提交要被处理的数据
    GET POST
    可被缓存 不会被缓存
    保留在浏览器历史记录中 不会保留在浏览器历史记录中
    可被收藏为书签 不能被收藏为书签
    对数据有长度限制 对数据没有长度限制
  • Javascript事件
    • 指的是能够出发JavaScript的条件,如点击、划过、选中等

JavaScript编程

  • 在前面html编程的基础上,加上判断用户名和密码的JavaScript语句
function submit()
{ 
    if(document.form.password.value==""   || document.form.username.value=="")
    {
        alert("please input your name!");
        window.location.href="login.html"
    
    }   
    else
       form.submit();
}
  • 按照老师的教程,将原来的action改为一个php文件的名字,例如:<form action="login.php" method="post"
  • 要注意添加javascript的相关代码,个人代码实现了利用javascript检查用户名或密码是否为空,若为空则弹出提示框并从新跳转回登陆界面:

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

  • 前端的设计告一段落,接下来就要处理咱们从网页上提交的数据了,这里咱们使用MySQL来处理数据git

  • 启动MySQL:直接运行/etc/init.d/mysql start开启MySQL服务就能够
    web

  • 登陆数据库:mysql -u root -p,密码为p@ssw0rd,直接复制粘贴进去就行
    sql

  • show databases;查看数据库基本信息注意这里每一个sql语句要以分号为结尾

  • 输入use mysql;选择使用mysql这个数据库

  • 输入select user, password, host from user;查看当前用户信息

  • 输入update user set password=PASSWORD("新密码") where user='root';更改密码
  • 更新权限flush privileges;

  • 退出quit;再使用新密码从新登陆mysql -u root -p,用咱们更改修改的密码就能够了

  • 使用create databases `数据库名`;建立一个名为tky的数据库,使用show databases;能够看到建立成功

  • 使用咱们刚刚建立的数据库use tky

  • 使用create table 表名 (字段1,字段2 ···);,建立数据表。
    • create table user (username VARCHAR(20),password VARCHAR(20));
  • 使用insert into 表名 values('数值1''数值2''···');添加数据
    • insert into user values('20165230','5230');向表中username password两个字段插入数据,即用户名为20165230,密码为5230
  • 建立一个新用户便于后面的实验,给新用户提供全部的权限grant all privileges on 数据库名.* to 用户名@localhost identified by '密码';,更新权限flush privileges;并退出

  • 使用咱们刚刚建立的用户名和密码登陆数据库,登录成功
  • 重复上面的步骤,建数据库、建表、插入数据。值得注意的是,咱们在以前只为新用户的某个具体的数据库分配了权限,所以这里只能建立名字和前面同样的数据库,若是想要建立新的数据库,能够按照这里的[教程]先建立用户、建立数据库再分配权限。

(四)Web后端:编写PHP网页,链接数据库,进行用户认证

  • 前面提到咱们的网页会将数据提交到login.php,所以要想处理数据,咱们要编写本身的PHP网页。若是电脑里没有php,使用sudo apt-get install php安装
  • 在工做目录下编写测试文件

    <?php
    include($_GET["a"]);
    ?>
  • 浏览器打开 127.0.0.1:80/test.php?a=/etc/passwd可看到/etc/passwd文件的内容,以下图所示

注:若是想这里测试成功,首先须要保证apache成功开启(service apache2 start)

  • 编写获取表单数据,myspli的参数分别为本机IP地址、用户名、密码、数据库名

  • 在网页输入同户名和密码,能够看到成功链接到数据库

(五)最简单的SQL注入,XSS攻击测试

SQL注入

SQL注入漏洞是指在Web应用对后台数据库查询语句处理存在的安全漏洞。也就是,在输入字符串中嵌入SQL指令,在设计程序中忽略对可能构成攻击的特殊字符串的检查。后台数据库将其认做正常SQL指令后正常执行,可能实现对后台数据库进行各类操做,甚至形成破坏后台数据库等严重后果。

  • 编写php页面的时候咱们直接将输入的参数与查询语句进行链接,这样咱们只要输入一些特殊字符如注释的符号就能够进行SQL注入攻击了
  • 输入框中键入'or 1=1 -- 而且提交,能够看到链接成功。这是由于此时查询语句为select * from users where name='' or 1=1 --'and password='1';而“--”在MySQL表明注释,查询语句实际为select * from users where name='' or 1=11=1为永真式,则这个条件恒成立,所以数据库不会报错

  • 攻击成功!

  • 那咱们是否是也能够经过注入插入一个新的用户呢?要注意的是咱们以前编的代码if ($result = $mysqli->query($query_str))是不容许输入多条查询语句的,现实生活中也应该是不容许的,但这里为了实验咱们须要代码能容许输入多条查询语句。
  • 修改代码为if ($result = $mysqli->multi_query($query_str)),在登陆界面输入';insert into user values('tky','tky');--
  • 能够看到虽然登陆失败,但咱们已经在表中插入了一个新用户

  • 这时,咱们要将代码改回原来的,再使用新的用户名和密码就能够登陆了

  • 咱们平常接触的网页都是不容许输入多条查询语句的,并且为了不网页遭受SQL注入,在编写后端php网页的时候就要注意将查询语句分开,或者对输入的字符串进行处理,去掉注释符等特殊符号,这样才能使网页更安全。

XSS攻击测试

XSS就是在网站任何接受正常文本输入的地方,输入Javascript脚本,并让脚本执行。

  • XSS分为三种类型:
    • 反射型:发出请求时,XSS代码出如今URL中,做为输入提交到服务器端,服务器端解析后响应,XSS随响应内容一块儿返回给浏览器,最后浏览器解析执行XSS代码,这个过程就像一次发射,因此叫反射型XSS。
    • 存储型: 存储型XSS和反射型的XSS差异就在于,存储型的XSS提交的代码会存储在服务器端(数据库,内存,文件系统等),下次请求目标页面时不用再提交XSS代码。
    • DOM:不通过后端,DOM—based XSS漏洞是基于文档对象模型Document Objeet Model,DOM)的一种漏洞,dom - xss是经过url传入参数去控制触发的。
  • 也就是说,用户提交的数据中若是含有js代码,从数据库中读出来的时候这段js代码就变成了可执行的代码。
  • 在用户名输入框中输入<img src="login.png " />,读取/var/www/html目录下的图片
  • 运行结果以下所示,正确显示了网页背景图:

实验问题回答

  • 什么是表单
    • 表单是用来采集输入的数据的
    • 表单由三个部分组成
      • 表单标签:这里面包含了处理表单数据所用CGI程序的URL以及数据提交到服务器的方法
      • 表单域:包含了文本框、密码框、隐藏域、多行文本框、复选框、单选框、下拉选择框和文件上传框等
      • 表单按钮:包括提交按钮、复位按钮和通常按钮;用于将数据传送到服务器上的CGI脚本或者取消输入,还能够用表单按钮来控制其余定义了处理脚本的处理工做
  • 浏览器能够解析运行什么语言。
    • 浏览器能够解析HTML,XML,Python,PHP,JavaScript,ASP等脚本语言。
  • WebServer支持哪些动态语言
    • ASP全名Active Server Pages,是一个WEB服务器端的开发环境,ASP采用脚本语言VBScript(Java script)做为本身的开发语言。
    • PHP是一种跨平台的服务器端的嵌入式脚本语言。它大量地借用C,Java和Perl语言的语法,并融合PHP本身的特性,使WEB开发者可以快速地写出动态产生页面
    • JSP全名Java ServerPage,能够在Servlet和JavaBean的支持下,完成功能强大的站点程序

实验总结

此次实验在本来的网页编程基础上增长了不少如php、数据库链接的功能,让咱们直观地体会到一个网站运行的过程当中参数的传递和应用,更明白网页攻击的原理与过程。作此次实验的过程当中想到了不少以前使用过的漏洞,要想作一个彻底安全的网页要考虑不少,数据库参数的链接、字符串等都要进行一些特殊的处理才能真正达到安全的须要。

参考资料

相关文章
相关标签/搜索