일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 두근두근 자료구조
- 시간복잡도
- 재귀
- Java
- 파일 시스템
- windosws wbcs
- Stack
- OSI
- HTML
- pwnable.kr
- 정렬 알고리즘
- ftz
- 파이썬
- 백준
- ftz level13
- windosw 문자열
- level13
- C
- 스택
- 자료구조
- 미로 탐색 알고리즘
- PHP
- LoB
- War Game
- 큐
- c언어
- System
- SWiFT
- web
- 암호수학
- Today
- Total
나의 기록, 현진록
[War Game] LOB golem 본문
LOB golem
problem_child() 함수에서
40 크기의 buffer에 41만큼 복사한다.
1btye의 버퍼 오버플로우가 발생한다.
41byte은 SFP 영역이다.
위에 FPO라고 쓰여있는 게 보인다.
Frame Point Overflow
SFP 변조를 통해 버퍼 오버플로우 기법을 활용하는 문제이다.
40btye 이후에 1byte 만큼의 SFP를 변조할 수 있다.
SFP 값이 변조되면 ret 값 또한 변조된다.
페이로드는 아래와 같이 구성될 것이다.
[NOP] [SHELLCODE] [1byte]
|--------40byte-----| |1byte|
그렇다면 SFP 값에 덮어야할 주소는 무엇일까?
어쨌든 최종적으로 쉘코드가 있는 buffer에 접근해야할 것이다.
gdb로 분석을 해보자.
main+45 주소에 problem_child 함수가 있다.
problem_child 함수가 끝나고 main으로 돌아가기 전
브레이크 포인트 설정
40개를 입력했을 때
0xbffffadc 주소에 있는 내용은
0xbffffa 00
ret 값에는 0x0804849e이다
이 주소는 main에서 problem_child 함수가 실행되고 나서의 주소이다.
\x90이 입력된 영역으로 리턴하려면 어떻게 할까?
leave 명령어는 ebp+4 영역에 접근할 수 있다.
\x90이 입력된 영역의 주소는 0xbffffab4이다.
0xbffffaac + 4 = 0xbffffab0이다.
0xbffffab0의 주소를 읽는다.
0xbffffab0 주소에는 0xbffffab4 주소가 입력되어 있다.
즉 0xbffffaac를 참조한다면 leave 명령어에 의해 \x90이 입력된 주소에 접근할 수 있다.
A를 입력하면 0xbffffadc에 0xbffffa '41'이 저장된다.
'ac'를 입력하자.
페이로드 작성
'War Game > LOB' 카테고리의 다른 글
[War Game] LOB bugbear (0) | 2018.02.26 |
---|---|
[War Game] LOB darkknight (0) | 2018.02.19 |
[War Game] LOB skeleton (0) | 2018.02.12 |
[War Game] LOB vampire (0) | 2018.02.11 |
[War Game] LOB troll (0) | 2018.02.09 |