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

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

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。

Apache服务器(也称为Apache HTTP Server或Apache Web Server)是一个开源的网页服务器软件,用于在互联网上提供内容。它最初由Apache Software Foundation(ASF)开发和维护,是互联网上最流行的Web服务器软件之一。

kali默认是安装apache服务器的,只需要我们启动即可。
几个基本的命令如下:

systemctl status apache2
#查看服务状态

sudo systemctl start apache2
#开启服务,需要管理员权限

sudo systemctl stop apache2
#停止服务,需要管理员权限

sudo systemctl restart apache2
#重启服务,需要管理员权限

请添加图片描述

请添加图片描述

2.1.2 理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML。

**HTML(HyperText Markup Language 超文本标记语言)**主要由以下几个部分组成:文档类型声明;html元素;head元素;body元素;标签;属性;注释等。

表单(Form) 是HTML中的一个重要元素,它用于收集用户输入的信息。表单可以包含各种类型的输入字段,如文本框、密码框、复选框、单选按钮、提交按钮等。用户可以在这些字段中输入或选择信息,然后提交给服务器进行处理。

编写一个带有表单的简单的html,模拟用户登录页面,表单中有三个输入框,一个是用户名、一个是口令、还有一个是提交按钮。表单使用post方法提交。
请添加图片描述

放到kali的网站目录下(管理员权限)。

请添加图片描述

提交表单并抓包查看。

请添加图片描述

改成get方法。
请添加图片描述

提交表单并抓包查看。
请添加图片描述
总结:get方法和post方法比较
在这里插入图片描述

2.2 Web前端javascipt

2.2.1 理解JavaScript的基本功能,理解DOM。

**JavaScript(JS)**是一种流行的编程语言,主要用于Web开发。它提供了许多基本功能,使得开发者能够创建动态和交互式的网页。

JavaScript的基本功能如下:

  • 动态更新内容
    • JavaScript能够动态地更新HTML元素的内容,比如修改文本、颜色、图像等。使用DOM(文档对象模型)API,JavaScript可以访问和修改HTML文档的结构、样式和内容。
  • 处理用户交互
    • 通过事件监听器(event listeners),JavaScript可以响应用户的各种操作,如点击按钮、滚动页面、输入文本等。常见的事件类型包括点击事件(click)、键盘事件(keydown, keyup)、鼠标移动事件(mousemove)等。
  • 异步操作
    • JavaScript支持异步编程,允许在不阻塞主线程的情况下执行耗时操作,如网络请求(AJAX)、文件读取等。常用的异步编程技术包括回调函数(callbacks)、Promises、async/await等。
  • 表单验证
    • 在用户提交表单之前,JavaScript可以用于验证表单数据的有效性,确保用户输入的数据符合预定义的要求。这有助于减少无效数据的提交,提高应用的健壮性。
  • 创建动画和过渡效果
    • JavaScript可以配合CSS来创建复杂的动画和过渡效果,提升用户体验。通过操作DOM元素的样式属性或使用专门的动画库(如GSAP、anime.js等),可以实现各种动态效果。
  • 数据存储
    • JavaScript支持多种数据存储方式,包括使用浏览器的localStorage和sessionStorage来存储用户数据。这些存储方式允许开发者在用户的浏览器中保存数据,以便在用户下次访问时恢复状态。
  • Web API访问
    • JavaScript提供了丰富的Web API,允许开发者访问浏览器和设备的各种功能,如地理位置、摄像头、麦克风等。这些API使得Web应用能够提供更丰富、更强大的功能。
  • 其他

**DOM(Document Object Model,文档对象模型)**是HTML和XML文档的编程接口。它提供了对文档的结构化的表述,并定义了一种方式——程序和脚本能够动态地访问和更新文档的内容、结构和样式。DOM 将文档解析为一个由节点(如元素节点、属性节点、文本节点)和对象组成的结构集合。这种结构是动态的,在内存中以树形结构(节点树)的形式表示,因此称为文档对象模型。

2.2.2 在2.1的基础上,编写JavaScript验证用户名、密码的规则。在用户点击登陆按钮后回显“欢迎+输入的用户名”

编写js代码,定义规则,实现可以验证用户名和密码,代码简单易懂。

  • var是JavaScript中的一个关键字,用于声明变量。使用var声明的变量有以下特点:函数级作用域(而不是块级作用域);变量可以被重新声明和重新赋值;如果没有进行初始化,则会被赋予undefined。

  • document.forms是一个只读属性,返回一个表示文档中所有元素的HTMLCollection。这个集合是一个类数组对象,包含了文档中所有的元素。

  • alert是JavaScript中的一个内置函数,用于显示一个带有指定消息和OK按钮的警告框。这个函数会阻塞用户与页面的交互,直到用户点击了OK按钮。

请添加图片描述

和之前一样,将写好的html文件放到网站目录下。
访问网站,故意输入长度不达标的用户名,看看结果。
请添加图片描述
结果符合预期。

