20202418 2022-2023-2 《网络与系统攻防技术》实验八实验报告
20202418 2022-2023-2 《网络与系统攻防技术》实验八实验报告
- 20202418 2022-2023-2 《网络与系统攻防技术》实验八实验报告
- 1.实验内容
- 2.实验过程
- 2.1 Web前端HTML
- 2.2 Web前端javascipt
- 2.2.4 注入攻击:利用回显用户名注入HTML及JavaScript
- 2.3 Web后端:MySQL基础
- 2.4 Web后端
- 2.5 简单的SQL注入,XSS攻击测试
- 2.6 安装Webgoat或类似平台,完成SQL注入、XSS、CSRF攻击
- 2.6.1 Webgoat环境的配置
- 2.6.2 SQL注入
- 2.6.2.1 What is SQL?
- 2.6.2.2 Data Manipulation Language (DML)
- 2.6.2.3 Data Definition Language (DDL)
- 2.6.2.4 Data Control Language (DCL)
- 2.6.2.5 String SQL injection
- 2.6.2.6 Numeric SQL injection
- 2.6.2.7 Compromising confidentiality with String SQL injection
- 2.6.2.8 Compromising Integrity with Query chaining
- 2.6.2.9 Compromising Availability
- 2.6.3 XSS攻击
- 2.6.4 CSRF
- 3.问题及解决方案
- 4.学习感悟、思考等
- 参考资料
1.实验内容
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攻击。
2.实验过程
2.1 Web前端HTML
2.1.1 安装、启停Apache
systemctl start apache2 # 开启Apache服务
systemctl stop apache2 # 关闭Apache服务
其中,指令的第二个参数表示为:
start: 启动 Apache 服务
stop: 停止 Apache 服务
restart: 重新启动 Apache 服务
reload: 优雅的重启 Apache 服务。重载过程中,Apache 主进程首先关闭子进程,然后加载新配置,并且启动一个新的子进程。
status: 查看服务状态
2.1.2 HTML、表单、GET与POST
HTML是一种标记语言,用于创建网页和其他互联网应用程序的结构和内容。HTML使用标记来描述文档的结构和内容,这些标记被称为HTML标签。
表单是HTML中的一种元素,用于收集用户输入的数据。表单通常包含输入字段、单选按钮、复选框、下拉列表等元素,用户可以在这些元素中输入或选择数据。
GET和POST是HTTP协议中的两种请求方法。GET方法用于从服务器获取数据,而POST方法用于向服务器提交数据。GET方法将数据附加到URL的末尾,而POST方法将数据包含在请求的正文中。GET方法通常用于获取数据,而POST方法通常用于提交表单数据或其他敏感数据。
2.1.3 编写一个含有表单的HTML
<!DOCTYPE html>
<html>
<head>
<title>20202418yzyLogin System</title>
</head>
<body>
<h2>20202418yzyLogin System</h2>
<form action="login.php" method="post">
<label for="username">Username:</label>
<input type="text" id="username" name="username" required>
<br><br>
<label for="password">Password:</label>
<input type="password" id="password" name="password" required>
<br><br>
<input type="submit" value="Login">
</form>
</body>
</html>
效果如下:
在火狐浏览器中,输入http://192.168.1.103/yzytest8.HTML
有点简陋
2.2 Web前端javascipt
2.2.1 编写javascipt
这里我们尝试编写如下规则:用户名、密码均不能为空、密码必须为8-16位。
function validateForm(){
var username = document.getElementById("username").value;
var password = document.getElementById("password").value;
if(username == ""){
alert("用户名不能为空!");}
else if(password == ""){
alert("密码不能为空!");}
else {
document.write("欢迎"+username);}
}
2.2.2 修改HTML
1、添加,声明我们要使用哪个javascipt语句。
2、表单修改为,实现表单和javascipt语句的连接。
<!DOCTYPE html>
<html>
<head>
<title>20202418YZY</title>
<meta charset="utf-8">
<script src="login.js"></script>
</head>
<body>
<h1>Login System</h1>
<form name="login_form" method="post">
<label for="username">Username:</label>
<input type="text" id="username" name="username" required><br><br>
<label for="password">Password:</label>
<input type="password" id="password" name="password" required><br><br>
<input type="button" name="login_btu" value="登录" onclick="validateForm()">
</form>
</body>
</html>
2.2.3 实际效果
1、异常情况
2、正常登录的情况
2.2.4 注入攻击:利用回显用户名注入HTML及JavaScript
注入代码如下:
<b>HTML注入攻击20202418</b> #HTML注入
<script type="text/javascript"> alert("JavaScript注入攻击20202418") </script> #JavaScript注入
发现被加粗了(/b的效果)
JavaScript代码也成功执行!
2.3 Web后端:MySQL基础
2.3.1 打开mysql服务
systemctl start mysql # 打开mysql服务
systemctl status mysql # 查看服务当前状态
2.3.2 MySql的使用
2.3.2.1 Mysql的基本使用语句
mysql; # 进入mysql数据库
show databases; # 查看现有的数据库
use mysql; # 进入mysql数据库
select host, user, password from user; # 查看用户表数据
set password for ‘root’@‘localhost’ = password(‘20202418yzy’); # 修改root用户的密码
flush privileges; # 更新权限
如图所示,在root下的password已经更改成20202418yzy的哈希值了。
mysql -u root -p # 使用新密码进行登录测试
use mysql; # 进入mysql数据库
select host, user, password from user; # 查看用户表数据
2.3.2.2 建库加表
创建 20202418 数据库并进入使用。
create database yzy20202418; # 创建一个新数据库
show databases; # 查看现有的数据库
use yzy20202418; # 使用该数据库
在 yzy20202418 数据库中创建 成绩单表,并添加一条记录
create table test (uname VARCHAR(20),password VARCHAR(30)); # 在数据库中创建登陆用户表
insert into test values(‘网络与系统攻防技术’,‘99’); # 在登陆用户表中添加一条记录
select * from test; # 查看登陆用户表记录
好奇怪,是因为我没设置主键的原因嘛?怎么有两条一模一样的记录呢?
2.4 Web后端
2.4.1 PHP是啥
PHP是一种服务器端脚本语言,它被广泛用于Web开发。PHP可以嵌入HTML中,也可以作为独立的脚本运行。PHP的语法类似于C语言,它支持多种数据库,并且可以与HTML、CSS、JavaScript等前端技术结合使用,实现动态网页的开发。PHP还有许多开源框架和库,可以帮助开发者更快速、更高效地开发Web应用程序。
2.4.2 编写PHP网页,连接数据库,进行用户认证
在完成这一部分任务之前,我重新创建了数据库,将root的密码修改为了yzy20202418,创建了一个库叫yzy20202418,其中的记录为。
PHP网页如下:
<?php
$uname=$_POST["username"];
$pwd=$_POST["password"];
$query_struser="SELECT * FROM login where uname='$uname' and password='$pwd';";
$mysqli = new mysqli("localhost", "root", "yzy20202418", "yzy20202418");
$query_strdatabase="use yzy20202418;";
/* 先看看SQL语句对不对 */
echo $query_struser;
if ($mysqli->connect_errno) {
printf("Connect failed: %s\n", $mysqli->connect_error);
exit();
}
echo "NICE!!!!!!";
/* 出现一个NICE!!!!代表连接到数据库了 */
if ($result = $mysqli->query($query_strdatabase)) {
echo"<br>NICE!";
}
/* 出现一个NICE!有结果了 */
if ($result->num_rows > 0 ){
echo "<br> Welcome {$uname}! <br> ";
}
else {
echo "<br> Login Fail! <br> " ;
}
$result->close();
$mysqli->close();
?>
HTML如下:
<!DOCTYPE html>
<html>
<head>
<title>20202418</title>
<meta charset="utf-8">
</head>
<body>
<h1>20202418</h1>
<form action="login.php" method="post">
<label for="username">Username:</label>
<input type="text" id="username" name="username" required><br><br>
<label for="password">Password:</label>
<input type="password" id="password" name="password" required><br><br>
<input type="submit" value="Login">
</form>
</body
2.4.3 效果如下
登陆成功:
登陆失败:
2.5 简单的SQL注入,XSS攻击测试
SQL注入是一种常见的Web应用程序攻击技术,攻击者通过在Web应用程序的输入框中注入恶意的SQL代码,从而获取或篡改数据库中的数据。SQL注入攻击通常利用Web应用程序没有对用户输入进行充分验证和过滤的漏洞,攻击者可以通过输入特定的字符或语句,绕过应用程序的身份验证和授权机制,直接访问数据库中的数据。
SQL注入攻击可以导致严重的安全问题,例如窃取用户的敏感信息、篡改或删除数据库中的数据、执行恶意代码等。为了防止SQL注入攻击,开发者应该对用户输入进行充分的验证和过滤,使用参数化查询或存储过程等安全的数据库访问方式,以及定期更新和维护应用程序和数据库的安全性。
2.5.1 SQL注入,注入永真式
以‘ or 1=1;–为用户名,查看结果。
如图所示,当uname = ‘’时,由于后面跟的是一个or 1=1的永真式,故用户名即便为’'也能登陆成功。
以yuzongyuan‘ or 1=1;–为用户名,查看结果。
2.5.2 XSS攻击测试
XSS(Cross-Site Scripting)攻击是一种常见的Web应用程序安全漏洞,攻击者通过在Web页面中注入恶意的脚本代码,从而在用户的浏览器中执行该代码,达到窃取用户信息、篡改页面内容、劫持用户会话等目的。XSS攻击通常利用Web应用程序没有对用户输入进行充分验证和过滤的漏洞,攻击者可以通过在输入框中输入特定的字符或语句,绕过应用程序的安全机制,注入恶意脚本代码。
XSS攻击可以分为反射型、存储型和DOM型三种类型。反射型XSS攻击是将恶意脚本代码作为URL参数发送给Web应用程序,然后将恶意代码反射回用户的浏览器中执行;存储型XSS攻击是将恶意脚本代码存储在Web应用程序的数据库中,然后在用户访问页面时从数据库中读取并执行;DOM型XSS攻击是通过修改页面的DOM结构来执行恶意脚本代码。
为了防止XSS攻击,开发者应该对用户输入进行充分的验证和过滤,使用安全的编码方式,例如将特殊字符转义为HTML实体,以及使用HTTP-only Cookie等安全措施。
输入
<script> alert("yzyXSS攻击") </script> # 弹出警告
输入:
<img src="Image/123.jpg"/> # 显示图片
就有可能展示出隐私图片,由于这里我没有设置图片,因此逃过一劫。
2.6 安装Webgoat或类似平台,完成SQL注入、XSS、CSRF攻击
2.6.1 Webgoat环境的配置
进入下载地址https://github.com/WebGoat/WebGoat/releases。
下载红框框住的jar包。
在kali虚拟机中,输入
java -jar webgoat-2023.4.jar
即可完成安装
安装之后,在kali中打开网址:http://127.0.0.1:8080/WebGoat
按照提示注册即可。
2.6.2 SQL注入
在山羊中,SQL注入有好多模块,有入门的介绍和高级一些的题目,在这里我们就只做入门的题目。
2.6.2.1 What is SQL?
select department from Employees where first_name = ‘Bob’;
2.6.2.2 Data Manipulation Language (DML)
update employees set department =‘Sales’ where userid= 89762;
2.6.2.3 Data Definition Language (DDL)
由于截图太多了,这里就不显示了,仅展示正确答案。
alter table employees add “phone” char(20);
2.6.2.4 Data Control Language (DCL)
GRANT all ON grant_rights TO unauthorized_user
2.6.2.5 String SQL injection
这里的解题关键点在于前后有两个很难让人发现的单引号。
2.6.2.6 Numeric SQL injection
第一个空填任意数字
第二个空填 任意数字 or 1 = 1
2.6.2.7 Compromising confidentiality with String SQL injection
第一个空填:任意
第二个空填:任意’ or ‘1’ = '1
注意这个单引号的匹配问题即可
2.6.2.8 Compromising Integrity with Query chaining
第一个空为:任意
第二个空为:'; UPDATE employees SET salary=99999 WHERE first_name='John
成功调整自己的薪资。
2.6.2.9 Compromising Availability
yzy’; drop table access_log; –
通过;将sql语句隔开,–将后面的全部注释,实现删库跑路!
2.6.3 XSS攻击
2.6.3.1 Reflected XSS
依据题意,使用警告命令,仿照之前我们尝试过的XSS攻击实验,可知答案为:
<script> alert("20202418_Reflected XSS") </script>
2.6.3.2 DOM-BASED XSS
如下所示,输入start.mvc#test/即可
2.6.3.3 DOM-Based XSS
首先进入这个网页(修改host和port为对应的ip和端口)
http://host/:port/WebGoat/start.mvc#test/%3Cscript%3Ewebgoat.customjs.phoneHome()%3C%2Fscript%3E
进入之后,摁下F12,能看见下图所示的随机数,输入即可!
2.6.3.4 最后五道选择题
答案为43124
2.6.4 CSRF
2.6.4.1Post a review on someone else’s behalf
依据下述连接下载Burp Suite。
https://blog.csdn.net/qq_41453285/article/details/100897747
修改网页获取的方法,将GET方法换成POST方法即可。
3.问题及解决方案
- 问题1:在www文件夹下无法创建文件
- 问题1解决方案:权限问题,使用命令chmod 文件名 777,重新打开即可
- 问题2:SQL注入时咋也成功不了,十分着急
- 问题2解决方案:分号和引号匹配问题
4.学习感悟、思考等
作为一名网络空间安全专业的学生,在进行网络与系统攻防技术课程上的实验时,我深刻地认识到了网络安全的重要性。在当今信息化社会,互联网已经成为人们生活中必不可少的一部分,也成为了企业和机构进行业务促进和信息传播的关键手段。然而,网络安全问题也随之壮大,各种类型的网络攻击在每天都在发生。因此,网络安全需要得到越来越多的重视和保护。
最后,通过这次实验,我深切地认识到了网络安全的重要性,也认识到了自己还有很多需要学习和提升的地方。感谢王志强老师这一学期的耐心指导,也感谢王志强老师包容我在课堂上胡作非为!祝王老师身体健康、事业有成!