通过Fuzzing找出浏览器的一些怪癖-黑客接单平台

在这篇文章中我将向你展现我怎么经过Fuzzing找出Firefox浏览器的多个”古怪”。一般来说,研究者Fuzzing的意图大多是找出引发内存损坏的行为,但我是个破例;我要找的是浏览器一些其他的风趣行为...

在这篇文章中我将向你展现我怎么经过Fuzzing找出Firefox浏览器的多个”古怪”。一般来说,研究者Fuzzing的意图大多是找出引发内存损坏的行为,但我是个破例;我要找的是浏览器一些其他的风趣行为。例如某些字符能够引起标签发作反常(翻开或闭合),或某些字符能够绕过JavaScript解析器作出某种行为。上述这些意外行为一般能够绕过安全策略和完结Javascript沙盒逃逸,然后有助于XSS进犯。 我想评论的第一个Bug是关于怎么经过其他的办法闭合HTML注释。假如你阅读过HTML标准,你应该知道能够运用-->或--!来闭合注释,但还有其他办法吗?这是一个好问题,很合适咱们翻开Fuzzing。咱们只需预备一些代码就能够找出该问题的答案。 时刻回到2008年,我在结构Shazzer用于对浏览器进行含糊测验,那时我被约束每页只能导入10000个进犯向量,但回到2019一切都更快了,咱们能够一次性对更多方针进行含糊测验。一起也能够运用DOM来加快Fuzzing,由于我不必再把向量逐一加载到当时文档中。但需求留意这不是全能的,你得到的成果或许不完好,实践我发现DOM在特点(例如href)赋值中答应NULL字符,但HTML解析器不会解析。这儿还有一些其他很帅的bug,但你不能轻信浏览器的成果,你需求深入研究HTML解析器的行为。虽然这种输出HTML的办法比运用服务端言语快得多,但在大多数情况下都不适用。 第一步现已完结——咱们找出问题”有什么字符能够闭合HTML注释?”。为了找出答案咱们要运用已知可闭合HTML注释的字符,然后fuzz那些咱们现在不知道的字符。下一步则是运用东西展开Fuzz,这儿我运用的是Hackvertor(也能够在本地web服务器建立)。加载完Hackvertor,一般是向输入框中写入内容并运用特定符号做一些转化,对输出做某些操作后然后获取终究输出。但咱们没有要转化的内容,因而咱们直接导入内容到输出框中。点击输出框区域的按钮,创立数组存储字符,然后创立div米素开端测验HTML: log = []; div=document.createElement('div'); 接下来咱们要fuzz超越1000000个unicode字符(精确地说是0x10ffff)。所以先创立一个for循环: for(i=0;i 然后再运用div米素,这儿我测验的是!之后的方位,所以字符要注入到!后边。然后运用一个img米从来查看成果是否有用,假如这个米素为显性则代表HTML注释已闭合。咱们现已预备好了一些风趣的字符! div.innerHTML = '-->'; 运用querySelector查看img是否存在,然后将字符增加到日志,然后封闭if句子和for循环,最终把成果会显现在左边的输入框中: if(div.querySelector('img')){ log.push(i); } } input.value=log 这儿有完好的代码,你只需在Firefox中翻开URL,然后把内容放到输出框,点击“Execute JS”按钮开端字符fuzz。Fuzz结束后你应该在输入框中能够看到数字,数字对应有用的字符代码。在编撰本文时Firefox(67版别)仍答应经过把换行字符-n和r-放到!后边来闭合注释。很快我就收到音讯,奉告该bug已修正。Fuzzing最终的阶段便是开端拼装Payload,这很简单你只需用换行符替换字符代码,然后增加XSS Payload: --> 你能够再次运用Hackvertor来测验它是否有用,只需将上面的内容粘贴到输出框中,然后点击“Test HTML”引发弹窗。

这样咱们就在Firefox HTML解析器里找到了一个很cool的bug。OK,让咱们持续找下一个,一个新问题:“什么字符能够作为注释最初?”。咱们现在的方针是经过HTML注释打破存在的HTML特点,而不是闭合HTML注释。我信任咱们都知道能够把作为HTML注释的最初。OK,这儿我会再次运用相同的代码,但会做一些小调整,我修正innerHTML的赋值,以查看注释的最初: div.innerHTML = '+String.fromCodePoint(i)+'- >">'; 所以咱们把Fuzzing的字符放到第一个连字符后边,假如某个字符能够用作注释最初,那将注释掉div米素,然后打破title特点。这次点击“Excute JS”后,咱们在Firefox上得到两个成果:“0 , 45”。由于连字符,45是存在的,而0代表NULL字符!这意味着Firefox会将视为注释最初。有点难以想象(我觉得浏览器服务商应该对产品做足够多的行为Fuzzing)。为完好这次测验,咱们现在要创立进犯向量,将String.fromCodePoint函数替换为NULL字符,然后刺进XSS Payload: document.body.innerHTML = '!-x00- >div title="-->">div>'; 让咱们跳出HTML,转向JavaScript。我测验了大部分浏览器,Sorry,Mozilla的Firefox再次让我惊奇。我是从 @jinmo123的一篇推文取得创意,他们运用一个很帅的ES6新特性来完结无括号调用函数,但结合Fuzzing来说我的问题是哪些字符能够放到in或者说instanceof运算符后边,咱们仍需用到Hackvertor,遵从上面模版创立代码,但这次不需求DOM。咱们先创立数组和for循环: log = []; for(i=0;i 然后咱们将运用eval替换innerHTML进行Fuzzing。首先用一个try catch块来围住它,以捕获无效字符引发的反常。 try{ eval("/a/"+String.fromCodePoint(i)+"instanceof function(){}"); eval函数用来验证JavaScript是否有用,假如有用,程序将跳转到下一行,假如无效,它将抛出一个反常而且反常立马被捕获,然后Fuzz下一个字符。下面一行只记载成功字符,剩余的代码封闭try catch块和for循环,最终把成果反应至输入框。[1][2]黑客接单网

  • 发表于 2021-04-16 13:34
  • 阅读 ( 213 )
  • 分类:互联网

0 条评论

请先 登录 后评论
小瑾
小瑾

697 篇文章

你可能感兴趣的文章

相关问题