wget
문제에서 2개의 파일을 다운로드받으라고 했다. vm환경에서 다운로드할 수 있는 방법은 wget을 이용하면 된다.
wget [옵션]... [URL]...
http://www.incodom.kr/Linux/%EA%B8%B0%EB%B3%B8%EB%AA%85%EB%A0%B9%EC%96%B4/wget
버퍼 플로우(buffer overflow)
데이터가 지정된 크기의 공간보다 커서 해당 메모리 공간을 벗어 나는 경우 사용한다. 결론적으로 버퍼 공간의 크기보다 큰 데이터를 저장하게 해서 일어나는 오버플로우(Overflow)를 이용한 공격이다.
스택 오버플로우, 힙 오버플로우
출처 : https://cosyp.tistory.com/206
문제에서 주어진 bof.c 파일을 살펴보자
gets 함수
표준입력으로 들어온 문자열을 개행한 부분 앞까지 짤라서 char* 타입의 문자열로 저장해주고, 자동으로 문자열 맨 끝에 '\0'을 넣어서 문자열을 완성해 줍니다.
출처: https://blockdmask.tistory.com/343
코드 해석
1. overflowme 32바이트를 입력받는다.
2. key가 0xcafebabe이면 sh을 실행한다.
현재 키가 0xdeadbeef이므로 오버플로우를 통해 key를 0xcafebabe로 변경해주어야 한다.
버퍼오버플로우 해킹 기법
예제 코드
#include <stdio.h>
void foo(){
char name[5];
printf("enter name\n");
scanf("%s", name);
printf("you entered %s \n", name);
}
int main(){
foo();
printf("program ends here\n");
return 0;
}
scanf, gets, sprintf,strcpy 모두 BoF 취약점을 가진다.
name의 크기인 5바이트 + EBP 크기 4바이트를 넘어 입력하면 복귀 저장 변수가 덮어쓰여진다.
=> 이를 통해 프로그램의 흐름을 임의로 바꿀 수 있다.
만약 위의 foo() 함수를 실행시키고 싶다면 foo 함수의 주소를 a 8번 적은 후에 적으면 된다.
주소를 알아내는 방법은 디버거를 이용해 어셈블리어로 변환하면 된다.
출처: https://kaspyx.tistory.com/2
문제로 돌아와서, bof.c 코드를 어셈블리어로 변환하자.
gdb 디버거를 이용한다.
1. 프로그램 컴파일
2. gdb 디버깅 시작
gdb 명령어 참고 : https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=mathboy7&logNo=220227929322
이게 att 문법인거같은데 1도 모르겠다. intel 문법으로 바꾸자.
att 문법이 아니라 m1이라 arm문법이다 ..
???
'보안공부 > 시스템 해킹' 카테고리의 다른 글
pwnable 2번: collision (0) | 2023.01.30 |
---|---|
pwnable 1번 : fd (0) | 2023.01.30 |