bWAPP HTML Injection (HTML注入)

前言

bwapp靶场每一种类型都分为3种等级:  Low,  Medium,  High

这边我就按照类型归类写, 方便查阅。

本文是HTML注入和iFrame注入,其他的本质都是HTML的改变。那么有人会问,XSS与HTML注入有啥区别呢?其实本质上都是没有区别的,改变前端代码,来攻击客户端,但是XSS可以理解为注入了富文本语言程序代码,而HTML注入只注入了超文本标记语言,不涉及富文本程序代码的问题。这里的iframe注入实际上就是一个阅读器,可以阅读通过协议加载的活服务器本地的文件。

话不多说,  直接lu靶场

0x01  HTML injection Reflected GET

分析网站:

Low

Low等级没有任何防护,  直接注入即可:

Medium

在Medium等级中,  继续进行注入的话,  会发现< >尖括号被转义成html实体了:

源码对input进行了url解码:

function xss_check_1($data)
{
    
    // Converts only "<" and ">" to HTLM entities    
    $input = str_replace("<", "&lt;", $data);
    $input = str_replace(">", "&gt;", $input);
    
    // Failure is an option
    // Bypasses double encoding attacks   
    // <script>alert(0)</script>
    // %3Cscript%3Ealert%280%29%3C%2Fscript%3E
    // %253Cscript%253Ealert%25280%2529%253C%252Fscript%253E
    $input = urldecode($input);
    
    return $input;
    
}

那么可以采用url编码来绕过:

%3cscript%3ealert(1)%3c/script%3e

注意,  在url中的参数注入不会被url编码成功..

High

源码看到,  利用了htmlspecialchars()函数进行html实体编码:

function xss_check_3($data, $encoding = "UTF-8")
{
    // htmlspecialchars - converts special characters to HTML entities  
    return htmlspecialchars($data, ENT_QUOTES, $encoding);   
}
  • ENT_QUOTES - 编码双引号和单引号。

评估为安全。

0x02

分析

在post的请求中,  就不同于get型的直接url中的参数污染注入:

这就需要POST放包来注入,  剩余的方法和Get型一样,  不再赘述。 

Low

Medium

注意,  要在输入框中输入才能被url解码

High

安全。

0x03

分析网页特定,  猜想是将网页的url在前端页面中显示出来:

Low

尝试在url后面加入参数,  判断是否存在注入点:

http://localhost:8080/bWAPP/htmli_current_url.php?id=1

成功,  然后注入script:

发现尖括号被编码成html实体了..

经过实验,  发现是由于注入的尖括号是在url中,  在发送到服务端之前url已经被url编码了,  而服务端又没有进行url解码,  这样导致尖括号的失效。

两种方法解决:

1.  用burp抓包,  修改参数:

2. 修改源代码,  增加url解码函数:

直接在url注入:

  

Medium

和Low等级一样,  由于url中传参会自动url编码,  而服务端又没有进行对应的url解码, 

直接用burp抓包修改即可:

查看源码,  他是用js脚本执行document.write来写入url的:

 

High

high级别用了htmlspecialchars()函数,  安全:

0x04  HTML Injection - Stored (Blog)

Low

分析:

这里的记录生成(添加)类似与DOM型的XSS:

在Low级别没有任何防护,  直接注入js即可:

Medium&High

Medium和High级别一样,  都使用了mysqli_real_escape_string()来将特殊字符转义,  (比如单双引号, 尖括号, 括号等等)


  • 拓展----mysql_escape_string()函数

mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。

下列字符受影响:

\x00,  \n,  \r,  \,  ',  ",  \x1a

如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。


如果是sql注入还可以利用宽字节等方法绕过,  但html注入就无法注入了。

0x05  iFrame Injection

在这里可以成为阅读器(www目录下所有静态文件的阅读器)和跳转和一个可以诱导客户访问某站点的一个点,利用:大小size设置为0时可以理解为无交互的刷访问、前端挖矿、挂黑链、诱导下载等等

Low

利用的方法有很多,  观察有一个可控的参数ParemUrl

  • 文件包含+目录穿越

将ParamUrl参数指向服务器的其他文件,  即可实现目录穿越的文件读取:

http://localhost:8080/bWAPP/iframei.php?ParamUrl=../README.txt&ParamWidth=800&ParamHeight=800

  • XSS攻击

观察ParemUrl参数值别写入HTML源码中,  这里直接利用闭合或添加属性了实现XSS:

http://localhost:8080/bWAPP/iframei.php?ParamUrl=" onload="alert(1)&ParamWidth=800&ParamHeight=800  // 闭合注入xss

http://localhost:8080/bWAPP/iframei.php?ParamUrl=javascript:alert(111)&ParamWidth=800&ParamHeight=800  // JavaScript伪协议
  • url跳转

这里演示一个url跳转,  也可以尝试远程文件包含:

http://localhost:8080/bWAPP/iframei.php?ParamUrl=http://www.xiaodi8.com&ParamWidth=800&ParamHeight=800

 Medium

在Medium级别中,  做看一些防护:

这里对ParamUrl写死了,  且双引号前面加了反斜杠做了转义,  那么可以试试ParamWidth还能否闭合:

于是嚣张的注入:

http://localhost:8080/bWAPP/iframei.php?ParamUrl=robots.txt&ParamWidth=800" onload=alert(document.cookie) //&ParamHeight=800

Do NOT use addslashes() for XSS or HTML validations!!

High

用了htmlspecialchars()转化为HTML实体, 安全:

猜你喜欢

转载自blog.csdn.net/angry_program/article/details/104479603