初心者がpicoGymを解いたメモ①(Obedient Cat〜Transformationまでの7問)

  1. Obedient Cat

    • ファイルに平文で記載されている

  2. Mod 26

    • シーザー暗号(13文字右にずらしてある)

  3. Python Wrangling

    • DLした「flag.txt.en」を「pole.txt」にリネーム

    • コマンド『python 'ende.pyのパス' -d 'pole.txtのパス' 』を実行

    • 「Please enter the password:」と言われるので「pw.txt」に記載されているパスワードをコピペして実行するとフラグがもらえる

  4. Wave a flag

    • DLしたファイルに実行権限をつける『chmod +x 'パス'』

    • そのまま実行すると「-h」をつけるといいよと言われるので「-h」つけて実行する『'warmのパス' -h』とフラグをもらえる

  5. information★
    • 下記コマンドでexiftoolをインストールする
      『sudo apt install libimage-exiftool-perl
    • DLした画像(cat.jpg)のメタデータを表示する
      『exiftool 'cat.jpgのパス'』
    • 表示されたデータの「License」値が怪しい(らしい)ので、base64でデコードする(らしい。。。)
      『echo cGljb0NURnt0aGVfbTN0YWRhdGFfMXNfbW9kaWZpZWR9 | base64 -d』←このコマンドの実行結果がフラグだったよ!!
    • Base64は、データを64種類の印字可能な英数字のみを用いて、それ以外の文字を扱うことの出来ない通信環境にてマルチバイト文字やバイナリデータを扱うためのエンコード方式である。

      https://ja.wikipedia.org/wiki/Base64

  6. Nice netcat...
    • 指示されたコマンドを実行すると数字が沢山表示される。これをテキストに保存しておいた(仮にnc.txtとする)

    • Pythonで下記コード書いて、引数にさっきのnc.txtを指定して実行してやると実行結果にフラグが表示されるぞい

      import sys

      flag = ''
      with open(sys.argv[1], "r") as f:
          datalist = f.readlines()
          for line in datalist:
              flag += chr(int(line))
      sys.stdout.write(flag)
  7. Transformation
    • ヒントに書かれてあるのは「正解のFLAG」からどうやって「出題の文字列」を作ったかの作り方
    • 1文字目を8ビット左にずらし、空いた右8ビットに2文字目をくっつけたものを文字として出力している
    • なので、FLAGを取り出すにはその逆、つまり出題文字列の各文字に対して前後を8ビットずつの2分割をし、それを文字にすればおk
    • Pythonで下記コード書いて実行すればフラグがもらえる
      words='灩捯䍔䙻ㄶ形楴獟楮獴㌴摟潦弸彥ㄴㅡて㝽'
      flag=''
      for i in range(0, len(words)):
          flag += chr(ord(words[i])>>8)
          flag += chr(ord(words[i]) & 0x00ff)
      print(flag)