[PicoCTF-2013] rop2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
#undef _FORTIFY_SOURCE #include <stdio.h> #include <stdlib.h> #include <unistd.h>
char * not_used = "/bin/bash";
int not_called() { return system("/bin/date"); }
void vulnerable_function() { char buf[128]; read(STDIN_FILENO, buf, 256); }
void be_nice_to_people() { // /bin/sh is usually symlinked to bash, which usually drops privs. Make // sure we don't drop privs if we exec bash, (ie if we call system()). gid_t gid = getegid(); setresgid(gid, gid, gid); }
int main(int argc, char** argv) { be_nice_to_people(); vulnerable_function(); write(STDOUT_FILENO, "Hello, World\n", 13); } |
vulnerable_function의 read 함수에서 BOF가 터집니다. 그걸 이용해서 system 함수로 뛰어서 인자로 not_used를 넘겨주면 쉘을 딸 수 있을 것 같습니다.
buf의 시작 주소는 ebp-0x88, return address는 ebp+0x4입니다.
둘이 140byte만큼 차이 납니다.
0x080483a0 : system 함수 plt 주소.
0x08048610 : “/bin/bash” 문자열이 있는 주소.
쉘을 취득했습니다.
'System&Write up > CTF' 카테고리의 다른 글
[Pico CTF 2013] rop4 (0) | 2018.01.21 |
---|---|
[Pico CTF 2013] rop3 (0) | 2018.01.20 |
[Pico CTF 2013] rop1 (0) | 2018.01.18 |
[Pico CTF 2013] overflow5 (0) | 2018.01.18 |
[Pico CTF 2013] overflow4 (0) | 2018.01.17 |