passcode : love eyuna
(NO DRAG, NO PASSCODE)
bash2. 바로 소스코드 분석하자.
이번에는 orc 문제와 다르게 buffer 에 값을 넣을 때 길이 검사도 한다. strcpy는 공백도 복사하기 때문에 이를 이용하여 문제를 해결할 수 있다. argv[1] 뒤에 NOP Sled 와 shellcode 를 이어붙이지 못하니 argv[1] 뒤에 공백을 두어 argv[2], 즉 인자를 추가로 하나 더 부여하여 buffer와는 다른 메모리 영역에 NOP Sled 와 shellcode가 존재하도록 하자.
우선 gdb를 이용하여 분석한 메모리 영역은 다음과 같다.
—————————— High Address
| ret(4) |
——————————
| sfp(4) |
—————————— ← ebp
| buffer(40) |
——————————
| int(4) |
—————————— Low Address
또 buffer 주소를 찾아보자.
0xbffffbed 인 것을 확인하였다. 이제 이 주소로 payload를 짜보자.
어쩐 일로 쉘이 바로 떴다. 이로써 우리는 Buffer Overflow 에서 3가지의 방법으로 buffer 의 정확한 주소를 찾을 수 있다. (모두 tmp 디렉토리에서 프로그램 및 소스코드를 복사하여 진행)
- gdb로 간단한 인자(ex. “\x90”*100) 를 넣어 어디부터 “\x90” 값이 채워지는지 확인
- 1번에서 segmentation fault 가 뜬다면 소스코드를 복사하여 buffer의 주소를 출력해주는 코드를 추가한 뒤에 컴파일 및 실행하여 주소를 얻는다.
- 2번에서 core dumped 가 뜬다면 ‘gdb -c core -q’ 명령어로 core에서 어디가 dump 가 일어났는지 확인하여 buffer의 정확한 주소를 찾는다.
1번에서 끝나면 좋지만 안되는 문제도 있기 때문에 1, 2, 3번을 순차적으로 적용하여 얻어야 한다.
[darkelf] : kernel crashed
'Pwnable > LOB' 카테고리의 다른 글
[LOB] 7. ORGE (0) | 2020.08.28 |
---|---|
[LOB] 6. DARKELF (0) | 2020.08.28 |
[LOB] 4. ORC (0) | 2020.08.28 |
[LOB] 3. GOBLIN (0) | 2020.08.28 |
[LOB] 2. COBOLT (0) | 2020.08.28 |