LoginSignup
0
0

picoCTF 2024 Writeup

Last updated at Posted at 2024-03-27

はじめに

2024/3/13-3/27の期間で開催されたpicoCTF 2024に参加しました。
主にWeb問を解いていたのですが、その中で解くことができてうれしかった問題があったので備忘録もかねてWriteupを書きました。

Trickster

AUTHOR: JUNIAS BONOU
Description
I found a web app that can help process images: PNG images only!
Additional details will be available after launching your challenge instance.

説明の通りですが、URLにアクセスするとPNGファイルのみアップロードできるWebアプリにつながります。
どうにかこうにかPNG以外のファイルをアップロードしてFlagを取得しようという問題です。

アップロード条件

なんとなくWebアプリを見ていて見つけた条件は以下の通りです。

  • .pngが含まれていること ・・・①
  • Magic numberがPNGファイルのもの(89 50 4E 47)であること ・・・②
    参考: マジックナンバーまとめ

Webshell作成

先の条件に合うようなファイルを作成します。今回私はPHPでGETリクエストのパラメータを受け取り、実行するようなファイルを作ろうと考えました。

1. phpで下記ファイルを作成

まずは(超)簡単なphpプログラムを作成します。この時①の条件を意識してwebshell.png.phpとして保存しました。

webshell.png.php
<?php
system($_GET(cmd));
>

2. Magic numberの変更

②の条件をクリアするためにはPNGファイルのMagic numberを挿入する必要があります。Magic numberといっても実態はファイル冒頭のデータなので、追加してあげればいいだけです。
vi -bコマンドでバイナリ編集ができると知ったのでそれを使いました。

Magic numberを挿入後xxdで確認してみると、8950 4e47が追加されたことがわかります。
image.png

ファイルアップロード

作成したファイルをアップロードします。

image.png

Webshell実行

どこにファイルがアップロードされるのかわからなかったのですが、運よくuploads/webshell.png.phpが見つかりました。
?cmd=で実行したいコマンドを渡します。

まずは?cmd=ls /var/www/html/とし階層にどんなファイルがあるのかを探ってみます。するとGNTDOMBWGIZDE.txtという見慣れないファイルを発見。
image.png

?cmd=cat /var/www/html/GNTDOMBWGIZDE.txtしてみるとフラグが取れました。
image.png

おわりに

前にどこかのCTFに参加した際は解けなかったWebshellの問題が今回自力で解けたのでとてもうれしかったです😊
ほんとにちょっとずつですが成長できているなと感じることができました。
ほかにも解けなかった問題はたくさんあるので、常設となった問題で復習をしたいと思います。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0