20212324 2023-2024-2 《网络与系统攻防技术》实验八实验报告

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,其中制作了一个简单的标题及两个输入框

image-20240603155242036

2.1.4结果展示
  • 打开火狐浏览器,地址栏内输入:127.0.0.1/20212324JinboLogin.html或双击html文件,即可查看HTML效果(但这俩一个是服务器中打开一个是将文件在浏览器中运行,后续跳转等处功能有所区别)。

    image-20240603155402851

2.2 Web前端javascipt

2.2.1编写一段javascipt,用于实现界面的跳转,并把它添加到原html中

image-20240603155428255

  • 要注意将提交动作(onsubmit)指向script

    在这里插入图片描述

2.2.3登陆尝试
  • 点击登录后查看效果,可以看到,跳转成功

image-20240603155633322

2.2.4.注入攻击:利用回显用户名注入HTML及JavaScript
  • HTML注入
<h1>20212324晋博的HTML注入攻击</h1> #HTML注入

image-20240603155708021

  • JavaScript注入
<script type="text/javascript"> alert("被20212324晋博JavaScript注入啦") </script> #JavaScript注入

image-20240603155818176

image-20240603160057618

2.3 搭建Web后端

2.3.1准备工作:启动数据库
  • kali自带mariadb,所以我们可以直接使用服务。
    • 打开MySQL服务。
 systemctl start mysql # 打开mysql服务

image-20240603160120788

  • 接下来查看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; # 更新权限,之后我们登录就需要输入登录的用户和密码啦

image-20240603160641019

  • 之后数据库需要说明登录的用户,并输入密码才能登录
    • 尝试重新登陆
 mysql -u root -p # 登录

 use mysql; # 进入mysql数据库

 select host, user, password from user; # 查看用户表数据

image-20240603160653118

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; # 查看登陆用户表记录

image-20240603160330234

image-20240603160402541

2.4 Web后端:PHP

2.4.1编写PHP,实现连接数据库及进行用户认证,并完成相应跳转
  • 此处跳转较为简易,直接使用echo回显:

image-20240603161432444

2.4.2修改20212324login.html
  • 修改20212324login.html,将表单的“action”属性指向“http://127.0.0.1/login.php ,即本服务器的对应php页面,以此实现php的调用以及后续跳转image-20240603161518826
2.4.3验证登陆效果

image-20240603162540194image-20240603162556401

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”保证该式永真,而之后的内容就都被注释掉了。

image-20240603162953320

  • 登陆测试,成功!

image-20240603163022120

2.5.2XSS攻击测试

“XSS是跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。”

  • 我们在用户名输入框输入这样的一条html指令,使得如果登录成功后网页弹出攻击,密码依旧使用上面的永真式确保能够登录成功:
    • 原理:网页源代码中是直接将用户名内嵌进去的,故我们可以通过在用户名中添加script脚本实现XSS攻击
<script> alert("这里是20212324Jinbo的XSS攻击!") </script> # 弹出警告

image-20240603163134625

  • 登陆测试,成功!

image-20240603163210237

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。

image-20240603163319289

  • 输入命令解压启动:
 java -jar webgoat-server-8.1.0.jar

image-20240603163522019

2.6.2SQL注入
  • webgoat为我们提供了丰富的网络攻击实践环境(有点像皮卡丘哈哈哈),同时讲解比较清晰,能够帮助我们在课后的实践当中对对应内容有更加深刻的认识。
  • 前面几个是学习sql的基本知识(增删查改)

image-20240603163708695

  • 尝试String SQL injection学习与实践
    • 通过在字符串最后添加永真式及结束条件,即可实现攻击
  • 尝试Numeric SQL injection学习与实践
    • 以User_Id作为注入点,SQL语句为SELECT * From user_data WHERE Login_Count = 1 and userid= 1 or 1=1,实现注入攻击

image-20240603165434772

  • 在其中加入SQL语句,通过"update"关键字实现SQL query chaining

    • 攻击环境为修改工资表从而成为这个公司最富有的人!

    • 依照表的结构,我们在TAN中填写的一部分SQL语句为:3SL99A’;update employees set salary = salary + 50000 where first_name = ‘John’; –

image-20240603165613233

  • 尝试Compromising confidentiality with String SQL injection攻击,通过利用“OR”关键字,在SQL语句中构建永真条件。

    • 实验背景是我们要删除操作表从而死无对证!

    • 尝试Compromising Availability,使用drop table关键字进行操作。我们在具体攻击过程中可能表会记录增删查改以保障库的安全,我们需要将其删除以完成整个攻击过程

      • 输入 1’; drop table access_log; –

    image-20240603165750650

2.6.3XSS
  • 尝试Reflected XSS攻击。
    • 该题中存在两个可提交字段,故可以尝试使用alert()来确定哪个字段易受攻击。
    • 因此,在两个提交框中输入如下攻击代码,发现代码在第一个提交框中时会出现弹窗,可知第一个提交框易受攻击。
 <script> alert("20212324_XSS") </script>

image-20240603170325575

  • DOM-Based XSS
    • 题目当中告诉了我们“The ‘base route’ in this case is: start.mvc#lesson”,而js文件中写道“‘test/:param’: ‘testRoute’”,因此答案就是“start.mvc#test/”。

image-20240603170355863

2.6.4.CSRF
  • 尝试Basic Get CSRF Exercise,通过查看网页源代码查看对应跳转逻辑以期实现跳过逻辑完成跳转、找到flag。
    • 尝试在该页面下按F12查看网页源代码,查看Submit Query的部分代码。
      • 检索form#basic-csrf-get,找到input部分

image-20240603170444262

  • 可以看到Submit Query按钮type是hidden,也不能让用户执行,故把这部分源码新建成一个html,注意不能放到需要root权限的文件夹(如上面的/etc/www/html),否则会报错。
  • 把action这一部分的地址改成http://localhost:8080/WebGoat/csrf/basic-get-flag

image-20240603170656870

image-20240603170709047

  • 然后再用浏览器打开这个html,可以看到页面中只有一个提交框"Submit Query",点击"Submit Query",就可以成功获取flag值。

image-20240603170717181

image-20240603170911750

  • 回到WebGoat提交flag,成功完成

image-20240603170919948

3.问题及解决方案

  • 问题1:添加PHP进行后端识别和跳转中,每次跳转后会提示下载php文件而不是进入相应页面

image-20240605081808997

  • 问题1解决方案:

    • 一开始在网上搜索答案,提示为nginx未发生作用。因此下载nginx查看效果:

    image-20240605081929209

    image-20240605081934575

    image-20240605081941727

    image-20240605081949867

    • 但失败了,后续回顾复盘发现apache2中就可以实现对php的函数逻辑😂不过还是有收获滴,说明php的跳转需要服务器的解析而不能直接通过浏览器完成;
    • 进而发现由于2.1是直接打开html文件做的,导致2.4虽然apache2一直开着但并未发生作用!!!通过127.0.0.1/对应文件打开,登录成功!

4.学习感悟

4.1 前端与后端的协同

  • 实验中,我学习了HTML、JavaScript和PHP,理解了前端与后端如何协同工作。前端负责呈现和收集用户输入,后端负责处理逻辑和数据存储,两者缺一不可,数据库更是重中之重。

4.2 防御策略的构建

  • 在网络攻击的亲身实践中,我认识到构建防御策略的重要性。了解攻击手段只是第一步,更重要的是学会如何防御这些攻击。

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值