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# 判断当前目录是否存在不存在则创建

    /// <summary> /// 判断目录是否存在不存在则创建 /// </summary> /// <param name="Path">& ...

  2. 学了那么多 NoSQL 数据库 NoSQL 究竟是啥

    NoSQL 简史 NoSQL 一词最早出现于 1998 年,是 Carlo Strozzi 开发的一个轻量.开源.不提供 SQL 功能的关系数据库. 2009 年,Last.fm 的 Johan Os ...

  3. volatile与重排序

    使用关键字volatile可以禁止代码的重排序: 在Java程序运行时,JIT(即使编译器)可以动态地改变程序代码运行地顺序:例如,有如下代码: A代码-重耗时 B代码-轻耗时 C代码-重耗时 D代码 ...

  4. 渗透测试之GoogleHack

    GoogleHack 1,介绍: 使用google等搜索引擎对某些特定的网络主机漏洞(一般是服务器上的脚本漏洞)进行搜索,都能达到快速找到1漏洞的目的,然而,google相对百度讲,没有广告,搜索引擎 ...

  5. 在Vue中使用Echart图表库。【全网最简单】

    使用npm安装echart npm install echarts --save 然后在使用的页面上直接import import echarts from "echarts"; ...

  6. pycharm调试bug Process finished with exit code -1073740791 (0xC0000409)

    我经常py代码出错 控制台只提示这个 Process finished with exit code -1073740791 (0xC0000409) 但是根本没有报错原因 首先我们应该改一下pych ...

  7. Java数据结构-01顺序表

    一.定义 线性表是一种线性结构,它是具有相同类型的n(n≥0)个数据元素组成的有限序列. 二.存储分类 1.顺序存储: ①简述:是指将线性表中的各个元素依次存放在一组地址连续的存储单元中,通常将这种方 ...

  8. 【总结】mybatis

    一.config配置文件详解 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE config ...

  9. Java学习的第六天

    1.今天学习了各种运算符, 还有选择结构,循环结构 2.今天学习没有遇到困难. 3.明天学习数组和第三章的开头一部分.

  10. Scala-Mongodb入门之CRUD

    Scala入门之Mongo增删改查 环境jdk1.8,scala2.13 使用sbt管理依赖,在build.sbt中添加依赖: libraryDependencies += "org.mon ...