20212324 2023-2024-2 《网络与系统攻防技术》实验八实验报告
文章目录
1.实验内容
1.1Web前端HTML
能正常安装、启停Apache。理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML。1.2Web前端javascipt
理解JavaScript的基本功能,理解DOM。
在1.1的基础上,编写JavaScript验证用户名、密码的规则。在用户点击登陆按钮后回显“欢迎+输入的用户名”
尝试注入攻击:利用回显用户名注入HTML及JavaScript。1.3Web后端:MySQL基础:正常安装、启动MySQL,建库、创建用户、修改密码、建表
1.4Web后端:编写PHP网页,连接数据库,进行用户认证
1.5最简单的SQL注入,XSS攻击测试
1.6安装Webgoat或类似平台,并完成SQL注入、XSS、CSRF攻击。
2.实验过程
2.1 Web前端HTML
2.1.1开启kali自带的Apache
systemctl start apache2 # 开启Apache服务
2.1.2创建HTML文件
- apache或nginx的网页文件默认存放在/var/www/html,我们进入 /var/www/html路径,新建一个表单的html文件,命名为20212324login.html。
2.1.3编写HTML,其中制作了一个简单的标题及两个输入框
2.1.4结果展示
-
打开火狐浏览器,地址栏内输入:127.0.0.1/20212324JinboLogin.html或双击html文件,即可查看HTML效果(但这俩一个是服务器中打开一个是将文件在浏览器中运行,后续跳转等处功能有所区别)。
2.2 Web前端javascipt
2.2.1编写一段javascipt,用于实现界面的跳转,并把它添加到原html中
-
要注意将提交动作(onsubmit)指向script
2.2.3登陆尝试
- 点击登录后查看效果,可以看到,跳转成功
2.2.4.注入攻击:利用回显用户名注入HTML及JavaScript
- HTML注入
<h1>20212324晋博的HTML注入攻击</h1> #HTML注入
- JavaScript注入
<script type="text/javascript"> alert("被20212324晋博JavaScript注入啦") </script> #JavaScript注入
2.3 搭建Web后端
2.3.1准备工作:启动数据库
- kali自带mariadb,所以我们可以直接使用服务。
- 打开MySQL服务。
systemctl start mysql # 打开mysql服务
- 接下来查看mysql数据库并修改root的密码为20212324。
mysql #启动mysql
use mysql; # 进入mysql数据库
show databases; # 查看现有的数据库
select host, user, password from user; # 查看用户表数据
set password for 'root'@'localhost' = password('20212324'); # 修改root用户的密码
flush privileges; # 更新权限,之后我们登录就需要输入登录的用户和密码啦
- 之后数据库需要说明登录的用户,并输入密码才能登录
- 尝试重新登陆
mysql -u root -p # 登录
use mysql; # 进入mysql数据库
select host, user, password from user; # 查看用户表数据
2.3.2建立数据库,添加表
- 创建 20212324Jinbo数据库并进入使用,进而创建用于本次实验的表
create database 20212324Jinbo; # 创建一个新数据库
show databases; # 查看现有的数据库
use 20212324Jinbo; # 使用该数据库
- 在 20212324Jinbo 数据库中创建 loginuser 登陆用户表,并添加一条记录用于存储待会用于登录的用户名和密码。
create table loginuser (uname VARCHAR(20),password VARCHAR(30)); # 在数据库中创建登陆用户表
insert into loginuser values('20212324Jinbo','20212324'); # 在登陆用户表中添加一条记录,php经过检索和比对完成用户认证
select * from loginuser; # 查看登陆用户表记录
2.4 Web后端:PHP
2.4.1编写PHP,实现连接数据库及进行用户认证,并完成相应跳转
- 此处跳转较为简易,直接使用echo回显:
2.4.2修改20212324login.html
- 修改20212324login.html,将表单的“action”属性指向“http://127.0.0.1/login.php ,即本服务器的对应php页面,以此实现php的调用以及后续跳转
2.4.3验证登陆效果
2.5 简单的SQL注入,XSS攻击测试
2.5.1SQL注入
SQL注入攻击:相当大一部分程序员在编写代码的时候 ,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根 据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即 SQL注入。
- 根据php的代码,我们只需要在密码输入框输入 ’ or ‘1’='1 ,则密码判定为真,故用户名只要任意输入,即可登录成功。
- 原理:sql语句会变为“ SELECT * FROM loginuser where username=‘2021324’ and password=’ ’ or ‘1’=‘1’;”,“1=1”保证该式永真,而之后的内容就都被注释掉了。
- 登陆测试,成功!
2.5.2XSS攻击测试
“XSS是跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。”
- 我们在用户名输入框输入这样的一条html指令,使得如果登录成功后网页弹出攻击,密码依旧使用上面的永真式确保能够登录成功:
- 原理:网页源代码中是直接将用户名内嵌进去的,故我们可以通过在用户名中添加script脚本实现XSS攻击
<script> alert("这里是20212324Jinbo的XSS攻击!") </script> # 弹出警告
- 登陆测试,成功!
2.6 安装Webgoat或类似平台,完成SQL注入、XSS、CSRF攻击
2.6.1安装Webgoat平台
-
webgoat介绍:WebGoat是OWASP组织研制出的用于进行web漏洞实验的应用平台,用来说明web应用中存在的安全漏洞。WebGoat运行在带有java虚拟机的平台之上,当前提供的训练课程有30多个,其中包括:跨站点脚本攻击(XSS)、访问控制、线程安全、操作隐藏字段、操纵参数、弱会话cookie、SQL盲注、数字型SQL注入、字符串型SQL注入、web服务、Open Authentication失效、危险的HTML注释等等。WebGoat提供了一系列web安全学习的教程,某些课程也给出了视频演示,指导用户利用这些漏洞进行攻击。
和皮卡丘类似!
-
打开GitHub:Webgoat,选择webgoat-server-8.1.0.jar进行下载后将其粘到kali。
- 输入命令解压启动:
java -jar webgoat-server-8.1.0.jar
- 在浏览器中输入网址http://localhost:8080/WebGoat/login 注册账户并登录,即可使用WebGoat的内容
2.6.2SQL注入
- webgoat为我们提供了丰富的网络攻击实践环境(有点像皮卡丘哈哈哈),同时讲解比较清晰,能够帮助我们在课后的实践当中对对应内容有更加深刻的认识。
- 前面几个是学习sql的基本知识(增删查改)
- 尝试String SQL injection学习与实践
- 通过在字符串最后添加永真式及结束条件,即可实现攻击
- 通过在字符串最后添加永真式及结束条件,即可实现攻击
- 尝试Numeric SQL injection学习与实践
- 以User_Id作为注入点,SQL语句为SELECT * From user_data WHERE Login_Count = 1 and userid= 1 or 1=1,实现注入攻击
-
在其中加入SQL语句,通过"update"关键字实现SQL query chaining
-
攻击环境为修改工资表从而成为这个公司最富有的人!
-
依照表的结构,我们在TAN中填写的一部分SQL语句为:3SL99A’;update employees set salary = salary + 50000 where first_name = ‘John’; –
-
-
尝试Compromising confidentiality with String SQL injection攻击,通过利用“OR”关键字,在SQL语句中构建永真条件。
-
实验背景是我们要删除操作表从而死无对证!
-
尝试Compromising Availability,使用drop table关键字进行操作。我们在具体攻击过程中可能表会记录增删查改以保障库的安全,我们需要将其删除以完成整个攻击过程
- 输入 1’; drop table access_log; –
-
2.6.3XSS
- 尝试Reflected XSS攻击。
- 该题中存在两个可提交字段,故可以尝试使用alert()来确定哪个字段易受攻击。
- 因此,在两个提交框中输入如下攻击代码,发现代码在第一个提交框中时会出现弹窗,可知第一个提交框易受攻击。
<script> alert("20212324_XSS") </script>
- DOM-Based XSS
- 题目当中告诉了我们“The ‘base route’ in this case is: start.mvc#lesson”,而js文件中写道“‘test/:param’: ‘testRoute’”,因此答案就是“start.mvc#test/”。
2.6.4.CSRF
- 尝试Basic Get CSRF Exercise,通过查看网页源代码查看对应跳转逻辑以期实现跳过逻辑完成跳转、找到flag。
- 尝试在该页面下按F12查看网页源代码,查看Submit Query的部分代码。
- 检索form#basic-csrf-get,找到input部分
- 尝试在该页面下按F12查看网页源代码,查看Submit Query的部分代码。
- 可以看到Submit Query按钮type是hidden,也不能让用户执行,故把这部分源码新建成一个html,注意不能放到需要root权限的文件夹(如上面的/etc/www/html),否则会报错。
- 把action这一部分的地址改成http://localhost:8080/WebGoat/csrf/basic-get-flag
- 然后再用浏览器打开这个html,可以看到页面中只有一个提交框"Submit Query",点击"Submit Query",就可以成功获取flag值。
- 回到WebGoat提交flag,成功完成
3.问题及解决方案
- 问题1:添加PHP进行后端识别和跳转中,每次跳转后会提示下载php文件而不是进入相应页面
-
问题1解决方案:
- 一开始在网上搜索答案,提示为nginx未发生作用。因此下载nginx查看效果:
- 但失败了,后续回顾复盘发现apache2中就可以实现对php的函数逻辑😂不过还是有收获滴,说明php的跳转需要服务器的解析而不能直接通过浏览器完成;
- 进而发现由于2.1是直接打开html文件做的,导致2.4虽然apache2一直开着但并未发生作用!!!通过127.0.0.1/对应文件打开,登录成功!
4.学习感悟
4.1 前端与后端的协同
- 实验中,我学习了HTML、JavaScript和PHP,理解了前端与后端如何协同工作。前端负责呈现和收集用户输入,后端负责处理逻辑和数据存储,两者缺一不可,数据库更是重中之重。
4.2 防御策略的构建
- 在网络攻击的亲身实践中,我认识到构建防御策略的重要性。了解攻击手段只是第一步,更重要的是学会如何防御这些攻击。