20145231熊梓宏 《网络对抗》 实验8 Web基础
基础问题回答
●什么是表单?
表单是一个包含表单元素的区域,表单元素是允许用户在表单中输入信息的元素,表单在网页中主要负责数据采集功能,一个表单有三个基本组成部分:表单标签、表单域、表单按钮;
表单标签:这里面包含了处理表单数据所用CGI程序的URL以及数据提交到服务器的方法;
表单域:包含了文本框、密码框、隐藏域、多行文本框、复选框、单选框、下拉选择框和文件上传框等;
表单按钮:包括提交按钮、复位按钮和一般按钮,用于将数据传送到服务器上的CGI脚本或者取消输入,还可以用表单按钮来控制其他定义了处理脚本的处理工作。
●浏览器可以解析运行什么语言?
支持HTML(超文本标记语言)、XML(可扩展标记语言)以及Python、PHP、JavaScript、ASP等众多脚本语言。
●WebServer支持哪些动态语言?
JavaScript、ASP、PHP、Ruby等脚本语言,ASP基于IIS WEB SERVER,是微软的服务器端脚本技术,PHP基于APACHE WEB SERVER,与ASP有几分类似,都是一种在服务器端执行的嵌入HTML文档的脚本语言。
实践内容
Web前端 HTML基础
首先打开Apache
检查是否打开
cd var/www/html
进入到Apache的工作目录下,vi xzh.html
新建一个含有表单的html,编写一个简单的登录页面,用Firefox点开查看效果
注
●PHP页面(后台)暂时未编写,在action属性里面填的是#,即返回当前页面
●method属性中包含三种方法跳转到后台页面:head、get、post;head一般是程序员专用,get是用来从服务器上获得数据,Post是用来向服务器上传递数据,get可以在跳转URL上看到用户名等信息,而post无法看到,所以就安全性而言,一般选择post方法,且get方法传输数据量也较少;
Web前端 JavaScript基础
JavaScript是一种属于网络的脚本语言,通常JavaScript脚本是通过嵌入在HTML中来实现自身的功能的。
DOM是文档对象模型,DOM可以以一种独立于平台和语言的方式访问和修改一个文档的内容和结构,换句话说,这是表示和处理一个HTML或XML文档的常用方法。即:要改变页面的某个东西,JavaScript就需要获得对HTML文档中所有元素进行访问的入口。这个入口,连同对HTML元素进行添加、移动、改变或移除的方法和属性,都是通过DOM来获得的。
使用JavaScript编写代码,使得登录页面可以验证并提示用户名、密码是否为空,查看效果
Web后端 SQL基础
MySQL是一个数据库管理系统,类似的还有SqlServer、oracle等等,在此实验中kali中用的是MySQL。
先输入/etc/init.d/mysql start
指令开启mysql服务,输入mysql -u root -p
,并根据提示输入密码,默认密码为p@ssw0rd
,进入MySQL,在MySQL中输入命令后面都要带一个分号作为命令结束符:
对密码进行修改:输入use mysql;,选择mysql数据库;输入update user set password=PASSWORD("新密码") where user='root';,修改密码;输入flush privileges;,更新权限;
接着输入quit退出MySQL,重新进入,使用新密码登录成功,说明修改成功:
我们先使用create database 库名
;建立一个数据库;使用show databases
;查看存在的数据库;使用use 库名
;使用我们创建的数据库:
接着使用create table 表名 (字段设定列表);建立数据表,数据表是数据库中一个非常重要的对象,一个数据库中可能包含若干个数据表;使用show tables查看存在的数据表:
使用insert into 表名 values('值1','值2','值3'...);插入数据;使用select * from 表名查询表中的数据:
可在MySQL中增加新用户,使用grant select(insert,update,delete) on 数据库.* to 用户名@登录主机 identified by "密码";指令,如图所示,增加新用户之后,退出,重新使用新用户名和密码进行登录,登录成功说明增加新用户成功:
Web后端:PHP基础
PHP是一种通用开源脚本语言,语法吸收了C语言、Java和Perl的特点,主要适用于Web开发领域。它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。
在/var/www/html目录下新建一个PHP测试文件,简单了解一下它的一些语法:test.php
浏览器打开localhost:80/test.php?a=/etc/passwd查看/etc/passwd文件的内容
利用PHP和MySQL结合之前编的登录网页进行简单的用户身份认证:5231login.php,参考老师代码,修改部分代码:对应的数据库信息,比如数据库表什么的,还要将加密密码的函数去掉,否则数据库密码没有加密登录时比对不上必然无法登陆,而且之前的xzh.html中的method方法要改为相应的get
,然后将显示用户名的代码的注释去掉,以显示个人信息;最后不能忘了将xzh.html中action后的属性修改为5231login.php
,否则前端和后台之间无法建立连接
查看效果
还可以再编一个更加友好的页面welcome.php,再在5231login.php中加一行代码header("Refresh:5;url=welcome.php");,实现在5秒之后跳转到welcome.php页面,在这里welcome.php的代码要重新编写,参考了同学的代码,修改了里面的颜色设置的参数,但是貌似变化不大,代码很长,还有关于一些页面动画的设计,大概看懂了,挺高端的
SQL注入
SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。
●在用户名输入框中输入' or 1=1#,密码随便输入,这时候的合成后的SQL查询语句为select * from xzhtable where username='' or 1=1#' and password='',#相当于注释符,会把后面的内容都注释掉,而1=1是永真式,所以这个条件肯定恒成立,所以不论怎样都能够成功登陆
●我们还可以通过SQL注入将用户名和密码保存在数据库中,但是得修改一下之前的代码,因为我们之前编的代码中if ($result = $mysqli->query($query_str))
这条判断语句不允许多条sql语句执行,所以将它改成if ($result = $mysqli->multi_query($query_str))
便能实现执行多个sql语句,接着在用户名输入框中输入';insert into xzhtable values('yyqx','1128','15925199xxx');#
,登录
查看数据库,看用户信息是否插入成功
使用新的用户信息登录,注意要将之前修改的代码再次修改回来,因为此时只有一条sql语句,否则登录失败
XSS攻击测试
XSS攻击:跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆。故将跨站脚本攻击缩写为XSS。XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。XSS之所以会发生, 是因为用户输入的数据变成了代码。 所以我们需要对用户输入的数据进行HTML Encode处理。 将其中的"中括号", “单引号”,“引号” 之类的特殊字符进行编码。
学习过程参考了该链接资料:了解xss
先是和其他同学一样,用xzh读取/var/www/html目录下的图片:
但是不幸是这个效果,开始以为是图片过大,截图之后还是不行。。。
查看相关图片信息。发现服务器没有权限访问图片,问了大神,貌似与login登录的脚本有关?
为了证明存在xss漏洞,准备测试脚本:><script>alert(document.cookie)</script><!-- <script>alert(document.cookie)</script><!--
在网页中的Textbox或者其他能输入数据的地方,输入这些测试脚本, 看能不能弹出对话框,能弹出的话说明存在XSS漏洞,修改xzh.html中文本框的长度和maxlength之后,确实弹出来对话框,说明xss漏洞确实存在
实践体会
我觉得这次实验最有意思的还是sql注入攻击,虽然做得比较简单,但我觉得研究这部分代码比简单的前端编程有趣,通过不同的sql语句改变数据库中的信息觉得很神奇。