20252812 2025-2026-2 《网络攻防实践》实践十报告
20252812 2025-2026-2 《网络攻防实践》实践十报告
1 实践内容
1.1 本周学习内容
1.1.1 Web应用
Web应用程序是一种使用浏览器在互联网或企业内部网上进行访问操作的应用软件形态,通常是被用JS、HTML等浏览器支持的语言编写的。Web应用体系结构的安全威胁有这六个方面:1.针对浏览器和终端用户的Web浏览安全威胁。2.针对传输网络的网络协议安全威胁。3.系统层安全威胁。系统层安全威胁指Web站点的Windows Server、Linux等操作系统存在远程渗透攻击和本地渗透攻击的威胁。4.Web服务器软件安全威胁。5.Web应用程序安全威胁。6.Web数据安全威胁。
1.1.2 SQL注入
SQL注入的原理是向Web应用程序提供的用户输入接口输入一段精心构造的SQL查询命令,攻击和利用不完善的输入验证机制,使得注入代码得以执行完成的非预期攻击操作。产生SQL注入漏洞的原因有两种:1.用户输入没有被正确地过滤以消除SQL语言中的如引号、双引号、反引号、分号、百分号、井号等有特殊含义的符号。2.没有对输入数据进行严格的类型判断,如未判断输入参数是否是合法的整数类型。进行SQL注入的过程一般是:1.发现SQL注入点。2.判断后台数据库类型。3.猜测并破解后台数据库中管理员的口令。4.上传ASP后门,得到默认账户权限。5.尝试提升自身权限。6.利用数据库扩展存储过程执行Shell命令。对SQL注入的防范措施有:1.使用类型安全的参数编码机制。2.针对任何外部用户输入都进行完备检查。3.将动态SQL语句替换为存储过程、预编译SQL或ADO命令对象。4.加强SQL数据库服务器的配置与连接。
1.1.3 XSS攻击
XSS的全称是Cross Site Scripting,中文意思是跨站脚本攻击。在许多流行的Web论坛、留言本、博客及其他允许用户交互的Web应用程序中,用户提交的内容可以包含HTML、JavaScript及其他脚本代码,一旦Web程序没有对这些输入的合法性进行有效检查与过滤,就可能让这些恶意代码逻辑包含在服务器动态产生或更新的网页中。一种典型的XSS攻击的流程是1.测试网站的XSS漏洞。2.显示用户的会话Cookie。3.窃取用户的会话Cookie。4.利用Cookie信息假冒其他用户发表与修改帖子。在服务器端,防范跨站脚本攻击的措施有:1.对输入进行验证。2.对输入进行净化。3.消除危险的输入点,如应避免在现有的JavaScript中插入用户可控制的数据。在客户端,为防范XSS,应提升浏览器的安全设置。
1.2 实践内容
1.2.1 SEED SQL注入攻击与防御
一个简单的员工管理Web应用程序存在SQL注入漏洞。要利用这个网站做这些事:1.使用数据库熟悉SQL查询。2.在不知道口令的情况下登录此应用程序。3.通过更新个人信息的界面实施针对UPDATE语句的SQL注入攻击。4.修复SQL注入漏洞。
1.2.2 SEED XSS实验
有一个名为Elgg的Web应用程序,它存在可能遭受XSS攻击的漏洞。要利用这个漏洞,通过在个人资料中写入代码,实现窃取cookies、篡改他人资料、传播蠕虫等。最后要通过某种方式对抗XSS攻击。
2 实践过程
2.1 安装、配置虚拟机
我用百度网盘下载了王*喆同学分享的seedlab虚拟机,把虚拟机文件解压后放在了“D:\耐涂隼箱0。\㯊。\灥。\㱂。\䜈。\聗。\攚。”这个文件夹里。然后我用VMware安装这个虚拟机。进入新建虚拟机向导,采用自定义模式。

选择稍后安装操作系统。

对操作系统选Linux,对版本选择Ubuntu。

对于处理器数量和内核总数设为一个就够了。

把内存大小设置为两千两百八十四兆字节。

对磁盘,选择使用现有虚拟磁盘,并选择虚拟机文件夹里的SEEDUbuntu-16.04-32bit.vmdk,然后保留现有磁盘格式。


打开虚拟机,发现能进入图形界面了。

执行hostnamectl set-hostname xueqiancheng,并且把/etc/hosts中记录的主机名改为xueqiancheng,然后重启,主机名就变成xueqiancheng了。

2.2 SEED SQL注入攻击与防御
2.2.1 使用数据库熟悉SQL查询
在刚刚安装好的seed_ubuntu虚拟机上,输入mysql -u root -p,再输入口令,以root的身份登录进mysql。然后输入show databases;查看root拥有的数据库的集合,发现有名为elgg_xss、phpmyadmin等的数据库。我输入use Users;进入名为Users的数据库。再用show tables;查看Users这个数据库中的表格,我发现该数据库只有credential这一张表。

我先用select * from credential查看credential表中全部内容,我发现有6行、11列,这个表中记录的信息都是员工的个人信息,具体有EID(雇员标识)、birth(出生日期)、SSN(社会安全号码)等。其中记录的每个员工的Password并不是登录时实际输入的口令,而是口令的哈希值。随后我用select * from credential where Salary >= 30000;查看薪水多于或等于三万的员工信息,程序输出了5行,没有输出Alice这一行,因为她的薪水只有两万。

我又用select * from credential where (Name = 'Ryan') or (Name = 'Admin');,查询结果有两行,分别是姓名为Ryan和Admin的员工对应的那两行。

在SQL语句中,句末必须有分号,可以用括号表示短语的优先级,用where连接条件。SQL语句不会区分关键词的大小写,把from写成FROM、FrOm都可以。
2.2.2 对SELECT语句的SQL注入攻击
在火狐浏览器的地址栏输入[www.seedlabsqlinjection.com],进入员工登录验证页面,我在此任务中的目标是在不知道正确口令的情况下以某个用户的身份登录进去。

打开Web Developer\Inspector,查看网页源代码,其中

浙公网安备 33010602011771号