Server-Side Includes (SSI) Injection

什么是SSI和SSI注入

SSI是英文Server Side Includes的缩写,翻译成中文就是服务器端包含的意思。从技术角度上说,SSI就是在HTML文件中,可以通过注释行调用的命令或指针。SSI具有强大的功能,只要使用一条简单的SSI 命令就可以实现整个网站的内容更新,时间和日期的动态显示,以及执行shell和CGI脚本程序等复杂的功能。SSI 可以称得上是那些资金短缺、时间紧张、工作量大的网站开发人员的最佳帮手。本文将主要结合Apache服务器介绍SSI的使用方法。

ps:(Server-side Includes) 服务器端包含提供了一种对现有HTML文档增加动态内容的方法。apache和iis都可以通过配置支持SSI,在网页内容被返回给用户之前,服务器会执行网页内容中的SSI标签。在很多场景中,用户输入的内容可以显示在页面中,比如一个存在反射XSS漏洞的页面,如果输入的payload不是xss代码而是ssi的标签,服务器又开启了ssi支持的话就会存在SSI漏洞

输入表单,lookup之后

核心代码

 1 <div id="main">
2
3 <h1>Server-Side Includes (SSI) Injection</h1>
4
5 <p>What is your IP address? Lookup your IP address... (<a href="http://sourceforge.net/projects/bwapp/files/bee-box/" target="_blank">bee-box</a> only)</p>
6
7 <form action="<?php echo($_SERVER["SCRIPT_NAME"]);?>" method="POST">
8
9 <p><label for="firstname">First name:</label><br /> //firstname表单
10 <input type="text" id="firstname" name="firstname"></p>
11
12 <p><label for="lastname">Last name:</label><br /> //lastname表单
13 <input type="text" id="lastname" name="lastname"></p>
14
15 <button type="submit" name="form" value="submit">Lookup</button>
16
17 </form>
18
19 <br />
20 <?php
21
22 if($field_empty == 1) //这里的PHP只是判断是否有输入
23 {
24
25 echo "<font color=\"red\">Please enter both fields...</font>";
26
27 }
28
29 else
30 {
31
32 echo "";
33
34 }
35
36 ?>
37
38 </div>

防护代码

 1 $field_empty = 0;
2
3 function xss($data)
4 {
5
6 switch($_COOKIE["security_level"])
7 {
8
9 case "0" :
10
11 $data = no_check($data);
12 break;
13
14 case "1" :
15
16 $data = xss_check_4($data);
17 break;
18
19 case "2" :
20
21 $data = xss_check_3($data);
22 break;
23
24 default :
25
26 $data = no_check($data);
27 break;
28
29 }
30
31 return $data;
32
33 }
34
35 if(isset($_POST["form"]))
36 {
37
38 $firstname = ucwords(xss($_POST["firstname"])); //ucwords()首字母大写
39 $lastname = ucwords(xss($_POST["lastname"]));
40
41 if($firstname == "" or $lastname == "")
42 {
43
44 $field_empty = 1;
45
46 }
47
48 else
49 {
50
51 $line = '<p>Hello ' . $firstname . ' ' . $lastname . ',</p><p>Your IP address is:' . '</p><h1><!--#echo var="REMOTE_ADDR" --></h1>';
52
53 // Writes a new line to the file
54 $fp = fopen("ssii.shtml", "w");
55 fputs($fp, $line, 200);
56 fclose($fp);
57
58 header("Location: ssii.shtml");
59
60 exit;
61
62 }
63
64 }
65
66 ?>

1.low

low级别,没有防护

能xss

还能构造这种payload

<!--@echo var ="DOCUMEN_NAME"-->

还能构造成exec

2.medium

