Cara menggunakan Smarty SSTi
Perihalan masalah
Soalan menyediakan api untuk membaca pengepala XFF terdapat perkataan Bina Dengan Smarty di bahagian bawah halaman Ia boleh ditentukan bahawa ia ditulis menggunakan enjin Smarty.
Pada asasnya ia berfungsi Tentukan kemungkinan SSTi pada halaman ini
Tukar pengepala xff daripada 127.0.0.1 kepada 127.0.0{1+2} dan yang berikut keputusan akan muncul
ssti Tidak syak lagi
Muatan akhir ialah
X-Forwarded-For: {if var_dump( file_get_contents('/flag')) }{/ if}
Penggunaan SSTI Smarty
Smarty dibangunkan berdasarkan PHP menggunakan SSTI Smarty adalah sama dengan SSTI kelalang biasa.
Pengesahan Kerentanan
Secara amnya, anda boleh melihat nombor versi smarty yang dikembalikan dengan memasukkan {$smarty.version}. Versi Smarty bagi soalan ini ialah 3.1.30
Penggunaan Umum
Smarty menyokong menggunakan tag {php}{/php} untuk melaksanakan perintah php yang dibalut , idea yang paling konvensional ialah menguji teg terlebih dahulu. Tetapi setakat topik ini, menggunakan teg {php}{/php} akan melaporkan ralat:
Manual rasmi Smarty3 mempunyai penerangan berikut:
Smarty telah menamatkan teg {php} dan amat disyorkan untuk tidak menggunakannya. Dalam Smarty 3.1, {php} hanya tersedia dalam SmartyBC.
Soalan ini menggunakan kelas Smarty, jadi kami hanya boleh mencari jalan lain.
Teg {literal}
Manual rasmi menerangkan teg ini seperti berikut:
{literal} boleh menyebabkan aksara dalam kawasan templat dikeluarkan seperti sedia ada . Ini sering digunakan untuk melindungi lembaran gaya Javascript atau CSS pada halaman daripada dihuraikan secara salah disebabkan oleh pembatas Smarty.
Kemudian untuk persekitaran php5, kita boleh menggunakan
<script language="php">phpinfo();</script>
untuk melaksanakan pelaksanaan kod PHP Walau bagaimanapun, persekitaran soalan soalan ini ialah PHP7, jadi kaedah ini tidak sah.
Kaedah statik
Dapatkan kelas Smarty melalui kendiri dan kemudian panggil kaedah statiknya untuk membaca dan menulis fail, yang digunakan oleh banyak artikel di Internet.
Kod kaedah getStreamVariable kelas Smarty adalah seperti berikut:
public function getStreamVariable($variable) { $_result = ''; $fp = fopen($variable, 'r+'); if ($fp) { while (!feof($fp) && ($current_line = fgets($fp)) !== false) { $_result .= $current_line; } fclose($fp); return $_result; } $smarty = isset($this->smarty) ? $this->smarty : $this; if ($smarty->error_unassigned) { throw new SmartyException('Undefined stream variable "' . $variable . '"'); } else { return null; } }
Anda boleh melihat bahawa kaedah ini boleh membaca fail dan mengembalikan kandungannya, jadi kami boleh menggunakan diri untuk mendapatkan Smarty object dan panggil kaedah ini , muatan yang diberikan dalam banyak artikel adalah dalam bentuk: {self::getStreamVariable("file:///etc/passwd")}. Walau bagaimanapun, menggunakan muatan ini akan mencetuskan ralat berikut:
Ralat maut: Tidak ditangkap --> Ralat sintaks dalam templat "rentetan: IP Semasa:{self::getStreamVariable('file:///etc/passwd')}" kelas statik 'self' tidak ditentukan atau tidak dibenarkan oleh tetapan keselamatan <-- dibuang ke dalam /var/www/html/ smarty/ libs/sysplugins/smarty_internal_templatecompilerbase.phpon line 12
Ia boleh dilihat bahawa kaedah penggunaan SSTI versi lama Smarty ini tidak boleh digunakan pada versi baharu Smarty. Selain itu, kaedah statik ini telah dipadamkan secara rasmi dalam versi Smarty 3.1.30. Kaedah writeFile kelas Smarty_Internal_Write_File yang disebut dalam artikel tersebut untuk menulis shell tidak boleh digunakan atas sebab yang sama.
{if} tag
Saya melihat penerangan ini dalam dokumentasi rasmi:
Smarty's {if}
penghakiman bersyarat sangat serupa dengan PHP jika, dengan hanya tambahan beberapa ciri. Setiap {if}
mesti mempunyai padanan {/if}
Anda juga boleh menggunakan {else}
dan {elseif}
Semua ungkapan dan fungsi bersyarat PHP boleh digunakan di dalam jika, seperti ||, atau, &&, dan, is_array() , dsb.
Memandangkan semua fungsi PHP boleh digunakan, bolehkah kita menggunakan ini untuk melaksanakan kod kita?
Seperti yang dinyatakan pada permulaan
Kod kelemahan soalan
dibaca melalui fail selepas getshell Kod yang menyebabkan SSTI dalam soalan ini dipermudahkan seperti berikut:
display("string:".$ip); }Anda dapat melihat bahawa rentetan digunakan dan bukannya templat pintar, yang menyebabkan teg Smarty yang disuntik dihuraikan dan dilaksanakan secara langsung, menghasilkan SSTI.
Atas ialah kandungan terperinci Cara menggunakan Smarty SSTi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Cara menggunakan PHP untuk mempertahankan diri daripada serangan Server-SideTemplateInjection (SSTI) Pengenalan: Server-SideTemplateInjection (SSTI) ialah kelemahan keselamatan aplikasi web yang biasa Seseorang penyerang boleh menyebabkan pelayan melaksanakan kod sewenang-wenangnya dengan menyuntik kod hasad ke dalam enjin templat. menyebabkan bahaya keselamatan yang serius. Dalam aplikasi PHP, SST boleh didedahkan apabila input pengguna tidak dikendalikan dengan betul