接下来输入正确的用户名和口令,提交表单。

请添加图片描述结果符合预期。

突然意识到弹窗和回显好像有一些区别,修改一下代码。

  • document.write() 是 JavaScript 中的一个方法,它用于将文本、HTML 或 JavaScript 代码写入 HTML 文档中。
    请添加图片描述

登录正确的用户名和口令,提交表单,页面回显“欢迎+用户名”。
请添加图片描述

2.2.3 尝试注入攻击:利用回显用户名注入HTML及JavaScript。

简单修改一下代码,尝试注入攻击。

请添加图片描述

请添加图片描述

尝试XSS攻击(跨站脚本攻击):准备一段脚本,注入在输入框中,随着登录信息一起提交表单。

请添加图片描述

XSS注入攻击成功!
请添加图片描述

尝试HTML注入,注入内容是html代码。步骤同XSS攻击。
请添加图片描述

HTML注入攻击成功!

请添加图片描述

2.3 Web后端:MySQL基础:正常安装、启动MySQL,建库、创建用户、修改密码、建表

kali中默认安装了mysql。查看状态,没启动的话启动就好。启动的指令和之前启动apache相同。

systemctl status mysql
#查看服务状态

sudo systemctl start mysql
#开启服务,需要管理员权限

sudo systemctl stop mysql
#停止服务,需要管理员权限

sudo systemctl restart mysql
#重启服务,需要管理员权限

MariaDB是一个开源的关系型数据库管理系统,它是MySQL的一个分支,由MySQL的创始人之一Michael Widenius领导的团队开发和维护。MariaDB的管理工具是phpMyAdmin。

请添加图片描述

登录数据库。

mysql -u root -p
# u是用户名,p是密码

通过\h帮助,熟悉命令。
请添加图片描述

use mysql
# 使用mysql数据库
show databases;
 // 查看数据库

create database 20212308DB;
//创建数据库

请添加图片描述

接下来创建用户,调整权限,修改用户密码,如下所示:

create user 'wxc'@'%' IDENTIFIED BY '123321';
GRANT ON 20212308DB.* TO 'wxc'@'%';
FLUSH PRIVILEGES;
SHOW GRANTS FOR 'wxc'@'%';
ALTER USER 'wxc'@'%' IDENTIFIED BY 'new_password';
SHOW GRANTS FOR 'wxc'@'%';

请添加图片描述

接下来建表,插入数据,设置主键,查看表结构,如下所示:

use 20212308DB;
SHOW TABLES;

CREATE TABLE `userlogin` (
  `userID` int(4) NOT NULL,
  `userName` varchar(20) NOT NULL,
  `userPwd` varchar(20) NOT NULL
);

INSERT INTO `userlogin` (`userID`, `userName`, `userPwd`) VALUES
(1, 'zhangsan', '123'),
(2, 'lisi', '1234'),
(3, 'boss', '111');

ALTER TABLE `userlogin`
  ADD PRIMARY KEY (`userID`);

SHOW TABLES;
DESCRIBE userlogin;

请添加图片描述

2.4 Web后端:编写PHP网页,连接数据库,进行用户认证

**PHP(Hypertext Preprocessor,超文本预处理器)**是一种用于创建动态交互性站点的强有力的服务器端脚本语言。PHP 最初是由 Rasmus Lerdorf 在 1995 年创建的,它最初被设计为用于创建简单的动态网页。随着时间的推移,PHP 已经成为一种广泛使用的开源语言,并且拥有大量的库和框架,可以处理从简单的网站到复杂的企业级应用程序的各种任务。

编写PHP网页,代码及解释如下图。
请添加图片描述

编写前端登录页面。
请添加图片描述

编写登录成功的跳转页面。

请添加图片描述

编写登录失败的跳转页面。
请添加图片描述

将上述四个代码文件放在kali的网站目录下。
打开火狐,访问登录页面。

输入错误的用户名和口令,提交表单。
请添加图片描述

输入正确的用户名和口令,提交表单。

请添加图片描述

请添加图片描述

2.5 最简单的SQL注入,XSS攻击测试

利用插件,配置一下firefox浏览器代理(为了后面连接burpsuite)。
请添加图片描述

【先开启burpsuite的数据包拦截功能!】

假设我们不知道真正的用户名和口令是啥,输入错误的用户名和口令并提交表单,用burpsuite抓包分析。
请添加图片描述

burpsuite抓到了数据包,如下图。
请添加图片描述

选择action选项中的Send to Repeater,这是个重放数据包的动作,可以让我们反复模拟测试请求—响应目标网站。

请添加图片描述

进入Repeater功能区,刚才的数据包已经进来了,我们Send发送出去,看一下结果。
请添加图片描述

通过响应头信息,可以看见failed.html的字样,登陆失败了,符合预期。

