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