function xss_check_4($data)
{ // addslashes - returns a string with backslashes before characters that need to be quoted in database queries etc.
// These characters are single quote ('), double quote ("), backslash (\) and NUL (the NULL byte).
// Do NOT use this for XSS or HTML validations!!! return addslashes($data); }
addslashes()在符号前加反斜线

3.high

 1 function xss_check_3($data, $encoding = "UTF-8")
2 {
3
4 // htmlspecialchars - converts special characters to HTML entities
5 // '&' (ampersand) becomes '&amp;'
6 // '"' (double quote) becomes '&quot;' when ENT_NOQUOTES is not set
7 // "'" (single quote) becomes ''' (or &apos;) only when ENT_QUOTES is set
8 // '<' (less than) becomes '&lt;'
9 // '>' (greater than) becomes '&gt;'
10
11 return htmlspecialchars($data, ENT_QUOTES, $encoding);
12
13 }

将预定义的字符装换为html实体字符

bWAPP----Server-Side Includes (SSI) Injection的更多相关文章

  1. ssi(Server Side Includes)介绍

    Server Side Includes (SSI) is a simple interpreted server-side scripting language used almost exclus ...

  2. Atitit Server Side Include  ssi服务端包含规范 csi  esi

    Atitit Server Side Include  ssi服务端包含规范 csi  esi 一.CSI (Client Side Includes)  1 1.1. 客户端包含1 1.2. Ang ...

  3. Windows Azure 网站 (WAWS) 中的服务器端包含 (SSI)

     编辑人员注释:本文章由 Windows Azure 网站团队的项目经理Erez Benari 撰写. Windows Azure 网站客户普遍关心的一个问题是关于我们对服务器端包含(Server ...

  4. 动态内容的缓存技术:CSI vs SSI vs ESI

    CDN 中动态内容是不太好解决的,通常需要很麻烦的技术和方法来实现这些功能,比如我设计过一种动态缓存的方法,基于 session 栏接,然后根据热点来做动态缓存时间的控制.目前开放的实现 Cache ...

  5. WEB APPLICATION PENETRATION TESTING NOTES

    此文转载 XXE VALID USE CASE This is a nonmalicious example of how external entities are used: <?xml v ...

  6. 缓存Cache

    转载自  博客futan 这篇文章将全面介绍有关 缓存 ( 互动百科 | 维基百科 )cache以及利用PHP写缓存caching的技术. 什么是缓存Cache? 为什么人们要使用它? 缓存 Cach ...

  7. Caching Tutorial

    for Web Authors and Webmasters This is an informational document. Although technical in nature, it a ...

  8. 115 Java Interview Questions and Answers – The ULTIMATE List--reference

    In this tutorial we will discuss about different types of questions that can be used in a Java inter ...

  9. Nginx - Rewrite Module

    Initially, the purpose of this module (as the name suggests) is to perform URL rewriting. This mecha ...

随机推荐

  1. C# 微支付退款申请接口 V3.3.6

    /// <summary>/// 微支付退款申请/// </summary>/// <param name="context"></par ...

  2. Pytest配置文件声明自定义用例标识

    使用pytest.ini添加自定义用例标识: [pytest] # 1.使用没有注册过的标记抛出错误 addopts = --strict-markers # 2.自定义标记 markers = sm ...

  3. linux 安装配置zerotier

    1.在线安装zerotier curl -s https://install.zerotier.com/ | sudo bash 2.添加开机自启 $ sudo systemctl enable ze ...

  4. json expected name at 1 1

    问题1:导入新的java项目,报expected name at 1:1错误. 解决方法:勾选Derived复选框.

  5. Dockerfile 笔记

    Dockerfile   ARGARG <name>[=<default value>]The ARG instruction defines a variable that ...

  6. cao 啥时候能系统地复习一下数据结构 我光学数学去了

    最近有功夫的话再敲敲数据结构复习复习

  7. LinkedHashMap 实现LRU缓存

    date: 2020-07-09 13:52:00 updated: 2020-07-21 17:40:00 LinkedHashMap 实现LRU缓存 参考 LinkedHashMap是HashMa ...

  8. svg 进度条

    先看理想效果 先上代码,在进行解释 <div id="app"> <svg width="230" height="230" ...

  9. 牛客1029A 袜子分配

    题面传送门 没学过数论的蒟蒻第一次做出数学题, 这是一种乱搞的复杂做法 先来看个简单的问题, 数字1-10取1个,问包含1的方案有多少种.显然,每一个数字取到的概率是同样的, 方案数为    , su ...

  10. NB-IoT DTU是什么 NB-IoT的优势有哪些

    NB-IoT DTU是什么 NB-IoT DTU是一种采用NB-IoT技术实现数据远距离无线传输功能的终端设备,采用工业级的硬件设施和工业级的32位高性能通信处理器,工业级的无线数据传输模块,可以自动 ...