模板注入SSTI

2021-10-22 22:25:59 字數 3089 閱讀 4752

layout: post

title: 「ssti模板注入」

categories: [網路安全cybersecurity]

tags: [ssti]

<?php 

//兩個引數 1,html 模板; 2,需要修改的引數

function display($tplfile, $tplvars = null)

$html = compile($tplfilepath);

$cachefilename = parsepath($tplfile);

if (!check_cache_dir(tpl_cache))

if (!file_put_contents($cachefilename, $html))

if (is_array($tplvars))

}function check_cache_dir($path)

if(!is_writeable($path) || !is_readable($path))

return true;

}function parsepath($tplfile)

function compile($path)

' => '<?php if(\1): ?>',

'' => '<?php else : ?>',

'' => '<?php elseif(\1) : ?>',

'' => '<?php elseif(\1) : ?>',

'' => '<?php endif;?>',

'' => '=$\1;?>',

' ' => '<?php foreach(\1) :?>',

'' => '<?php endforeach;?>',

'' => '<?php for(\1):?>',

'' => '<?php endfor;?>',

'' => '<?php while(\1):?>',

'' => '<?php endwhile;?>',

'' => '<?php continue;?>',

'' => '<?php break;?>',

'' => '<?php $\1 = $\2;?>',

'' => '<?php $\1++;?>',

'' => '<?php $\1--;?>',

'' => '<?php /* ',

'' => '*/?>',

'' => '<?php /* ',

'' => '*?>',

'' => '<?php ',

'' => '?>',

'' => '<?php include \1;?>',

];$file = file_get_contents($path);

foreach ($keys as $key => $val)

else

}return $file;

}function parseinclude($data)

<?php 

define('tpl_cache','./cache/');

define('tpl_path','./views/');

#### test.php

<?php

include 'config.php';

include 'tpl.func.php';

$title = '圈子社群';

$content = '圈子社群!圈子社群!';

如果在乙個頁面中php**與html**混合在一起,在很多時候都會造成不便,用模板引擎可以讓php**和html**進行分離。

還是道哥的那句話,安全的本質是信任。sst信任了使用者的輸入,並且執行這些內容,包括執行本機函式。就像eval函式對傳入的內容未加任何過濾一樣。因此模板注入(ssti)很容易導致遠端**執行(rce)、資訊洩露等漏洞。

本來準備找ctf題的,但是一直沒找到,如果有師傅找到原始碼,望分享!

這裡就用vuhub的ssti測試一下

訪問頁面是hello guest

說明這裡的name我們是被信任的(當它什麼都沒過濾),猜測存在ssti。

接著再輸入乙個表示式}

顯示hello 6,驗證了存在ssti。

payload

python3 :讀取檔案

也可以用工具tplmap,挺好用

1.盡可能載入靜態模板檔案。

2.不要允許使用者控制此類檔案或其內容的路徑。

模板注入 python

在學習ssti之前,先把flask的運作流程搞明白。這樣有利用更快速的理解原理。先看一段 from flask importflask defhello word return hello word route裝飾器的作用是將函式與url繫結起來。例子中的 的作用就是當你訪問的時候,flask會返回...

Python模板注入

近期遇到python模板注入問題,故在此整理,便於後期回顧。首先什麼是 python模板 呢?python有很多模板引擎可以幫助我們構建完善的web應用程式。這裡將要討論的就是jinja2 而 模板注入 就是在模板中注入特定的 這裡的模板可能是檔案,也可能是字串。在jinja2中,使用執行for迴圈...

SSTI 命令執行的一些總結

獲取基本類 class mro 1 class bases 0 class bases 0 class bases 0 object 讀檔案 class bases 0 subclasses 40 r c 1.php read object.subclasses 40 r c 1.php read ...