20145239杜文超《网络对抗》- Web基础
基础问题回答
1、什么是表单?
-
表单是一个包含表单元素的区域。
-
表单元素是允许用户在表单中(比如:文本域、下拉列表、单选框、复选框等等)输入信息的元素。
-
表单使用表单标签(<form>)定义。
2、浏览器可以解析运行什么语言?
- 支持HTML(超文本标记语言)、XML(可扩展标记语言)以及Python、PHP、JavaScript、ASP等众多脚本语言。
3、WebServer支持哪些动态语言?
- 常用的有ASP语言,PHP语言和JSP语言。
实验总结与体会
本次实验具有一定的难度。理解前端html以及JS和后台php以及数据库的关系很重要。好在上学期有学过网络安全编程基础,对于html语言还是比较熟悉,特别是登陆页面的html代码也基本上了然于心了。PHP脚本是我第一次接触,挺生疏的,代码基本上完全参照了同学和老师的,就这样在后面SQL注入需要一次执行多条命令的时候还是出了问题,加了muti之后无法成功注入,耽误了好几个小时。数据库以前用的是access这次用的是mysql,没有图形化界面在命令行下使用,也是一次学习的过程,而且我觉得学好数据库对以后也是很有帮助的。
实践内容
前端HTML
输入apachectl start开启Apache。开启失败,使用netstat -aptn查看端口占用情况。
vi /etc/apache2/ports.conf修改端口,此处我设置成了自己的学号。
再次查看apache端口已改为5239。
Apache服务开启后,我们在浏览器中输入localhost:5239进行查看.看到了上次克隆的网页,说明apache工作正常。
编写一个含有表单的html。
浏览器里简单看一下结果,因为我们的action填的是#,所以现在输入如何东西都不会跳转,只会回到当前页面。
前端javascipt
1.相关概念:JavaScript是一种广泛用于客户端Web开发的脚本语言,常用来给HTML网页添加动态功能,比如响应用户的各种操作。
2.文档对象模型(Document Object Model,简称DOM,是W3C组织推荐的处理可扩展标志语言的标准编程接口。
此时我们重新编写刚才的html文件,使其具有个验证用户名、密码的规则。
后台MySQL
输入/etc/init.d/mysql start指令开启mysql服务。输入mysql -u root -p登陆,初始密码p@ssw0rd。
输入use mysql;进入数据库,输入update user set password=PASSWORD("新密码") where user='root';修改密码,此处我改为了自己的学号。
最后要输入flush privileges;更新权限。quit退出后尝试用新密码登陆,成功进入即密码修改成功。
使用create database 库名;建立一个数据库。使用show databases查看存在的数据库,然后use dwc5239。
在我们的数据库里建一个新数据表,create table 5239table(username VARCHAR(50),password VARCHAR(50),telephone VARCHAR(11));
输入show tables查看已有的数据表。输入insert into 表名 values('值1','值2','值3'...);给数据表中插入数据,包括三项用户名,密码,联系电话。
插入完可以使用select * from 5239table 查看一下。
我们也可以使用如下命令增加mysql新用户:grant select(insert,update,delete) on 数据库.* to 用户名@登录主机 identified by "密码";
用刚注册的用户尝试登陆一下,登陆成功!
后台PHP测试
vi /var/www/html/dwc_test.php新建一个php测试文件。
在浏览器输入localhost:5239/dwc_test.php测试一下,如图所示,测试成功。
测试完成后,我们可以利用PHP和MySQL结合之前编的登录网页进行简单的用户身份认证。结合老师给出的代码,vi login.php修改几个部分:
<?php $uname=($_POST["username"]); $pwd=($_POST["password"]); /* echo $uname; */ $query_str="SELECT * FROM 5239table where username='{$uname}' and password='{$pwd}';"; /* echo "<br> {$query_str} <br>";*/ $mysqli = new mysqli("127.0.0.1", "root", "20145239", "dwc5239"); /* check connection */ if ($mysqli->connect_errno) { printf("Connect failed: %s ", $mysqli->connect_error); exit(); } echo "connection ok!"; /* Select queries return a resultset */ if ($result = $mysqli->query($query_str)) { if ($result->num_rows > 0 ){ echo "<br> Wellcome login Mr/Mrs:{$uname} <br> "; } else { echo "<br> login failed!!!! <br> " ; } /* free result set */ $result->close(); } $mysqli->close(); ?>
root:MySQL的用户名
20145239:登录密码
dwc5239:数据库的库名
开头两行代码使用post而不是get,记得sql语句是从5239table里比较数据。
$uname=($_POST["username"]);
$pwd=($_POST["password"]);
把html里的action填写上login.php,直接跳转。
大功告成!快来测试一下,在浏览器输入localhost:5239/test5239.html。
在登录页面中输入数据库中存有的用户名和密码并点击登录进行用户认证,如果登录成功,如下所示。
登陆失败时,如下显示。
SQL注入
SQL注入是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。
简单地说,SQL注入的产生原因通常是将用户输入的字符串,当成了 “sql语句” 来执行。
在账户输入框中输入' or 1=1#,密码随便敲。
合成语句select * from zn where username='' or 1=1#' and password=''
#相当于注释符,会把后面的内容都注释掉,而1=1是永真式,所以这个条件肯定恒成立,所以能够成功登陆。
在php脚本里,把if ($result = $mysqli->query($query_str))改为$result = $mysqli->multi_query($query_str)
实现执行多个sql语句,便可以通过SQL注入将用户名和密码保存在数据库中。
输入如下命令。相当于SELECT * FROM 5239table WHERE username='';、insert into 5239table values('lsj','5240','17888811781');
其实我当时是失败了。后来我使用了罗天晨同学的php代码,注入成功了,具体可以参照她的博客以及代码托管:http://www.cnblogs.com/alovera/p/6740640.html
用注入的信息登陆一下,成功了。
XSS攻击测试
XSS攻击:跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆。故将跨站脚本攻击缩写为XSS。XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin policy)。这种类型的漏洞由于被骇客用来编写危害性更大的phishing攻击而变得广为人知。对于跨站脚本攻击,黑客界共识是:跨站脚本攻击是新型的“缓冲区溢出攻击“,而JavaScript是新型的“ShellCode”。
在用户名下输入<img src="111.png" />20145239</a>,密码随便敲。
登陆后,它会显示/var/www/html目录下的那张图片。