나의 기록, 현진록

[War Game] LOB golem 본문

War Game/LOB

[War Game] LOB golem

guswlsdk 2018. 2. 14. 00:45
반응형

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