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 ...