20222315 2024-2025-1 《网络与系统攻防技术》实验八实验报告
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)安装DVWA或WebGoat平台,并完成SQL注入、XSS、CSRF攻击
2.实验步骤
2.1web前端html
2.1.1开启apache2服务
命令:systemctl start apache2
2.1.2在浏览器中输入127.0.0.1,显示apache界面,服务成功开启
2.1.3进入 /var/www/html路径,新建一个表单的html文件,并将事先写好的代码放入
然后在浏览器中输入/var/www/html/20222315.html,打开我们刚刚编写的html
登录后显示如下界面
2.2Web前端JavaScript
2.2.1在(1)的基础上,编写JavaScript验证用户名、密码的规则。
通过 if(username=""||password=""){ alert("用户名密码不能为空!"); return; } document.write("Welcome! "+username)我们可以判断输入的用户名和密码是否为空,如果为空,我们就会出现提示,如果不为空,则跳转到“欢迎+输入的用户名”的网页。
尝试注入攻击:利用回显用户名注入HTML及JavaScript
进行html注入"
liuxinyu
"效果如下:
尝试JavaScript注入:
效果如下:
2.3web后端:MySQL基础
2.3.1kali中有自带的数据库,需要先打开服务
输入命令:systemctl start mysql # 打开mysql服务
systemctl status mysql # 查看服务当前状态
相关命令:
mysql -u root -p //登录,此时密码为空
use mysql //使用数据库
show databases; //查看已有数据库
2.3.2创建用户liuxinyu
2.3.3创建数据库
create database 20222315lxy;
创建用户数据表
create table loginuser (name VARCHAR(20),password VARCHAR(30));
插入数据
insert into loginuser values('zy','20212306');
查看数据表
select * from loginuser
给新用户数据库全部权限
GRANT ALL PRIVILEGES ON 20222315lxy.* TO 'liuxinyu'@'%';
FLUSH PRIVILEGES;
2.3.4Web后端:编写PHP网页,连接数据库,进行用户认证
html:
php:
然后我们打开20222315lxy1.html
输入数据库中的,用户账号:lxy 密码:20222315
登录成功后显示如下信息
2.3.5最简单的SQL注入,XSS攻击测试
SQL注入:
用户账号处随便输入,密码处输入' or '1'='1
可以看到,这个账号在我们的数据库中并没有,但是当我们进行SQL注入攻击的时候,会显示连接成功
XSS攻击
登录成功,并显示弹窗
2.6安装DVWA或WebGoat平台,并完成SQL注入、XSS、CSRF攻击
参考下载教程:手把手教你在kali-Linux 2020.3安装webgoat_kali安装webgoat-CSDN博客
下载链接:https://github.com/WebGoat/WebGoat/releases
下载得到jar文件
文件复制到虚拟机上
启动webgoat:java -jar webgoat-2023.8.jar
用浏览器进入127.0.0.1的网页,按提示注册新用户
2.6.1sql注入攻击
点开左边列表A3中的SQL injection,第9题:
题目要求我们通过下面的下拉框选择相关的数据,检索出users表中的所有用户信息,我们无需知道任何特定的用户名就可以得到完整的列表。
查看原代码是让输入lastName
该字段的格式为’ “+ lastName +” ’
输入的内容将会代替 “+ lastName +”
如何使查寻条件永远成立:
我们要通过注入查询所有用户的信息,只需保证无论什么情况WHERE后的语句都为真,那么1=1就可以实现;
直接输入1=1很明显不符合语法,这里我们将OR注入进行,输入“ ’ OR ‘1’ = '1 ”:SELECT * FROM users WHERE first_name = ‘John’ AND last_name = ’ ’ OR ‘1’ = ‘1’。
名字的内容没有明确的输入,那么我们输入smith,注入成功!
2.6.2xss攻击
A3的Cross Site Scripting部分就是XSS的内容
我们先按下Purchase,看看哪个输入会回显
card number输入框输入参数会回显,在这个输入框中输入:
告警弹出,顺利过关
2.6.3csrf攻击
CSRF即Cross Site Request Forgery跨站请求伪造,即通过伪造用户身份来向网站发出请求的一种攻击方式。主要原理为:
用户访问了正常的网站A,生成Cookie,攻击者引诱用户访问恶意网站B,网站B携带用户的cookie向A网站发出请求,A将B当作是用户执行请求,攻击者在用户不知情的情况下冒充用户在A网站执行了操作。
CSRF训练在A10处
在这一题中,查看 WebGoat 是否也容易受到登录 CSRF 攻击。保持此选项卡打开,然后在另一个选项卡中根据自己的用户名(前缀为 )创建一个用户csrf-。
以新用户身份登录。这就是攻击者使用 CSRF 所做的事情。然后单击原始选项卡中的按钮。由于我以其他用户身份登录,攻击者会得知我单击了该按钮。
3.实验问题及解决
1.最开始直接进入https://github.com/WebGoat/WebGoat/releases下载链接一直没办法进入网页
2.后面经上网查询得知我的DNS可能被污染,通过scdn的加速源可以帮我我进入下载界面,后通过csdn成功进入
4、学习感悟、思考等
在本次实验中,我深入了解了Web开发的基本技能,特别是前端和后端的相关知识,同时对Web安全的常见漏洞有了更为直观的认识。这次实验不仅提升了我在HTML、JavaScript、PHP、MySQL等技术方面的实践能力,还让我对SQL注入、XSS攻击等安全威胁有了更深入的理解。通过本次实验,我不仅提升了Web开发的技术能力,更加深了对Web安全漏洞的理解和实践经验。实验让我认识到,Web开发中的安全问题并不仅仅是理论上的挑战,而是每一个开发者在实际编程过程中必须面对的问题。通过合理的编码习惯、数据验证、权限控制和安全加固措施,能够有效地防止各种常见的安全威胁,如SQL注入、XSS攻击等。总之,Web开发不仅要注重功能的实现,还必须高度关注安全性。随着Web技术的不断发展,如何保证应用的安全性将是开发者永远需要思考的问题。