20222304 2024-2025-1 《网络与系统攻防技术》实验八实验报告
一、实验内容
二、实验过程
(一) Web前端HTML
- 开启Apache服务
- 理解HTML,理解表单,理解GET与POST方法
(二)Web前端javascipt - 理解JavaScript的基本功能,理解DOM
- 编写登陆成功的php文件
- 尝试注入攻击
(三)Web后端:MySQL基础:正常安装、启动MySQL,建库、创建用户、修改密码、建表
(四)Web后端:编写PHP网页,连接数据库,进行用户认证
1.接下编写一个php文件用于连接数据库
(五)简单的SQL注入、XSS攻击测试
SQL注入攻击
XSS攻击测试
(六)安装Webgoat或类似平台,并完成SQL注入、XSS、CSRF攻击
(1)SQL注入
(2)xss攻击
(3)CSRF攻击
三、问题及解决方案
问题一、在进行xss攻击时,攻击没有弹窗显示。
问题二、在安装webgoat时提示jar包和Java版本不匹配
四、思想感悟
一、实验内容
Web前端HTML
能正常安装、启停Apache;理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML。
Web前端javascipt
理解JavaScript的基本功能,理解DOM;
在(1)的基础上,编写JavaScript验证用户名、密码的规则;在用户点击登陆按钮后回显“欢迎+输入的用户名”。
尝试注入攻击:利用回显用户名注入HTML及JavaScript。
Web后端
MySQL基础:正常安装、启动MySQL,建库、创建用户、修改密码、建表。
编写PHP网页,连接数据库,进行用户认证。
最简单的SQL注入,XSS攻击测试。
安装Webgoat或类似平台,并完成SQL注入、XSS、CSRF攻击。
二、实验过程
(一) Web前端HTML
- 开启Apache服务
因为kali默认已经安装Apache服务,所以我们只需要输入命令 /etc/init.d/apache2 start开启服务
如图:
然后还可以输入命令 /etc/init.d/apache2 status 查看当前Apache的服务状态
如图:
然后open http://127.0.0.1/就能够在浏览器中打开Apache的默认页面,如果出现就说明Apache没问题。
如图:
- 理解HTML,理解表单,理解GET与POST方法
HTML中的表单是一个用来收集用户输入数据并将其发送到服务器的元素。表单由一对和标签包围,可以包含各种输入元素,如文本框、复选框、单选按钮、下拉框等。
GET和POST是HTTP协议中用于向服务器提交表单数据的两种方法。它们的主要区别在于数据传输方式和用途:
GET方法:
使用GET方法提交表单时,表单数据会附加在URL的末尾,以查询字符串的形式发送到服务器。
GET方法适用于向服务器请求数据,常用于搜索表单等不涉及敏感信息的场景。
使用GET方法提交的表单数据可以在浏览器的地址栏中看到,因此不适合传输敏感信息,如密码等。
POST方法:
使用POST方法提交表单时,表单数据会作为请求的一部分发送到服务器,而不会显示在URL中。
POST方法适用于向服务器提交敏感信息,如用户注册、登录等操作。
使用POST方法提交的表单数据不会显示在浏览器的地址栏中,相对更安全。
进入 /var/www/html路径,新建一个表单的html文件。
但是这个路径只有root权限下才能够进行修改,这里有两种操作方式,一种是在 /var/www/html下,选择使用root权限打开文件夹即可新建文档,另一种是先新建,然后再移动。
所以开始我是在桌面进行文档的创建,然后使用sudo指令将文档复制到 /var/www/html下。
编写lyl.html文件,代码如下:
如图:
然后使用CP指令将文档复制到 /var/www/html的目录下。
如图:
然后在浏览器中输入代码,启动打开网页,就是编写的html
如图:
这里标注的html文件和之前的不一样,是因为之前的lyl.html文件修改出错,所以新建了lyl2304.html
(二)Web前端javascipt
- 理解JavaScript的基本功能,理解DOM
JavaScript是一种用于网页开发的脚本语言,它赋予网页动态和交互功能。通过JavaScript,您可以控制网页上的元素,响应用户的操作,并改变网页的外观和行为。
DOM(文档对象模型)是JavaScript操作网页的接口。它将网页中的每个元素都表示为对象,使您能够使用JavaScript来访问、修改和控制这些对象。DOM以树形结构组织网页内容,每个元素都是一个节点,您可以通过DOM操作节点来改变网页的结构和外观。
在原有的html的基础上,添加一段JavaScript代码,判断用户是否输入账号、密码。
编写身份鉴别规则的javascript
制定简单的规则:用户名须为6-12位字母/数字/中文,密码为1-20位纯数字。将编写好的javascript脚本嵌入到前端html页面中,放于head中。
代码如下:
当我们输入无效的用户名或密码时,会弹出警告框:
当只输入用户名,而不输入密码时:
提示我们需要输入用户名和密码,均需要有内容。
当输入的用户名包含特殊字符:
提示我们需要用户名须为6-12位字母/数字/中文
当我们输入错误密码时:
提示我们密码错误。
2. 编写登陆成功的php文件
PHP(HypertextPreprocessor)是一种流行的服务器端编程语言,广泛应用于Web开发领域。它被设计用于快速开发动态网站,并能够与HTML紧密集成。PHP可以生成动态页面内容、连接数据库、处理表单数据等。此外,PHP还可以在命令行下运行脚本。
PHP的代码通常嵌入在HTML中,在服务器端执行,然后将生成的页面发送给客户端浏览器。PHP语言易学易用,具有较高的灵活性,使其成为了许多Web开发者的首选工具之一。由于其广泛应用和强大的功能,PHP在Web开发中扮演着重要的角色,并持续受到开发者们的青睐。
编写登录使用的PHP文件,代码如下:
将上述php文件拷贝到/var/www/html目录下,接着,我们输入用户名、密码,将会跳转到如下界面
如图:
登录跳转
3. 尝试注入攻击
准备注入脚本
合法的用户名会经由php代码块回显,若用户名是恶意脚本将会被执行,准备如下恶意脚本:
实施注入攻击:
JavaScript注入攻击
(三)Web后端:MySQL基础:正常安装、启动MySQL,建库、创建用户、修改密码、建表
Kali也是默认安装MySQL的,所以我们只需要使用命令 systemctl start mysql或者service mysql start开启mysql,代码如下:
service mysql start
systemctl start mysql
如图:
用如下命令进入mysql数据库并查看database,初次进入mysql可用root用户,无需密码:
mysql -u root
但是!!!这里需要注意,在MySQL数据库里每句话最后一句话都需要加上分号,否则这段代码就不会执行。
然后给这次实验新建一个数据库,将其命名为20222304lyl;
create database 20222304lyl;
根据实验需要修改root用户的密码,可以新建用户、密码,否则下面的步骤中php无法成功连接数据库。
然后为登录比对的数据建立一个新表,将其命名为identify,然后包含有用户名和密码。
然后在数据库中插入实验需要登入的用户名和密码,都设为我的学号姓名,20222304lyl。
(四)Web后端:编写PHP网页,连接数据库,进行用户认证
1.接下编写一个php文件用于连接数据库
具体代码如下:
进行用户认证
当输入正确的用户名、密码时结果如下:
数据库login成功
当输入错误的用户名、密码时结果如下:
数据库login失败
(五)简单的SQL注入、XSS攻击测试
SQL注入攻击
要进行SQL注入攻击,因为我们的SQL查询语句是
SELECT * FROM login where username='$username' and password='$pwd';
如果我们在用户名里面输入’ or 1=1#,那么生成的SQL查询语句就是
SELECT * FROM login where username='' or 1=1# and password='$pwd';
后面密码那部分被注释掉了,1=1恒成立,所以直接登录成功。
但是由于之前用JavaScript脚本规定了用户名格式,所以要保证注入语句的长度符合要求
SQL注入
XSS攻击测试
XSS(Cross-Site
Scripting,跨站脚本攻击)是一种常见的Web安全漏洞,攻击者利用这种漏洞向网页中插入恶意脚本,当用户访问包含这些恶意脚本的页面时,攻击者就可以获取用户的敏感信息或者控制用户的行为。
XSS攻击通常分为三种类型:
存储型XSS:攻击者将恶意脚本存储在服务器端,当用户访问包含这些恶意脚本的页面时,恶意脚本被执行。
反射型XSS:攻击者将恶意脚本作为参数附加在URL中,当用户点击包含这些恶意脚本的URL时,恶意脚本被执行。
DOM-based XSS:攻击者利用客户端的漏洞,在浏览器中执行恶意脚本,从而达到攻击的目的。
对于xss攻击,我首先是选择和上面尝试的方法一样,使用:
(六)安装Webgoat或类似平台,并完成SQL注入、XSS、CSRF攻击
安装webgoat平台
下载webgoat-server-8.1.0.jar,是需要使用到的靶场文件,下载链接
进入Webgoat目录,输入如下命令启动服务:java -jar webgoat-server-8.1.0.jar
当输出结束时,打开浏览器,在搜索栏中输入:http://localhost:8080/WebGoat/login
打开webgoat网站,注册用户名、密码,密码须6-10位,进入Webgoat网页:这里用的用户名和密码均为学号。
接着,我们跟着网页学习一下SQL注入、xss攻击和xsrf的知识,下面展示部分成果。
(1)SQL注入
- String SQL injection
依次选择左侧栏A1→SQL Injection(Intro)→9号
观察提示中所给SQL查询语句,选择“ Smith’ ”“ or ”和“ ‘1’=‘1 ”填入
给你"SELECT * FROM user_data WHERE first_name = ‘John’ AND last_name = ‘" + lastName + “’”;这个一句话,要求能够显示所有的用户信息,可获得信息的条件为first_name且last_name为真,first_name已给出,只需选择填入last_name。Smith’与last_name=后的第一个’(单引号)配对,‘1’='1与+lastName+"后的(单引号)配对,形成SELECT * FROM user_data WHERE first_name = ‘John’ AND last_name = ‘Smith’ or 1=1;的永真式,成功获取信息。
(2)xss攻击
Reflected XSS
选择左侧栏A7→Cross Site Sorpting→选择7号
(3)CSRF攻击
!!!
!!!
!!!其中部分截图为全屏截图,是在第二次实践测试中所做,图片可能看不清,但是全屏截图,以及在学习通第二次实践测试中有原图!!
CSRF(Cross-Site Request
Forgery,跨站请求伪造)是一种常见的Web安全漏洞,攻击者利用用户已登录的身份,在用户不知情的情况下发送恶意请求到目标网站,以执行未经授权的操作。
攻击者通常会诱使用户访问包含恶意代码的页面,或者通过电子邮件等方式发送包含恶意链接的信息。当用户点击这些链接或访问恶意页面时,浏览器会自动发送之前预设好的请求,从而执行攻击者设定的操作,如更改账户信息、发起资金转移等。
选择左侧A8 Cross-Site Request Forgeries→3号→点击Submit Query按钮
点击Submit Query按钮后,跳转到flag页面,可发现flag值为null(如下图)
然后查看Submit Query按钮部分的html代码,这里使用快捷键Ctrl+F12可以查看网站源码,这里的查找相当的麻烦,字很小而且很多内容是被折叠起来的1,当时为了找到submit这个单词感觉我瞅了好多分钟。
找到这段代码后将其复制下来,并放到新的HTML文件中,将其命名为lylcsrf.html,并将其补充成完整代码。
要开启Apache功能,并修改action部分如上图红框,否则不会访问8080端口,无法跳转到正确的页面。
然后再浏览器中访问这个lylcsrf.html文件:
发现这里只有一个相关的提交的按钮,点击Submit Query按钮后,再次跳转到flag页面
在这里可获取flag值
回到WebGoat CSRF攻击页面,输入上面获取到的flag值
三、问题及解决方案
问题一、在进行xss攻击时,攻击没有弹窗显示。
出现问题的原因是现在的浏览器会对一些恶意脚本注入的语句进行检验,如果浏览器成功地检测到这是一个恶意的脚本并阻止其执行,那么就不会弹出警告框。所以就选择使用外部脚本对其进行攻击,当浏览器加载外部脚本时,它通常会认为这些脚本是来自可信任的源(例如同一域名下的服务器),因此不会对其执行做过多的限制。
问题二、在安装webgoat时提示jar包和Java版本不匹配
这个问题出现的原因是我的Kali是之前2022.2的版本,而最新的webgoat是2023年的,因此Kali自带的Java和jar包不匹配,无法进行解压运行。
这里有两种解决方法,一是可以对Kali中的Java进行更新,需要下载jdk等一大串的东西,比较麻烦,所以为了省事选择更换老版本的webgoat,同样也可以完成实验。
四、思想感悟
在本次Web安全实验中,我深入学习了SQL注入、XSS攻击和CSRF攻击等常见的Web安全漏洞,并通过编写前端和后端代码,以及使用WebGoat工具进行攻击模拟,加深了对这些漏洞的理解和认识。
通过实践,我意识到Web安全对于任何一个Web开发者来说都是至关重要的。深入了解攻击原理和常见漏洞,不仅有助于提高编写安全代码的能力,还能更好地保护用户的隐私和数据安全。特别是通过WebGoat工具,我能够更直观地了解攻击的过程和原理,以及如何防范这些攻击,这对我今后的Web开发工作将有很大帮助。
在实验过程中,遇到了一些困难和挑战,但通过不断尝试和学习,我逐渐掌握了一些防范攻击的方法。这是这学期网络攻防的最后一个实验,一学期实验做下来确实收获颇多,虽然有很多时候都在为各种各样的问题烦恼,但是收获颇丰,特别需要感谢学长学姐的详细的博客,帮助我们解决难题,也感谢强哥一学期的悉心教导!!