ホームページ  >  記事  >  ウェブフロントエンド  >  Webセキュリティをゼロから学ぶ(3)_html/css_WEB-ITnose

Webセキュリティをゼロから学ぶ(3)_html/css_WEB-ITnose

WBOY
WBOYオリジナル
2016-06-24 11:21:52989ブラウズ

前回の記事では、私が個人的にテストしたデモについて書きました。前回、これは xss で成功するために知っておく必要がある非常に重要な知識です。 。 HTML 文字エンティティだけでなく、xss の学習を続けるために理解する必要がある非常に重要な知識はエンコーディングです。そうしないと、特殊文字用のさまざまなフィルターに遭遇したときに、何もできないことがよくあります。この記事は、「答えは b 、質問 2 の答えは c と d」のさまざまなエンコーディングの知識を学ぶことを目的としています。

これら 2 つの質問を読んで、誰もが簡単に正しく答えられ、その理由がわかったら、すぐにこの記事を参照するか、直接閉じてください~~

上記の質問に答えるために、まず次のコーディング関連の知識を勉強しましょう~ ~

よく使われるコーディング

よく使われるコーディングカテゴリーの紹介は他の方のまとめから拝借しました おそらく以下の3種類があり、CSS表現は今はほとんど使われていないのでもちろんCSSコーディングなどもあります。 . これ以上の紹介はありません。

HTML エンティティ エンコーディング、10 進数、16 進数の ASCII コードまたは Unicode 文字エンコーディング。スタイルは「numeric;」です。たとえば、「3732a9d952b4eeedc1a7abb3a63044f5 html字符实体解码 -> url解码。

好吧,你告诉我是先经过js环境,再到html,反过来编码肯定挂了吧。看看我们的test5,我们在test2的基础上把第一个 \ 编码成 \ ,果然挂了!!没有正确跳转。然而仔细一看,之所以没有正确跳转是因为这个url被当成相对路径了,跳转出来的路径是 http://192.168.1.100:8848/http%3A//www.baidu.com , 前面那一串ip端口忽略,后面的地址是对的!只不过被当成了相对路径而已。看来test5这种编码顺序也是可以的?

为了验证上面这个疑问,我测试了一下test1 -> test6 -> test7这个编码顺序,不出意外,正常跳转了。

这时候有些读者可能有点凌乱。先html编码和先js编码看来也没啥区别,瞎逼编就好了。

重新理清下思路,其实我举的这个例子非常特殊,不仅用到了三种编码,编码处理的环境也在不断变化。整个解码过程其实分4步,是这样子的:

inner/*防过滤*/HTML 的js可执行环境时候的js解码 ->

dom渲染时的html字符实体解码 ->

location.href 的js可执行环境时候的js解码 ->

url跳转时候的url解码

看完这个解码顺序大家应该都了解为什么先html编码还是先js编码都可以了吧,并不是瞎逼编的= =

测试题目

回头来看这个题目,如果大家对上面都理解了,估计对这道题目也没有什么疑问。

b为什么是错误的呢,我们来hack它吧~~

看demo:

<div id="test"></div><script type="text/javascript"> var t = document.getElementById('test'); var hash = location.hash.substr(1); t = '<a href="#" id="test" onclick="func('+ hash +')">test</a>'; function func () {}</script>

我们模拟了一个这样的例子,从hash里面作为输入点,然后输出到页面上。首先上面这个没有任何过滤。

我们写了个这样的hash - "onmouseover="alert(1)" 轻松破解

我们简单过滤一下,对单双引号html编码

<div id="test"></div><script type="text/javascript"> var t = document.getElementById('test'); var hash = location.hash.substr(1); hash = hash.replace(/\"/g, '"') .replace(/\'/g, '''); t = '<a href="#" id="test" onclick="func('+ hash +')">test</a>'; function func () {}</script>

刚才的破解方法失效了,那答案b不是对的吗?

那怎么破解?我当时被这个先入为主的思维困扰了好久,其实这边并不一定要老想着去闭合html里面的标签,可以闭合js啊!

我们提交这样一个hash - '+alert(1)+'

成功弹窗!结合html字符实体编码 + onclick里面的js可执行环境,是可以被xss的~

其他选项和题目就留给大家自己思考一下,就不一一解释了,应该并没有太大问题。

好吧,这篇就先到这里了~~

下个月继续安全方面的知识分享。大家清明快乐。。。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。