bWAPPweb安全靶场,HTML_Injection模块php
超文本标记语言(HTML)注入有时也被称为虚拟污染。 这其实是一个由站点形成的攻击,该站点容许恶意用户向其 Web 页面注入 HTML,而且没有合理处理用户输入。 换句话说,HTML 注入漏洞是由接收 HTML 引发的,一般经过一些以后会呈如今页面的表单输入。html
1.1.1 输入两个名字,页面出现用户输入的东西mysql
1.1.2网页地址为:web
更改参数,low等级的没有对输入的内容有任何检测sql
结果:数据库
1.1.3 或者 firstname 改成 <a href=http://www.baidu.com>点这里到百度</a>数组
<a>标签的href 属性规定连接的目标浏览器
结果:缓存
firstname=<script>alert(document.cookie)</script> 能够获取用户cookie安全
1.2.1 <h1>Hack</h1>无效
应该对字符<>或 / ,检测或过滤了,检测的方法:过滤、替换、编码解码,这里没有作替换,试一下编码解码
试一下URL encode(其余还有不少编码方式base64等)
urlencode("<h1>Hack</h1>") --->
结果:没变,说明页面展现的时候,把我输入的内容URLdecode了
那咱们URLencode两次,他解码后就是一次URLencode的结果
结果注入成功
由于 只进行一次URLencode,浏览器会自动默认 把参数URLdecode一遍,因此和没编码没有区别,两次的话浏览器解码一次,页面展现的时候在解码一次
......看一下源码吧
function xss_check_3($data, $encoding = "UTF-8") { // htmlspecialchars - converts special characters to HTML entities // '&' (ampersand) becomes '&' // '"' (double quote) becomes '"' when ENT_NOQUOTES is not set // "'" (single quote) becomes ''' (or ') only when ENT_QUOTES is set // '<' (less than) becomes '<' // '>' (greater than) becomes '>' return htmlspecialchars($data, ENT_QUOTES, $encoding); }
有一个htmlspecialchars()函数,百度一下
不会绕过~~~
知乎上有回答的https://www.zhihu.com/question/27646993,分不一样场景,可是我都试过了仍是不行
方法和get同样,只是post和get的区别
代码审计:
switch($_COOKIE["security_level"]) { case "0" : // $url = "http://" . $_SERVER["HTTP_HOST"] . urldecode($_SERVER["REQUEST_URI"]); $url = "http://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]; break;
case "1" : $url = "<script>document.write(document.URL)</script>"; break; case "2" : $url = "http://" . $_SERVER["HTTP_HOST"] . xss_check_3($_SERVER["REQUEST_URI"]); break; default : // $url = "http://" . $_SERVER["HTTP_HOST"] . urldecode($_SERVER["REQUEST_URI"]); $url = "http://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]; break; }
<div id="main"> <h1>HTML Injection - Reflected (URL)</h1> <?php echo "<p align=\"left\">Your current URL: <i>" . $url . "</i></p>";?> </div>
PHP超全局变量$_SERVER的做用:(引用http://www.javashuo.com/article/p-zgvachxa-nt.html)
$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器建立。不能保证每一个服务器都提供所有项目;服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目。
那么这里是获取Host和当前脚本路径,进行处理,而后在页面显示
把Host改成Hack,实际的时候能够改成其余网址,或者把路径修改也可(前提是有那个脚本)
mideum是document.write(document.URL)
那只能对URL作手脚了
看别人说只有IE浏览器能够,看来之后要多注意IE浏览器额
high只对当前脚本路径 用了htmlspecialchars()函数,HTML编码技术,可是Host仍是能够用low等级的方法
没有任何过滤
试了一下简单的绕过无果,审计一下代码,存储型无非就是将输入的内容存储到数据库,在查询显示的过程
找到了关键代码
全部输入的内容都要通过sqli_check_3()处理一次
function htmli($data) { include("connect_i.php"); switch($_COOKIE["security_level"]) { case "0" : $data = sqli_check_3($link, $data); break; case "1" : $data = sqli_check_3($link, $data); // $data = xss_check_4($data); break; case "2" : $data = sqli_check_3($link, $data); // $data = xss_check_3($data); break; default : $data = sqli_check_3($link, $data); break; } return $data; }
这是 sqli_check_3()
function sqli_check_3($link, $data) { return mysqli_real_escape_string($link, $data); }
mysqli_real_escape_string()函数转义字符串中的特殊字符,好比中文等,详细这里https://www.runoob.com/php/func-mysqli-real-escape-string.html
while($row = $recordset->fetch_object()) { if($_COOKIE["security_level"] == "1" or $_COOKIE["security_level"] == "2") { ?> <tr height="40"> <td align="center"><?php echo $row->id; ?></td> <td><?php echo $row->owner; ?></td> <td><?php echo $row->date; ?></td> <td><?php echo xss_check_3($row->entry); ?></td> //这里若是安全等级是 1 或 2 即 medium和high就通过xss_check_3()函数处理以后展现 </tr> <?php } else { ?> <tr height="40"> <td align="center"><?php echo $row->id; ?></td> <td><?php echo $row->owner; ?></td> <td><?php echo $row->date; ?></td> <td><?php echo $row->entry; ?></td> </tr> <?php } }
function xss_check_3($data, $encoding = "UTF-8") { // htmlspecialchars - converts special characters to HTML entities // '&' (ampersand) becomes '&' // '"' (double quote) becomes '"' when ENT_NOQUOTES is not set // "'" (single quote) becomes ''' (or ') only when ENT_QUOTES is set // '<' (less than) becomes '<' // '>' (greater than) becomes '>' return htmlspecialchars($data, ENT_QUOTES, $encoding); }
不知道怎么Hack,网上的全都是一摸同样的答案,难道不能Hack?
这个存储型的通常在Blog中出现(?)
有点像反射型XSS(同样的?)漏洞修复建议:过滤输入的数据,如< > ' " onclick on***等;对数据编码,HTML实体编码 JS编码