【XSS技巧拓展】————22、Source-Breaking Injections

在处理HTML注入时,有一个有趣的技巧可以使XSS攻击起作用。为了说明这种技术,我们将使用以下内容,作为小型挑战发推文:

#XSS迷你挑战https://t.co/rlInsfDTah
解决方案在下周六的#blogpost中pic.twitter.com/UtL39rxy3D

代码简短而且非常简单,使用现实场景的关键元素构建:

brutelogic.com.br/tests/newsletter.php

与明显的输入相反,在这段代码中我们有一个PHP_SELF  漏洞,这使我们能够在不提供任何参数的情况下注入URL:

当我们注入标记属性时,我们试图突破它而没有成功,因为关闭标记并开始新标记所需的大于号(>)被替换为减号( - ):

因此,我们将尝试使用事件处理程序来使用内联注入:

再次没有成功,但这次是因为javascript块(第11行到第17行)清理了每个字符串,其中“on”跟随或不是间隔字符(%09 %0A,%0C,%0D或%20)和document.location.href(第15行)中的等号(=),即处理URL的属性。

javascript函数eventFilter()在文档主体加载时调用(第3行),操作在运行时构建的页面(参见  DOM),因此尽管它在源上正确反映,但注入不起作用。

但是如果我们创建一个任意属性并且只是保持其值打开,那么注入后的所有代码都将被更改为其值:

这样,只有当浏览器的HTML解析器找到下一个单引号(')时才会关闭“1”属性,该引用位于“Don’t be evil”这个短语上。我们注入的表单标记将在下一个大于符号(>)中关闭,该标记位于</ h6>标记中。

输入字段与提交按钮一起消失,javascript函数完全禁用(全部从第8行到第18行)。因为在页面中没有更多元素可以交互,“style”属性也被“ - ”替换,我们不能在我们的目标标记之后注入任何东西,我们无法触发我们提供的事件处理程序(并且没有在不可知的事件处理程序)。

所以这是最后一招。在当前的Firefox浏览器中,我们有以下处理程序,在源代码中只需要一个脚本块来触发它们:

onafterscriptexecute

onbeforescriptexecute

但要达到挑战的最后(在页面的congrats.js脚本中)

if (brute)
    alert(“Congratz, buddy!”);
else
    alert(“Almost there, try again.”);

我们只能使用后者:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值