0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

picoCTF-Irish-Name-Repo1,2,3 writeup

0
Last updated at Posted at 2025-11-29

問題名:Irish-Name-Repo1

※Irish-Name-Repo1は生成された問題サイトのURLに . (ドット)が付いていますが、ドットを消していないとサイトが開かないので注意してください。

問題のWebサイトはこんな感じです。
スクリーンショット (164).png
このサイトはアイルランド出身の人をリストでまとめていました。
左上のハンバーガーメニューをクリックするとsupportとadmin Loginが出てきます。

admin Loginを開くと、ログインページが表示されます。
スクリーンショット (166).png

スクリプトを打ち込んでみました。
Username:' or 1 = 1 --
Password:adc

フラグが出てきましたね!
スクリーンショット (167).png

解説

Username:のところにSQLのコメントアウトを打ち込んでいるため、passwordはどんな文字でも構いません。SQLインジェクションのコードは他にもあるため、いろいろ試してみてください。

SQLインジェクションの仕組み

ログインフォームは裏側でSQLが実行されています。
例えば、ユーザー情報がtestというテーブルに格納されている場合、adiminというユーザーデータを出力したい場合は以下のSQL文が行われています。

select * from test where Username='admin',password='admin123'
ログインの入力欄は''で囲われている場所と連携しているのです。
よって、入力欄の中に悪意のあるスクリプトを入力するとデータを不正に取得することができたり、不正ログインしたりすることができてしまうのです。

問題名:Irish-Name-Repo2

この問題は1の時と見た目は同じサイトのようです。
1の時と同様のスクリプトでログインしてみました。
スクリーンショット (169).png

SQLインジェクションが検出されましたと表示され、ログインできませんでした。
スクリプトを以下のものに変えてログインしてみました。
Username:admin' --
Password:adc

フラグが出てきました!
スクリーンショット (170).png

解説

1の時のスクリプトが使えなかったということは、or 1 = 1 などの特殊文字(SQL文)を検知した場合はログインできない仕組みにしているのではないかと思いました。
SQLのコメントアウトやスペースなどの文字は普通に使えるのでそこが脆弱性だなと感じましたW

問題名:Irish-Name-Repo3

個人的にこの問題がIrish-Name-Repoシリーズで一番難しかったです。

この問題のログイン画面はパスワードだけを聞かれています。
スクリーンショット (172).png

試しにadminと入力してみます。

ログインに失敗してしまいました。
スクリーンショット (171).png

ページのソースなども見てみましたが、特にヒントになりそうなものは何もありませんでした。

実際にデータがどのように帰ってきているのかを見たいのでkaliLinuxの中に落とし込んでみます。
スクリーンショット (174).png

ログインはlogin.phpで行われているとページのソースに書いてあるのでlogin.phpをLinuxにダウンロードします。

wget http://fickle-tempest.picoctf.net:61340/login.php --post-data="debug=1&password=adc"

--post データをPOSTで送信するという意味。
-data 入力するデータを定義している。

注意!

debug=1を入れないとデータがどのように帰ってきているのかが分かりません。
debug=1は、「デバックモードをオンにします」ということを意味しています。
AIに聞いてみたところ、デバックモードをオンにすることで、Webサイト上には表示しないけど、入力したデータの返答を見られるようにしてくれるっぽいです。
ページソースの所ではデフォルトでdebug=0が送信される仕組みになっているので、そこを1にする必要があります。

実行結果
Screenshot_2025-11-29_22_24_25.png

スクリプトを実行すると自動でlogin.php.〇へ保存完了と表示されるので、catコマンドで見てみます。
abcと入力するとnopが出力されました。

試しにaからzのアルファベットを入力してみました。
Screenshot_2025-11-29_22_26_07.png
※入力ミスしてるのは見逃してください…
入力した全てのアルファベットが順番にズレており、シーザー暗号が関係していることが読み取れます。

Screenshot_2025-11-29_22_26_52.png
passwordに' or 1 = 1 --と入力してみたところ、or が be に変換されてしまい、上手くスクリプトが起動できてませんでした。

passwordに' be 1 = 1 --を入力するとフラグが出てきました!

Screenshot_2025-11-29_22_27_00.png

解説

今回は入力した文字がシーザー暗号に暗号化される影響で、' or 1 = 1 --というスクリプトを実行しても反映されないという事態が発生してました。
実際に入力したデータがどのように出力されているのかを調べてみることが大事ですね。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?