ipwn
[tamuCTF] pwn4 본문
이번에 푼 문제는 pwn4이다.
바로 ida로 까보겠다.
int __cdecl __noreturn main(int argc, const char **argv, const char **envp) { setvbuf(_bss_start, (char *)2, 0, 0); while ( 1 ) reduced_shell(); } |
reduced_shell함수를 호출한다.
int reduced_shell() { char s; // [esp+Ch] [ebp-1Ch] puts("I am a reduced online shell"); puts("Your options are:"); puts("1. ls\n2. cal\n3. pwd\n4. whoami\n5. exit"); printf("Input> "); gets(&s); if ( !strcmp(&s, "ls") || !strcmp(&s, "1") ) { ls(); } else if ( !strcmp(&s, "cal") || !strcmp(&s, a234) ) { cal(); } else if ( !strcmp(&s, "pwd") || !strcmp(&s, &a234[2]) ) { pwd(); } else if ( !strcmp(&s, "whoami") || !strcmp(&s, &a234[4]) ) { whoami(); } else { if ( !strcmp(&s, "exit") || !strcmp(&s, "5") ) exit(0); puts("Unkown Command"); } return putchar(10); } |
reduced_shell함수에선 5개의 선택지를 주는데 gets로 입력을 받으므로 오버플로우가 난다.
그리고 저 함수들은 전부 system 함수로 명령어를 시작해주는데, 아마 전부 실행할 필요가 없을 것이다.
그냥 ls하고싶으면 하고.. ls하면 flag.txt파일이랑, pwn4바이너리가 있을 것이다 아마
이제 그냥 rop하면 되는데, system도 주고 gets도 줘서 그냥 gets로 bss에다가 /bin/sh적고 하려했는데,
놀랍게도 /bin/sh가 있다.
그래서 그냥 system호출하고 인자로 저 주소 넘겨주면 된다.
gigem{b4ck_70_7h3_l1br4ry}
굳
문제들이 아낌없이 주는 나무인듯하다.
'CTF's > tamuCTF' 카테고리의 다른 글
[tamuCTF] pwn5 (0) | 2018.02.27 |
---|---|
[tamuCTF] you can run, you can hide (0) | 2018.02.26 |
[tamuCTF] Bender (0) | 2018.02.26 |
[tamuCTF] Veggies (0) | 2018.02.26 |
[tamuCTF] pwn3 (0) | 2018.02.26 |
Comments