Web基础
20175314 2020-5 《网络对抗技术》Exp8 Web基础 Week12
一、实践目标
1、实践对象
- Kali Linux
2、实践内容
- Web前端: HTML
- Web前端: Javascipt
- Web后端: MySQL基础
- Web后端: 编写PHP网页
- SQL注入: XSS攻击测试
二、基础知识
1、实践要求
- Web前端: HTML
- 能正常安装、启停Apache
- 理解HTML,理解表单,理解GET与POST方法
- 编写一个含有表单的HTML
- Web前端: Javascipt
- 理解JavaScript的基本功能,理解DOM
- 编写JavaScript验证用户名、密码的规则
- Web后端: MySQL基础
- 正常安装、启动MySQL,建库、创建用户、修改密码、建表
- Web后端: 编写PHP网页
- 连接数据库,进行用户认证
- 最简单的SQL注入: XSS攻击测试
- 用户能登陆,登陆用户名密码保存在数据库中,登陆成功显示欢迎页面
2、指令/参数
- Apache
- 启动
service apache2 start
- 启动
- MySQL
- 启动
/etc/init.d/mysql start
- 重启
/etc/init.d/mysqld restart
- 进入
mysql -u [用户名] -p
- 修改密码
update user set password=PASSWORD("[新密码]") where user='[用户名]';
- 查看现存的数据库
show databases;
- 查看现存的表
show tables;
- 建库
create database [库名];
- 建表并设置字段信息
create table [表名](username VARCHAR(n),password VARCHAR(n));
- 使用数据库
use [数据库名]
- 插入数据
insert into [表名] values('[表用户名]','[表密码]');
- 退出
exit/quit
- 启动
- PHP
- 安装
apt-get install php
- 安装PHP-MySQL编程库
apt-get install php-mysql php-mysqli
- 检查编程库
locate mysql.so/locate mysqli.so
- 安装
3、预备知识
GET/POST
- GET把参数包含在URL中,POST通过request body传递参数;
- GET产生一个TCP数据包;POST产生两个TCP数据包;
- GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
SQL注入
- 通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串达到欺骗服务器执行恶意的SQL命令,即利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句;
- 输入的用户名
' or 1=1#
中#
相当于注释符,把后面的内容都注释掉,1=1
是永真式,条件永远成立,和代码中select语句组合后变成select * from login5314_table where username='' or 1=1# ' and password=''
,不管密码是否输入正确,都能够成功登录。
XSS攻击
- 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets,CSS)的缩写混淆,XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中,比如这些代码包括HTML代码和客户端脚本,攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin policy),这种类型的漏洞由于被黑客用来编写危害性更大的phishing攻击而变得广为人知。
三、实践步骤
1、Web前端: HTML
-
service apache2 start
开启Apache服务 -
在浏览器中输入Kali IP打开Apache的默认网页
-
cd /var/www/html
进入Apache目录下,新建一个简单的含有表单的登录页面
-
进入登录页面
2、Web前端: JavaScript
-
新建表单提交到登录页面的注册页面,使用JavaScript实现对用户填写用户名和密码的非空判断并获取填写内容
-
进入登录页面,若没有填写用户名和密码
-
填写用户名和密码并点击
Submit
,提示框显示填写内容并跳转到登录页面
3、Web后端: MySQL基础
-
开启MySQL服务,使用root权限进入后查看现存的数据库
-
使用数据库mysql,修改root用户密码
-
新建数据库,设置字段基本信息建表后插入
username
password
信息
-
新建用户,并授予数据库表中select,insert,update,delete的权限
4、Web后端: 编写PHP网页
-
开启Apache2和MySQL服务查看地址和占用的端口
-
编写一段简单的代码测试PHP是否可以正常工作
<?php include($_GET["a"]); ?>
-
在浏览器中输入
[本机IP地址]/test.php?a=/etc/passwd
可以看到/etc/passwd
文件的内容
-
确认mysql,mysqli的安装结果
-
编写PHP代码连接MySQL数据库
-
在浏览器中输入
[本机IP地址]/[登录页面文件名]
进入登录页面输入用户名和密码,点击Submit
若用户名和密码都输入正确则会跳转到成功提示的PHP网页
-
若用户名或密码输入错误则会跳转到错误提示的PHP网页
5、SQL注入: XSS攻击测试
-
在浏览器中输入
[本机IP地址]/[登录页面文件名]
进入登录页面,用户名输入' or 1=1#
,密码随意输入
-
点击
Submit
成功登录
-
在login.php中加一行代码
-
进入登录页面,用户名输入
<img src="dc.jpg" />
,密码随意输入
-
点击
Submit
成功跳转到图片界面
四、实践报告
1、遇到的问题
-
问题1 子进程返回错误状态123在处理时有错误发生: firmware-b43-installer,firmware-b43legacy-installer
-
解决方案1 先尝试通过命令行卸载发生错误的软件包后再更新系统内核
apt-get remove --purge firmware-b43-installer apt autoremove firmware-b43-installer apt-get update apt-get dist-upgrade
-
但是结果还是同样,依然解决不了这个问题
-
最后通过修改
/var/lib/dpkg/status
文件内容,删除发生错误的软件包成功解决问题
-
问题2 软件包php-mysqli没有可安装的候选
-
解决方案2 虽然没有指定选择安装但是确认安装时显示安装成功
-
问题3 MySQL拒绝连接PHP网页
-
解决方案3 首先要检查代码是否有问题
-
login_5314.html
与login.php
中的name
定义要对应
-
login.php
与MySQL中的表名,用户名,密码,数据库名要对应,并且IP地址将本机IP地址修改为127.0.0.1
或localhost
统一到回环地址上以保证远程连接的可行
-
确认这些之后又遇到一个新的问题,MySQL中新建的mark用户没有访问权限,甚至更换root后也是如此
-
重启MySQL后查看用户是否允许外部连接
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '[root password]' WITH GRANT OPTION;
-
再次重新打开登录界面进行登录即可连接成功
2、基础问题回答
-
(1)什么是表单
- 表单标签 这里面包含了处理表单数据所用CGI程序的URL以及数据提交到服务器的方法;
- 表单域 包含了文本框、密码框、隐藏域、多行文本框、复选框、单选框、下拉选择框和文件上传框等;
- 表单按钮 包括提交按钮、复位按钮和一般按钮;用于将数据传送到服务器上的CGI脚本或者取消输入,还可以用表单按钮来控制其他定义了处理脚本的处理工作。
-
(2)浏览器可以解析运行什么语言
- HTML 超文本标记语言
- XML 可扩展标记语言
- Python,PHP,JavaScript,ASP等众多脚本语言
-
(3)WebServer支持哪些动态语言
- ActiveServerPages(ASP) WEB服务器端的开发环境,可以产生和执行动态的、互动的、高性能的WEB服务应用程序,采用脚本语言VBScript(Javascript)作为自己的开发语言;
- JavaServerPages(JSP) Sun公司推出的新一代网站开发语言,将Java从Java应用程序和JavaApplet之外的JavaServerPage,可以在Serverlet和JavaBean的支持下,完成功能强大的站点程序;
- HypertextPreprocessor(PHP) 跨平台的服务器端的嵌入式脚本语言,大量借用C,Java和Perl语言的语法,并耦合PHP自己的特性,使WEB开发者能够快速地写出动态产生页面。
3、实践收获与感想
- 通过本次实验很好地复习了HTML语言并学习了PHP语言和MySQL数据库的用法,简单了解了前端后台和数据库地搭建,初步尝试了简单的数据库注入和XSS攻击,总体来讲在操作上难度不大,但是我在在PHP网页连接MySQL时遇到了很多问题,感谢刘念老师的帮助得以成功解决。