好奇心の足跡

飽きっぽくすぐ他のことをしてしまうので、忘れないため・形にして頭に残すための備忘録。

picoCTF2022 [Web Exploitation] writeup

2022年3月15日~3月29日に開催された中高生向けのCTF大会、picoCTFの[Web Exploitation]分野のwriteupです。 その他のジャンルについてはこちらを参照。

tech.kusuwada.com

Inspect HTML

Can you get the flag?

Go to this website and see what you can discover.

f:id:kusuwada:20220402151037p:plain

htmlソースに直接flagが書いてありました。
Chromeだと、表示 > 開発/管理 > ソースを表示 で見ることが出来ます。

Includes

Can you get the flag?

Go to this website and see what you can discover.

このサイトのソースを見てみると

<html lang="en">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <link rel="stylesheet" href="style.css">
    <title>On Includes</title>
  </head>
  <body>
    <script src="script.js"></script>
...(omit)...

f:id:kusuwada:20220402151128p:plain

2つリンクがあったので、style.cssscript.jsを覗いてみるとflagが半分ずつ書かれていました。

Local Authority

Can you get the flag?

Go to this website and see what you can discover.

f:id:kusuwada:20220402151153p:plain

適当なusernameとpasswordでログインしたあとのページのソースを見てみると

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <link rel="stylesheet" href="style.css">
    <title>Login Page</title>
  </head>
  <body>
    <script src="secure.js"></script>
...(omit)...

いかにも怪しいsecure.jsをクリックしてみてみると、有効なusernameとpasswordが書いてあったので、それを使ってログインするとflagが出てきました。

Search source

he developer of this website mistakenly left an important artifact in the website source, can you find it?

The website is here

f:id:kusuwada:20220402151220p:plain:w400

ちょっとオシャレなページ。タイトルから、ソースを探しまくればflagが出てきそうなので探しまくります。
topページのソースからリンクが貼ってあった/css/style.cssにflagが書かれていました。

Forbidden Paths

Can you get the flag?

Here's the website.

We know that the website files live in /usr/share/nginx/html/ and the flag is at /flag.txt but the website is filtering absolute file paths. Can you get past the filter to read the flag?

パストラバーサル練習問題。

f:id:kusuwada:20220402151305p:plain

このフォームにファイル名を入れると中身を表示してくれます。問題文の情報より、

../../../../flag.txt

を入れるとflagが表示されました。

Power Cookie

Can you get the flag?

Go to this website and see what you can discover.

cookie練習問題。

f:id:kusuwada:20220402151338p:plain

Continue as guest のポチッとボタンを押た後にcookieを確認すると、isAdmin = 0 のvalueが入っています。この値を1に変更し、/check.php画面を表示するとflagが出てきました。

Roboto Sans

The flag is somewhere on this web application not necessarily on the website. Find it.

Check this out.

robots.txt練習問題。

f:id:kusuwada:20220402151406p:plain:w400

またこのおしゃれヨガページ。/robots.txtを表示してみると

User-agent *
Disallow: /cgi-bin/
Think you have seen your flag or want to keep looking.

ZmxhZzEudHh0;anMvbXlmaW
anMvbXlmaWxlLnR4dA==
svssshjweuiwl;oiho.bsvdaslejg
Disallow: /wp-admin/

base64でencodeされたなにかがあるのでdecodeしてみます。

flag1.txtjs/myfi
js/myfile.txt

flag1.txtは見つからなかったので、/js/myfile.txtを開いてみるとflagが表示されました。

Secrets

We have several pages hidden. Can you find the one with the flag?

The website is running here.

f:id:kusuwada:20220402151448p:plain:w400

ちょっとうるさ目のtopページ。このページのソースを見てみると、/secret/assets/DX1KYM.jpgというリンクが。怪しいので /secret/index.htmlを見てみると

f:id:kusuwada:20220402151519p:plain:w400

はらたつ感じのgif。このページのソースに /hidden/file.css というのがあったので、こっちも覗いてみます。

/secret/hidden/にアクセスすると、ログインページ。こちらもソースを見てみると、/superhidden/login.cssというリンクを発見。まだ続くのか。

f:id:kusuwada:20220402151606p:plain

finallyらしいのでここで再度ソースを見てみるとflagがありました。

SQL Direct

Connect to this PostgreSQL server and find the flag!

ポチッとボタンを押してマシンをローンチしてみると、問題文が増えました。

psql -h saturn.picoctf.net -p 51244 -U postgres pico

Password is postgres

PostgresSQL問題。言われたとおり接続してみます。

$ psql -h saturn.picoctf.net -p 51244 -U postgres pico
Password for user postgres: 
psql (14.1 (Debian 14.1-1), server 14.2 (Debian 14.2-1.pgdg110+1))
Type "help" for help.

pico=# 

接続できました。あとはこちらのページなどを参考にDBを見ていきます。

pico=# \dt
         List of relations
 Schema | Name  | Type  |  Owner   
--------+-------+-------+----------
 public | flags | table | postgres
(1 row)

pico=# SELECT * FROM flags;
 id | firstname | lastname  |                address                 
----+-----------+-----------+----------------------------------------
  1 | Luke      | Skywalker | picoCTF{L3arN_S0m3_5qL_t0d4Y_73b0678f}
  2 | Leia      | Organa    | Alderaan
  3 | Han       | Solo      | Corellia
(3 rows)

出た。PostgresSQLのクエリが使えればOKな問題。

SQLiLite

Can you login to this website?

SQLite問題。先程と同様、ポチッとボタンを押してinstanceをローンチしてみると問題文が増えました。

Try to login here

指定されたサイトにWebブラウザでアクセスしてみます。 

f:id:kusuwada:20220402151744p:plain

見慣れたログイン画面。SQLiteとのことなので

'or 1=1; -- 

をusrenameに入れてログインしてみます。

username: 'or 1=1; --

password:

SQL query: SELECT * FROM users WHERE name=''or 1=1; -- ' AND password=''

Logged in! But can you see the flag, it is in plainsight.

どういうクエリになったかちゃんと教えてくれて親切。flagが表示されていないのは、何か他に条件があるのかな?と思ったらこのページのソースコードにflag書いてありました。