尝试简单的sql注入,如下图。
请添加图片描述
这说明了我们的注入有效,但是引起了语法问题。

再次尝试——把用户名和口令都注入永真式,如下图分析:
请添加图片描述可以看见跳转到了success.html页面,说明我们的sql注入攻击成功!

XSS攻击的测试就更简单了,都不需要抓包,直接注入进去就行。

请添加图片描述
弹窗了,这说明我们简单的XSS攻击取得效果了!

2.6 安装pikachu靶场,并完成SQL注入、XSS、CSRF攻击。

Pikachu 是一个带有漏洞的 Web 应用系统,运行 Pikachu 需要提前安装好 “PHP+MYSQL + 中间件(如 apache,nginx 等)” 的基础环境。

接下来做一些简单的Web攻击练习。

2.6.1 SQL注入攻击

数字型注入能成功的根本原因是,这里的数字最后会被用到sql语句中,成为“索引”。只要它会访问数据库,那么sql注入就有可能。

打开靶场,配置好代理,burpsuite拦截开启。
请添加图片描述

靶场随便选一个数字,提交表单。burp拦截到了数据包之后,选择重放动作。
请添加图片描述

在id=2的位置做简单的修改,OR 一个永真式,准备实施SQL注入攻击。修改后选择Send发送数据包,可以看见响应数据的预览框里已经登录进去啦,并且还爆出了所有合法用户及邮箱,到此我们可以说SQL攻击成功了。
请添加图片描述

我们再测试一下永假式,就不对了。
请添加图片描述

假如此时我想要进一步获取更多信息,我可以直接SQL注入一个查询语句,查询数据库名及版本。

请添加图片描述可以看到数据库叫做pikachu,版本是10.4.27的MariaDB。

当我知道了数据库名字和版本之后,我可以更大胆,直接查用户名和口令。这就是SQL注入的真正威力,三组用户名口令全都看到了。虽然口令经过了哈希处理,但是反哈希软件也很多,想得到明文口令易如反掌。个人信息全泄露了,数据库直接公开。
请添加图片描述

2.6.2 XSS攻击

反射性 XSS(跨站脚本攻击)是一种常见的 Web 安全漏洞,攻击者通过构造特殊的 URL 参数,诱导用户点击该链接。当用户点击此链接时,可以在用户的浏览器中执行攻击者构造的恶意代码。这种攻击方式通常利用了 Web 应用程序对用户输入的不安全处理。

点击右上角提示,为了完成本次攻击,输入正确的用户名和口令,提交表单。
请添加图片描述

跳转到下一页面,我们就是要在这里做XSS攻击,直接一个弹窗脚本进去。
请添加图片描述
提交表单,触发弹窗,over!
请添加图片描述
刚刚是post方法的测试,现在攻击一下get方法。

请添加图片描述get方法导致输入框有长度限制。

进入开发者模式,看到源代码中限制了最大长度20。
请添加图片描述

大方点,咱直接改成100,XSS攻击就要爽。
请添加图片描述

打开了最大输入长度的限制,直接把脚本写在输入框里,提交表单。
请添加图片描述
post方法和get方法的XSS攻击均测试成功!

2.6.3 CSRF攻击

为了完成CSRF攻击,首先根据右上角提示,登录随便一个合法用户。
请添加图片描述

跳转页面。再点击“修改个人信息”触发跳转。
请添加图片描述

跳转到了个人会员中心的修改信息页面。

请添加图片描述

此时打开burp,开启数据包拦截后,点击提交表单。在burpsuite中选择生成CSRF利用。此处就相当于拿到了合法用户的cookie,进一步利用cookie完成合法用户的权限才能做的事(burpsuite就是好,工具多多烦恼少)
请添加图片描述

在value字段中,把自己想改的信息改进去。

请添加图片描述

点击Test in browser。复制生成的URL。
请添加图片描述

将刚才生成的url在浏览器中打开,提交请求包。(记得打开burp的拦截)
请添加图片描述

跳转页面后,可以看见我们成功修改了个人信息。
请添加图片描述

3.问题及解决方案

  • 问题1:启动apache服务后,无法访问网站,如下图所示。

请添加图片描述

  • 问题1解决方案:端口如果不是默认端口,需要在url中指明

请添加图片描述

  • 问题2:网页编码问题:中文显示乱码。
    请添加图片描述

  • 问题2解决方案:在html代码的head部分指定utf解码。

请添加图片描述

4.学习感悟、思考等

本次实验还是很顺利的。花时间最多的地方应该是burpsuite的配置、学习、使用。但是尝试了几次之后发现真的好用、真的强大。强哥甄选!值得信赖!
八个实验都完成了,长叹一口气。网络攻防还有课设和实践报告等内容需要收尾,继续努力。还是想说终于做完了一学期的实验太不容易了。但幸好,终有所获。
感谢老师一学期的授课和指导,您辛苦啦!

参考资料

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值