[理论-学习]Web安全-XSS-基础18

声明:

由于笔者能力有限,难免出现各种错误和漏洞。全文仅作为个人笔记,仅供参考。

笔记内容来源于各类网课。

环境:

XSS Challenges Stage #15:http://xss-quiz.int21h.jp/ ,FireFox

一、概述

十六进制绕过过滤触发XSS。

二、document.write

write() 方法可向文档写入 HTML 表达式或 JavaScript 代码。

可列出多个参数(exp1,exp2,exp3,...) ,它们将按顺序被追加到文档中。

document.write(exp1,exp2,exp3,....)

更多细节参考W3school

我们在线测试一下write方法,测试地址。 

我们修改内容为十六进制,查看输出。

我们依次输入的是不可打印字符(0x02),数字1(0x31),字母d(0x64)和符号<(0x3c),都可以正常输出。HelloWorld没有输出,由于<的作用将它识别为标签名。

当然直接输入数字1,字母d,符号<也是可以打印出来,这里是为了明确,write确实可以将对于字符的十六进制转为字符打印出来。

三、XSS探测

1. 正常的数据提交

提交123abc,数据出现在input的value中,script的write方法中,以及脚本write出的结果。 

2. 代码审查

我们先尝试利用value属性进行XSS。

发现不仅过滤的双引号,还将左右尖括号进行的转义。这里对于value很难进行闭合利用。

我们利用write方法,将左右尖括号转为十六进制输入,那么输出来的脚本写在页面上便会执行。

\x3cscript\x3e alert(1); \x3c\x2fscript\x3e

发现write中的原来的\没有了,所以就全部当做字符串输出。

需要双写\\表示\。在输入的字符串中需要用\\x表示\x,这样在write中才能正确输出对于的字符。

\\x3cscript\\x3e alert(1); \\x3c\\x2fscript\\x3e

3. 构造Payload

\\x3cscript\\x3e alert(document.domain); \\x3c\\x2fscript\\x3e

JS成功执行。 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值