网络对抗 Exp8 Web基础 20154311 王卓然

Exp8 Web基础

1. 实验内容

(1) Web前端HTML:能正常安装、启停Apache。理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML。

(2) Web前端javascipt:理解JavaScript的基本功能,理解DOM。编写JavaScript验证用户名、密码的规则。

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

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

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

功能描述:用户能登陆,登陆用户名密码保存在数据库中,登陆成功显示欢迎页面。

课题负责人需要完成:登陆后可以发贴;会话管理。

2.实验步骤

Web前端:HTML基础

使用指令 vi /etc/apache2/ports.conf 修改配置文件中的端口号为4311。

使用指令 service apache2 restart 打开Apache服务,使用 netstat -aptn 查看一下端口占用。

 OK没有被占用,在linux下的浏览器里输入 localhost:4311 看Apache是否正常工作。

 

 由于主机IP又变了,而且目录下的文件也被我清了一遍所以访问后显示的是Apache介绍网页。

 cd 转到目录 /var/www/html 下编辑一个 html 文件。

添加代码如上,就是创建一个空有架子的表格,表中代码 <form action="action_page.php" method="POST" name="登录"> 用来完成提交动作,这里action的地址设为了action_page.php但实际没有这个页面,我们也就接收不到,之后我们自己创建一个php服务器再改过去,还有提交方法分为GET和POST,选POST是因为安全性更高。

javascipt 编写登录规则

接着我们需要逐渐完善我们的网页功能,添加javascript代码来制定登录规则,当用户名及密码为默认或为空时提示输入内容,否则不允许登录。

 

效果如下。

 

为了好看点去网上down了个javascript+CSS的动态代码,装上。

 

然而我的登录框框被排斥在外了~~ 百度了下要怎么弄,然而涉及了一些javascript函数的穿插调用就不太会了,弄了半天也没成功,只能放弃。

Web后端:MySQL基础

输入指令 /etc/init.d/mysql start 开启mysql服务,输入指令 mysql -u root -p ,会提示要你输入密码(这里的密码貌似可以随便输,因为你下次再进入的话ID号会自动加1也就是一个新得用户了,因此输什么密码好像不影响)。

不过在不使用的时候推荐使用quit命令正常退出,别直接叉掉,我直接叉掉后再开启不让我登录~~~,解决办法就是先停止mysql,接着在它的配置文件里插入一条跳过密码验证的代码,登录后修改密码,提升权限,重新启动,就能正常使用了,方法参考下面链接。

https://blog.csdn.net/yangxt/article/details/17200611。

使用 create database `库名`; 成功创建一个数据库,使用指令 show databases;就可以查看到已有的数据库。

 

使用我们创建的数据库,使用指令 create table wzr (username VARCHAR(20), password VARCHAR(20)); 创建一张表格。

使用指令 show tables; 查看表格,输入 describe 表名;可以查看表内设定的参数。

使用指令 insert into wzr values('wzr4311','20154311'); 插入数据,使用select指令可以查看到我们添加的数据。

到此就基本创建了一个有一条数据一张表的数据库。

Web后端:PHP基础

cd 转到 /var/www/html 目录编写一个php文件,代码如下。


<?php

$uname=($_POST["用户名"]);
$pwd=($_POST["密码"]);

echo $_POST["用户名"];
echo $_POST["密码"];

/*echo $uname; */

$query_str="SELECT * FROM wzr where username='{$uname}' and password='{$pwd}';";//*后面是表名,where后是变量名

/* echo "<br> {$query_str} <br>";*/

$mysqli = new mysqli("localhost", "wzr", "20154311", "20154311");//用户名,密码,数据库名

/* check connection */
if ($mysqli->connect_errno) {
printf("Connect failed: %s\n", $mysqli->connect_error);
exit();
}
echo "数据库连接成功!";
/* Select queries return a resultset */
if ($result = $mysqli->query($query_str)) {
if ($result->num_rows > 0 ){
echo "<br> 登录成功,欢迎您 Mr/Mrs:{$uname}! <br> ";
} else {
echo "<br> 登录失败,请检查您的用户名或密码! <br> " ;
}
/* free result set */
$result->close();
}

$mysqli->close();

?>

 

 一开始使用用户root连接数据库提示被拒绝访问,虽然一开始就觉得很奇怪为什么root登录密码那么随意,因为之前出错的时候在网上百度,看其他人用root登录都是唯一密码的,感觉这就像是个进入mysql的通道,就是在你没有用户身份时以管理员权限进入mysql的一种途径,而不被承认为一个拥有权限的用户。

因此,不得不自己创建一个用户并授予足够的权限,才能进行接下去的实验,不过奇怪的是看齐帅的博客里,他创的用户需要重新创建表格,而我授予权限后是相当于直接与root连接了一样(之前就用的root创建的表格),仍然可以使用之前创建的表格。

