实验内容
Web前端HTML
Web前端javascipt
Web后端:MySQL基础:正常安装、启动MySQL,建库、创建用户、修改密码、建表
Web后端:编写PHP网页,连接数据库,进行用户认证
最简单的SQL注入,XSS攻击测试
实验过程
Web前端HTML
- 输入命令
systemctl start apache2
打开apahce
,并查看端口号,确认apache
开启:
- 在kali浏览器中输入
127.0.0.1:5233
,如图所示,说明我们Apache
正常工作:
- 进入
Apache
工作目录/var/www/html
,新建一个lgl1.html
文件,编写一个含有表单能实现输入用户名、密码实现登录的html:
Web前端:javascipt基础
- 我们可以使用JavaScript来编写一个验证用户名、密码的规则,直接在之前的代码上进行修改,重命名为
lgl2.html
:
Web后端:MySQL基础
简单的应用:开启mysql,并更改用户名密码;建立库表,并插入数据;实现网页和数据库的连接;
输入
/etc/init.d/mysql start
打开mysql
服务,输入mysql -u root -p
,以root
身份登录,根据提示输入密码,默认密码为p@ssw0rd
,进入MySQL;用
show databases;
查看基本信息;
重新输入
mysql -u root –p
,使用新密码登录;创建数据库和新表。命令如下:
create database lgl; use lgl; create table lgl (username VARCHAR(20),password VARCHAR(32),telephone VARCHAR(11));
使用
insert into 表名 values('值1','值2','值3'...);
插入数据;使用select * from 表名;
查询表中的数据:
Web后端:PHP网页
- 在
/var/www/html
目录下新建一个test.php
测试一下PHP。
<?php
echo ($_GET["a"]);
include($_GET["a"]);
echo "This is lgl php test page!<br>";
?>
- 浏览器打开```localhost:5233/test.php?a=/etc/passwd可看到/etc/passwd文件的内容:
- 简单测试完成后,我们可以利用PHP和MySQL结合之前编的登录网页进行简单的用户身份认证,可以参考老师给的代码编写
login.php
,代码如下所示:
<?php
$uname=($_POST["username"]);
$pwd=($_POST["password"]);
/* echo $uname; */
$query_str="SELECT * FROM lgl where username='{$uname}' and password='{$pwd}';";
/* echo "<br> {$query_str} <br>";*/
$mysqli = new mysqli("127.0.0.1", "lgl", "123456", "lgl");
/* check connection */
if ($mysqli->connect_errno) {
printf("Connect failed: %s\n", $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();
?>
- 先将之前编的登录网页的
lgl2.html
代码中form
的action
属性由#
改成login.php
,即登录后跳转到login.php
,再在浏览器中输入localhost:5233/lgl2.html
访问自己的登录页面: -
- 登录成功如下:
-
- 登录失败如下:
SQL注入
- 在用户名输入框中输入
' or 1=1#
,随便输入密码,这时候的合成后的SQL查询语句为select * from lgl where username='' or 1=1#' and password=''
,#
相当于注释符,会把后面的内容都注释掉,而1=1
是永真式,所以这个条件肯定恒成立,所以能够成功登陆:
- 还可以通过SQL注入将用户名和密码保存在数据库中,首先修改之前编的代码中
if ($result = $mysqli->query($query_str))
这条判断语句为if ($result = $mysqli->multi_query($query_str))
,这样便能实现执行多个sql语句,接着在用户名输入框中输入';insert into use values('liuer','123456','12345678933');#
,拆开来看就是SELECT * FROM lgl WHERE username='';
、insert into lgl values('liuer','123456','12345678933');
,接着登录:
XSS攻击
- 在登录的用户名中输入:
<img src="1.gpg" />liu</a>
,读取/var/www/html
目录下的图片:
基础问题回答
什么是表单?
-
- 答:表单是一个包含表单元素的区域,表单元素是允许用户在表单中(比如:文本域、下拉列表、单选框、复选框等等)输入信息的元素,表单在网页中主要负责数据采集功能,一个表单有三个基本组成部分:表单标签、表单域、表单按钮;
表单标签(