20155338《网络对抗》Exp8 Web基础
20155338《网络对抗》Exp8 Web基础
实验内容
Web前端:HTML
- 使用
netstat -aptn
查看80端口是否被占用,如果被占用了就kill 原进程号,我的没有被占用。
- 空闲就用
apachectl start
开启Apache,然后再次用netstat -aptn
查看端口占用情况。
- 在kali的火狐浏览器上输入
localhost:80
测试apache是否正常工作
- 进入Apache工作目录
/var/www/html
,新建一个csj5338.html文件,编写一个含有表单能实现输入用户名、密码实现登录的html。
- 打开浏览器访问localhost/csj5338.html,出现刚才编写的HTML页面。
javascipt
- 使用javascipt修改之前csj5338的代码,完善Form表单,并在浏览器上测试,如下图所示
Web后端:MySQL基础
- 用
/etc/init.d/mysql start
开启sql服务。
- 输入
mysql -u root -p
用账号root登录,并根据提示输入对应密码,我的MySQL默认密码就是直接回车,进入Mysql。
修改MySQL的root用户密码:
- 用
use mysql;
,选择mysql数据库。 - 用
select user, password, host from user;
,查看mysql库中的user表中存储着用户名、密码与权限。
- 输入
UPDATE user SET password=PASSWORD("新密码") WHERE user='root';
更改密码。 - 用
flush privileges;
进行更新。
- 重新登录验证密码更改成功
MySQL建表建库
CREATE SCHEMA `库表的名称`;
CREATE TABLE `库表的名称`.`users` (
`userid` INT NOT NULL COMMENT '',
`username` VARCHAR(45) NULL COMMENT '',
`password` VARCHAR(256) NULL COMMENT '',
`enabled` VARCHAR(5) NULL COMMENT '',
PRIMARY KEY (`userid`) COMMENT '');
- 输入
use 库表名
使用刚建的库表。并输insert into users(userid,username,password,enabled) values(ID号,'用户id',password("用户密码"),"TRUE");
添加新用户
- 使用
select * from 表名;
查询表中的数据,*表示查询所有的参数信息,也可以指定某一参数比如username来进行查询。
- 键入
mysql -u pc -p
使用新用户进行登录,验证新用户是否建立成功,登录成功,说明新建用户成功。
PHP测试
- 新建一个PHP测试文件
vi /var/www/html/test.php
,输入如下
- 用浏览器打开
localhost/test.php
,可以看见如下界面,测试成功
- 简单测试之后,我们可以利用PHP和MySQL结合之前编的前端的代码,完善这个登录系统,做到简单的用户身份认证,进行改进编写了
Login.php
。
<?php
$uname=($_POST["username"]);
$pwd=($_POST["password"]);
/* echo $uname; */
$query_str="SELECT * FROM pc where username='{$uname}' and password='{$pwd}';";
/* echo "<br> {$query_str} <br>";*/
$mysqli = new mysqli("127.0.0.1", "root", "20155338", "pc");
/* 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();
?>
- 浏览器中输入
127.0.0.1/csj5338.html
来访问自己的页面,输入正确的用户名和密码(即自己所新建数据库表中存在的新加入的用户和密码),显示登陆成功。
- 在其中输入错误的用户名和密码(即新建数据库表中不存在的),显示登录失败。
SQL注入
- 在用户名输入框中输入
' or 1=1#
,密码随便输入,这时候的合成后的SQL查询语句为select * from lxmtable where username='' or 1=1#' and password=''
,#相当于注释符,会把后面的内容都注释掉,所以相当于select * from lxmtable where username='' or 1=1
而1=1是永真式,所以这个条件肯定恒成立,所以可以成功登录。
- 还可以通过SQL注入在数据库中插入一条伪造的用户名和密码。
- 首先修改后端的PHP代码,将
if ($result = $mysqli->query($query_str))
这条判断语句改成if ($result = $mysqli->multi_query($query_str))
使得允许多条sql语句执行,接着在用户名输入框中输入';insert into pc values('100','5338','5338',"true");#
,随便输入一个密码,接着登录,出现如下所示。
- 检查一下数据库看是否插入成功,成功出现了我们新插入的用户。
- 将PHP改回去,再次用新插入的用户进行登录,登录成功。
XSS攻击
-
XSS表示Cross Site Scripting(跨站脚本攻击),通过插入恶意脚本,实现对用户浏览器的控制。
-
在
/var/www/html
目录下事先保存一个图片文件1.jpg,然后在登录网页的用户名窗口中输入<img src="1.jpg" />1111</a>
,但是显示失败.原因就是在之前的php文件里有句echo $user
,将匹配出错的那句echo "<br> login failed!!!! <br> ;
改成了echo $uname
之后攻击成功。
基础问题回答
(1)什么是表单
-
表单在网页中主要负责数据采集功能。
一个表单有三个基本组成部分:
-
表单标签,这里面包含了处理表单数据所用CGI程序的URL以及数据提交到服务器的方法。
-
表单域,包含了文本框、密码框、隐藏域、多行文本框、复选框、单选框、下拉选择框和文件上传框等。
-
表单按钮,包括提交按钮、复位按钮和一般按钮;用于将数据传送到服务器上的CGI脚本或者取消输入
(2)浏览器可以解析运行什么语言。
-
超文本标记语言:HTML
-
可扩展标记语言:XML
-
脚本语言:ASP、PHP、Script、JavaScript、VBScript、Perl、Python、ColdFusion、Java、JSP等
(3)WebServer支持哪些动态语言
- ASP语言,PHP语言和JSP语言