Dalam pembangunan web moden, pemisahan bahagian hadapan dan bahagian belakang telah menjadi trend yang sangat popular, yang membolehkan pembangun mengatur projek dengan lebih baik dan meningkatkan kecekapan pembangunan projek. PHP dan Smarty ialah dua teknologi yang sangat biasa digunakan, yang boleh digunakan untuk mencapai pembangunan pemisahan bahagian hadapan dan belakang. Artikel ini akan memperkenalkan cara menggunakan PHP dan Smarty untuk mencapai pembangunan pemisahan bahagian hadapan dan belakang. Apakah pembangunan pemisahan bahagian hadapan dan bahagian belakang Dalam pembangunan web tradisional, bahagian hadapan bertanggungjawab terutamanya untuk pembentangan halaman dan logik interaksi dengan bahagian belakang. Bahagian belakang bertanggungjawab terutamanya untuk perniagaan

Pada masa kini, pembangunan laman web tidak dapat dipisahkan daripada enjin templat komponen yang penting. Enjin templat merujuk kepada alat yang menggabungkan templat halaman dan data untuk menjana kod HTML dengan format tertentu. Dalam pelbagai rangka kerja pembangunan laman web, enjin templat merupakan komponen penting, kerana enjin templat boleh mengurangkan pertindihan kod dan meningkatkan dinamik halaman dengan banyak. Salah satu enjin templat yang paling biasa dan popular ialah Smarty. Smarty ialah DSL (DomainSpecif

Sebagai pembangun PHP, menggunakan enjin templat adalah pilihan semula jadi. Smarty ialah enjin templat popular yang menyediakan cara untuk memisahkan HTML/CSS/JavaScript daripada kod PHP, membolehkan pembangun mengatur dan mengurus projek dengan lebih baik. Dalam artikel ini, kita akan belajar cara menggunakan enjin templat Smarty semasa pembangunan PHP. 1. Pasang Smarty Sebelum ini, kita mesti memasang Smarty. Dalam artikel ini kami akan menggunakan Komposer untuk memasang

PHP ialah bahasa skrip sebelah pelayan yang berkuasa yang boleh digunakan untuk membangunkan aplikasi web. Pada hari-hari awal pembangunan web, pengaturcara menggunakan banyak kod HTML dan JavaScript untuk membangunkan aplikasi web. Walau bagaimanapun, pendekatan ini sukar untuk dikekalkan dan diurus kerana kod HTML dan JavaScript boleh menjadi sangat kompleks. Untuk menyelesaikan masalah ini, enjin templat Smarty telah dicipta. Smarty ialah enjin templat yang dibangunkan berdasarkan PHP untuk mengurus dan menjana W

Dengan perkembangan pesat dan peningkatan Internet, PHP, sebagai bahasa pengaturcaraan yang digunakan secara meluas dalam pembangunan aplikasi Web, secara beransur-ansur menjadi bahasa pengaturcaraan yang sangat popular dalam industri. Walau bagaimanapun, dalam proses pembangunan PHP, kaedah pelaksanaan kod tradisional sering membawa kepada penurunan kebolehbacaan dan kebolehselenggaraan kod. Pada masa ini, enjin templat yang cekap menjadi salah satu penyelesaian. Di antara banyak enjin templat, Smarty telah menjadi pilihan popular di kalangan pembangun PHP kerana fungsinya yang berkuasa dan prestasi yang baik. Artikel ini akan terperinci

CakePHP ialah rangka kerja PHP sumber terbuka yang menyediakan ciri dan alatan yang kaya untuk mempercepatkan pembangunan aplikasi web. Salah satu ciri yang berkuasa ialah enjin templat. Secara lalai, CakePHP menggunakan sintaks asli PHP untuk pemaparan paparan. Walau bagaimanapun, kadangkala kita mungkin mahu menggunakan enjin templat lain, seperti Smarty. Artikel ini akan memperkenalkan cara menggunakan Smarty dalam CakePHP. 1. Apakah Smarty? Smarty ialah rangka kerja PHP berasaskan templat yang

thinkphp ialah rangka kerja PHP ringan sumber terbuka yang digunakan untuk memudahkan pembangunan aplikasi perusahaan dan pembangunan aplikasi WEB tangkas menggunakan ThinkPHP, pembangun boleh membangunkan dan menggunakan aplikasi dengan lebih mudah dan cepat. Smarty ialah enjin templat PHP yang lebih baik boleh membantu pembangun mengasingkan logik program dan paparan halaman (pemisahan logik perniagaan dan logik paparan), supaya pengaturcara boleh menukar kandungan logik program tanpa menjejaskan reka bentuk halaman kakitangan bahagian hadapan, dan kakitangan bahagian hadapan boleh semula- Mengubah suai halaman tidak akan menjejaskan logik program program.
