반응형
문제 내용
/usr/bin/bof의 소스코드를 출력하고 있다.
소스코드
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
main(){
char buf2[10];
char buf[10];
printf("It can be overflow : ");
fgets(buf,40,stdin);
if ( strncmp(buf2, "go", 2) == 0 )
{
printf("Good Skill!\n");
setreuid( 3010, 3010 );
system("/bin/bash");
}
}
해당 소스코드를 해석하면 버퍼 2개가 선언되어 있고 fgets로 buf에 40바이트만큼 입력창에서 입력을 받고 있다.
그리고 buf2에 저장된 2바이트가 go문자랑 같으면 0을 리턴하므로 참이되어 Real User ID, Effective User ID 가 3010인 bash 쉘을 실행한다.
tmp에 bof.c 파일을 만들어 코드를 복붙한 후 gcc로 컴파일을 진행하였다.
그림 3번은 disas main의 결과이다.
strncmp함수 부근을 보면 eax에 ebp-24의 주소값을 옮기고 있다. 그리고 strncmp를 하기때문에 ebp-24부근에 buf2의 배열이 있음을 알 수 있다.
A를 많이 입력을 하고 스택을 확인해보면 0xbfffdec0부터 입력이 된것을 알 수 있다.
그리고 ebp - 24의 위치는 0xbfffded0이므로 사이의 크기는 16바이트이다.
따라서 우리가 쓰레기값은 16바이트 넣고 go문자열을 넣으면 level10의 쉘을 얻을 수 있을것이다.!!
A를 16번 넣고 go문자를 넣으니 level10으로 권한상승에 성공하였다.
권한상승 후 my-pass 명령어로 패스워드를 확인하였다.
level10 password
interesting to hack!
반응형
'hackerschool 문제 > FTZ' 카테고리의 다른 글
[Hackerschool FTZ] - level 11 문제 (0) | 2022.11.23 |
---|---|
[Hackerschool FTZ] - level 10 문제 (0) | 2022.11.22 |
[Hackerschool FTZ] - level 8 문제 (0) | 2022.11.20 |
[Hackerschool FTZ] - level 7 문제 (0) | 2022.11.19 |
[Hackerschool FTZ] - level 6 문제 (0) | 2022.11.18 |