-
|Lord Of Bufferoverflow| #16 assassin - zombie_assassinWargame Site/BOF 2019. 6. 29. 19:50
1 바이트라도 차질이 생기면 문제에 지장이 있으므로 이번에도 한 글자만 바꿔서 접근하도록 한다.
FEBP ( Fake EBP )
이 기법은 앞서 접근했던 방식 중의 하나로, EBP 를 조작한 뒤, RET 부분을 leave 에 맞춰서 EIP 의 흐름을 바꿔버리는 녀석이다.
하지만, 앞서 풀었던 방식과 다른 것은 LEAVE 부분을 직접 돌려주어야 한다는 점이다. ( 이 차이는 생각보다 중요한 개념인 것 같다. )
그렇다면, 앞의 문제 ( gloem-darkknight ) 에서 변화되는 내용은 무었일까?
[ System 의 주소 ] + AAAA (EBP 역할) + [ /bin/sh 의 주소 ] + ..... + [ Buffer 시작 - 4 (마지막 1Byte) ]
그렇다!! 단순하게 Buffer 시작 - 4 부분을 직접 입력한다는 점과 RET 가 추가된 것 뿐이다.
[ System 의 주소 ] + AAAA (EBP 역할) + [ /bin/sh 의 주소 ] + ......
+ [ Buffer 시작 - 4 ] + [ RET : leave 의 주소면 어디든 ]
우리가 모르는 정보는 Buffer 의 시작과 leave 의 주소이다.
core analysis 를 통해 알아보자.
다음 사진에서도 알 수 있듯 0xbffffc5c 가 buffer 시작 - 4 의 값이라는 것을 알 수 있다.
다음은 leave 의 주소이다.
objdump -d ./zombie_assassia 를 통해 알아보았다.
0x08048311 인 것을 알 수 있다.
이로써 모든 준비는 끝났다.
따라서,
`python -c 'print "\xe0\x8a\x05\x40" + "AAAA" + "\xf9\xbf\x0f\x40" + "A"*28 + "\x5c\xfc\xff\xbf" + "\x11\x83\x04\x08"'`
다음과 같은 바이너리를 작성할 수 있다.
과연..
쉘을 획득한 것을 볼 수 있다.
하지만, System 의 동작이 끝나고, AAAA 가 EIP 로 지정되기 때문에 쉘을 끝냄과 동시에 core 가 생성되는 것을 볼 수 있다.
이것을 없애기 위해서 AAAA 대신 exit 의 주소(0x400391e0)를 넣어주면 아무 이상없이 프로그램을 종료할 수 있다.
This is 찝찝ous.
Wow It's 깔끔ous!!
'Wargame Site > BOF' 카테고리의 다른 글
|Lord Of Bufferoverflow| #18 succubus - nightmare (0) 2019.07.09 |Lord Of Bufferoverflow| #17 zombie_assassin - succubus (0) 2019.06.29 |Lord Of Bufferoverflow| #15 giant - assassin (0) 2019.06.23 |Lord Of Bufferoverflow| #14 bugbear - giant (0) 2019.06.23 |Lord Of Bufferoverflow| #13 darkknight - bugbear (0) 2019.06.21 댓글