[PicoCTF-2013] rop1
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 |
#undef _FORTIFY_SOURCE #include <stdio.h> #include <stdlib.h> #include <unistd.h>
int not_called() { return system("/bin/bash"); }
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가 터지는데, 그걸 이용해서 return address를 not_called 함수로 바꿔주면 될 것 같습니다.
buf의 시작 주소는 ebp-0x88에 있고, return address는 ebp+0x4에 있습니다.
둘이 140byte 차이가 납니다.
not_called 함수의 주소도 알았으니, 공격하겠습니다.
쉘을 취득했습니다.
'System&Write up > CTF' 카테고리의 다른 글
[Pico CTF 2013] rop3 (0) | 2018.01.20 |
---|---|
[Pico CTF 2013] rop2 (0) | 2018.01.19 |
[Pico CTF 2013] overflow5 (0) | 2018.01.18 |
[Pico CTF 2013] overflow4 (0) | 2018.01.17 |
[Pico CTF 2013] overflow3 (0) | 2018.01.16 |