picoCTF 2022 writeup[web]

picoCTF 2022 writeup[web]

Includes (100pts)

style.cssとscript.jsを見るだけ。
picoCTF{1nclu51v17y_1of2_f7w_2of2_f4593d9d}

Inspect HTML (100pts)

ソース見るだけ。
picoCTF{1n5p3t0r_0f_h7ml_dd513514}

Local Authority (100pts)

一度ログインに失敗したときに出てくるlogin.phpのソースを見てみると、secure.jsというファイルを読み込んでいて、その中にAdminのusernameとpasswordがかいてありました。
picoCTF{j5_15_7r4n5p4r3n7_6309e949}

Search source (100pts)

wget -mでミラーリングして見てみると、style.cssに書いてありました。
picoCTF{1nsp3ti0n_0f_w3bpag3s_227d64bd}

Forbidden Paths (200pts)

問題文中でwebsiteのファイルが/usr/share/nginx/html/に、flagが/flagにあると書いてあるので、ディレクトリトラバーサルをするだけ。
Filenameに../../../../../flag.txtをいれるとflagが出てきます。
picoCTF{7h3_p47h_70_5ucc355_26b22ab3}

Power Cookie (200pts)

cookieをisAdmin=1に書き換えるだけ。
picoCTF{gr4d3_A_c00k13_dcb9f091}

Roboto Sans (200pts)

まずはSearch sourceの時と同様にwget -mでミラーリングをすると、robots.txtにbase64でエンコードされた何かが見えます。
デコードするとjs/myfile.txtというファイルがあることがわかるので、http://saturn.picoctf.net:65442/js/myfile.txt を見るとflagがみつかります。
picoCTF{Who_D03sN7_L1k5_90B0T5_a4f5cc70}

Secrets (200pts)

dirbというWeb Content Scannerで隠しファイルを見つけます。まずはデフォルトの辞書と問題文で渡されたurlから隠しファイルを探してもらいました。

dirb http://saturn.picoctf.net:54925/
...
+ http://saturn.picoctf.net:54925/secret/index.html (CODE:200|SIZE:468)
+ http://saturn.picoctf.net:54925/secret/hidden/index.html (CODE:200|SIZE:2118)

ここで見つかったsecret/hidden/index.htmlを見てみると、superhiddenというディレクトリを見ていることがわかります。そこで、"hidden" "superhidden" "secret" "index.html"と4単語のみを入れたwordlist.txtを作成し、これを使って再度dirbを走らせました。

dirb http://saturn.picoctf.net:54925/ ~/workspace/picoctf2022/web/Secrets/wordlist.txt
...
+ http://saturn.picoctf.net:54925/index.html (CODE:200|SIZE:1023) 
+ http://saturn.picoctf.net:54925/secret/index.html (CODE:200|SIZE:468)  
+ http://saturn.picoctf.net:54925/secret/hidden/index.html (CODE:200|SIZE:2118) 
+ http://saturn.picoctf.net:54925/secret/hidden/superhidden/index.html (CODE:200|SIZE:255)  

勝ちです。http://saturn.picoctf.net:54925/secret/hidden/superhidden/index.htmlのソースにflagがありました。
picoCTF{succ3ss_@h3n1c@10n_34327aaf}

SQL Direct (200pts)

PostgreSQLのテーブルを見に行くだけ。

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

pico=# select * from public.flags;
 id | firstname | lastname  |                address                 
----+-----------+-----------+----------------------------------------
  1 | Luke      | Skywalker | picoCTF{L3arN_S0m3_5qL_t0d4Y_0414477f}
  2 | Leia      | Organa    | Alderaan
  3 | Han       | Solo      | Corellia
(3 rows)

picoCTF{L3arN_S0m3_5qL_t0d4Y_0414477f}

SQLiLite (300pts)

SQL injectionをするだけ。Usernameにa' OR 1==1; --を、Passwordにbを入れるとSQL queryがSELECT * FROM users WHERE name='a' OR 1==1; --' AND password='b'になるのでログインできます。
picoCTF{L00k5_l1k3_y0u_solv3d_it_33d32a56}