20192430 2021-2022-2 《网络与系统攻防技术》实验八实验报告
一、实验内容
(1)Web前端HTML
能正常安装、启停Apache。理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML。
(2)Web前端javascipt
理解JavaScript的基本功能,理解DOM。
在(1)的基础上,编写JavaScript验证用户名、密码的规则。在用户点击登陆按钮后回显“欢迎+输入的用户名”
尝试注入攻击:利用回显用户名注入HTML及JavaScript。
(3)Web后端:MySQL基础:正常安装、启动MySQL,建库、创建用户、修改密码、建表
(4)Web后端:编写PHP网页,连接数据库,进行用户认证
(5)最简单的SQL注入,XSS攻击测试
(6)安装Webgoat或类似平台,并完成SQL注入、XSS、CSRF攻击。。
二、实验过程
任务一:Web前端HTML
(1)kali自带apache,直接启动即可
(2)查看apache状态
(3)在浏览器输入本机的IP地址打开apache的默认网页
(4)进入/var/www/html目录,创建form_20192430.html,编写html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="index.css">
<title>登录界面</title>
</head>
<body>
<div class="box">
<div class="left"></div>
<div class="right">
<h4>登 录</h4>
<form name="form1" method="post" action="login.php">
<input class="acc" type="text" name="username" placeholder="用户名">
<input class="acc" type="password" name="password" placeholder="密码">
<input class="submit" type="submit" name="btn1" value="登录">
</form>
</div>
</div>
</body>
</html>
css代码略
(5)浏览器打开文件
任务二:Web前端javascipt
(1)编写JavaScript验证用户名、密码的规则。
<script language="javascript">
function login(){
if(form1.username.value==""||
form1.password.value==""){
alert("用户名或密码不能为空!")
}else{
document.write("欢迎"+form1.username.value)
}
}
</script>
(2)再次打开文件,输入用户名密码登录
(3)尝试注入攻击
<script language="javascript">alert("20192430")</script>
正常登录并弹窗
任务三:Web后端:MySQL基础
(1)启动mysql服务
service mysql start
(2)登录mysql
mysql -u root //kali中mysql中root用户默认无密码
(3)创建用户并登录
create user 'xzc'@'localhost' identified by '20192430';
(4)修改密码
set password for xzc@'localhost'=password('2430');
(5)赋权
(6)建库
create database db_xzc;
(7)建表
create table login(username VARCHAR(20),password VARCHAR(20));
(8)插入数据
insert into login values('20192430xzc','20192430');
(9)查看结果
show databases;
select * from login;
任务四:Web后端:编写PHP网页,连接数据库,进行用户认证
(1)编写后端的php网页
<?php
$uname=$_POST["username"];
$pwd=$_POST["password"];
echo $uname;
$query_str="SELECT * FROM login where username='$uname' and password='$pwd';";
$mysqli = new mysqli("127.0.0.1","20192430","20192430","db_xzc");
$query_str1="use db_xzc;";
/* 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> {$uname}:欢迎登录!! <br> ";
}
else {
echo "<br> 用户名或密码错误! <br> " ;
}
/* free result set */
$result->close();
}
$mysqli->close();
?>
(2)修改html文件的action
(3)打开网站127.0.0.1/form_20192430.html,输入用户名和密码登录
(4)登录成功结果
(5)登陆失败结果
任务五:最简单的SQL注入,XSS攻击测试
(1)简单sql注入
' or 1=1#
随意密码
(2)简单xss攻击
<script>alert('abaaba')</script>
任务六:安装Webgoat或类似平台,并完成SQL注入、XSS、CSRF攻击。
(1)下载webgoat的jar包
(2)安装运行
java -jar webgoat-server-8.0.0.M26.jar
(3)浏览器打开后注册即可
http://localhost:8080/WebGoat
(4)sql注入
第5题
尝试授予用户组“UnauthorizedUser”更改表的权限:
grant alter table to UnauthorizedUser
(5)xss攻击
第2题
XSS祖传测试伎俩
目标是用浏览器,使用javascript伪协议,在输入框输入
javascript:alert(document.cookie)
然后问你,每个地方都输出的一样吗?肯定一样了
yes
这个只是告诉你,可以这么来,现在浏览器基本都过滤了这种情况
(6)crsf攻击
第3题
通过跨站去执行提交查询这个操作,然后返回的flag就是答案
直接点击flag是null
将按钮处的html复制并创建新的html打开即可获得flag值
<html>
<body>
<form accept-charset="UNKNOWN" id="basic-csrf-get" method="POST" name="form1" target="_blank" successcallback="" action="http://localhost:8080/WebGoat/csrf/basic-get-flag">
<input name="csrf" type="hidden" value="true">
<input type="submit" name="submit">
</form>
</body>
</html>
三、问题与解决方法
- 问题一:安装webgoat报错
- 解决方案:选择较低版本安装
- 问题二:新用户无法连接到数据库
- 解决方案:完全赋权
四、实验感想
这次实验主要是web安全方面,内容较多耗时较长,本次实验将实践内容和理论相结合,对SQL注入攻击、XSS跨站脚本攻击、CSRF跨站请求伪造攻击有了更深刻的理解。希望今后还能继续完善这方面的知识,理论与实践相互促进。
最后感谢老师和同学对于实验问题的解答与帮助。