几经波折,成功连接!

SQL注入

最简单的公式:' or 1=1# ,密码可随意。

 

我们还可以通过SQL注入将用户名和密码保存在数据库中,但是得修改一下之前的代码,因为我们之前编的代码中if($result = $mysqli->query($query_str))这条判断语句不允许多条sql语句执行,所以将它改成if ($result = $mysqli->multi_query($query_str))便能实现执行多个sql语句,接着在用户名输入框中输入 ';insert into wzr values('wzr','451311');#SELECT * FROM wzr WHERE username='' insert into wzr values('wzr','451311'); 提示登录失败。

 

然后到数据库里查看表个内容就发现多了一条用户信息~~~下次就能直接用这条用户信息登录。

 

XSS攻击测试

复制一张图片到网页所在目录下,打开网页在用户名处输入 <img src="20154311.jpg">123</a> ,密码随意,回车后效果如下。

 

 我的图片被吞了~~~,右键查看显示我没有权限?!

推测是apache权限不够,百度了下说是因为我的虚拟主机目录为非apache安装目录下的htdocs,所以违反了apache对默认对网站根访问权限。

方法是要修改一个httpd.conf文件,但是全盘搜索还是没找到,又去apache目录下的配置文件一个一个看了一遍也没找到符合修改的地方,无奈~~~。

后来参考同学的做法,使用指令 chmod 755 文件名 (命令需要转到文件目录执行)直接把权限赋予要执行的两个文件,成功打开。

发帖和会话管理的实现

这一部分的代码都是参考去年学长的,不过自己修改下来也十分费心费力,而且刚开始还有些地方的代码没完全弄懂,以为自己在原来的基础上修改下就能蒙混过关,然而并没有想的那么简单,每次以为应该可以了,结果还是有问题,弄了半天才弄好,早知道用最直接的办法从头弄一遍算了~~~

 登录成功后如下,可以选择退出登录和发帖。

 

选择发帖,编辑内容,提交!

跳转到如下界面,可以选择查看发过的帖子、继续发帖、返回或者退出登录。

其他功能都挺正常,但是查看所发帖子内容却不行,打开是空的,想找存储帖子内容的data.txt文件,也没有找到。

看了学长的帖子才知道,原来是权限不够,这个文件无法创建,也就没办法存储,在网页所在目录下手动创建一个data.txt,并通过指令 chmod a+rwx 赋予权限,再尝试发帖,可以保存了。

 

3.问题回答

(1)什么是表单

  • 表单是一个包含表单元素的区域,表单元素是允许用户在表单中(比如:文本域、下拉列表、单选框、复选框等等)输入信息的元素,表单在网页中主要负责数据采集功能。
  • 一个表单有三个基本组成部分:
    • 表单标签:包含了处理表单数据所用CGI程序的URL以及数据提交到服务器的方法。
    • 表单域:包含了文本框、密码框、隐藏域、多行文本框、复选框、单选框、下拉选择框和文件上传框等。
    • 表单按钮:包括提交按钮、复位按钮和一般按钮;用于将数据传送到服务器上的CGI脚本或者取消输入,还可以用表单按钮来控制其他定义了处理脚本的处理工作。

(2)浏览器可以解析运行什么语言。

  • HTML(超文本标记语言)、XML(可扩展标记语言)以及Python、PHP、JavaScript、ASP等众多脚本语言。
  • 超文本标记语言:HTML
  • 可扩展标记语言:XML
  • 脚本语言:ASP、PHP、Script、JavaScript、VBScript、Perl、Python、ColdFusion、Java、JSP等

(3)WebServer支持哪些动态语言

      ASP语言,PHP语言和JSP语言

  • ASP:即Active Server Pages,是MicroSOft公司开发的服务器端脚本环境,可用来创建动态交互式网页并建立强大的web应用程序。
  • PHP:即Hypertext Preprocessor,是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,主要适用于Web开发领域。PHP独特的语法混合了C、Java、Perl以及PHP自创的语法。
  • JSP:即Java Server Pages,其根本是一个简化的Servlet设计。JSP技术有点类似ASP技术,它是在传统的网页HTML文件中插入Java程序段和JSP标记,从而形成JSP文件,)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。

4.实验总结与体会

这次实验所涉及的知识点就较为广泛了,而且我们目前也都只是能做点最简单的模块内容,虽然对一个网页大致的框架有所了解,但要想真正实现其中的工作量难以想象,同时还要考虑到下次实验中将会涉及的漏洞,BUG之类的安全问题,真是想想就恐怖!

posted @ 2018-05-16 16:00  20154311王卓然  阅读(184)  评论(0编辑  收藏  举报