본문 바로가기

[Wargame Write-up]/Lord of Buffer Overflow

[LoB RedHat 6.2] LEVEL 14: bugbear -> giant

LEVEL 14: RTL2, only execve

 

이번엔 RTL 기법을 사용함과 동시에, payload에 execve 함수 주소를 반드시 사용해야 한다.

 

 

 

우선 복사본으로 execve 함수의 주소를 구해보자.

 

0x400a9d48이라고 표시된다.

 

 

 

분명 맞는 공격인데도, execve 주소를 인식하지 못한다. \x0a를 \x00로 인식하는 버그 때문이다.

 

 

 

`python ...`을 ""로 한번 더 감싸주면 해결된다.

 

 

 

이제 payload를 구성하자. execve 함수 주소를 넣긴 하지만, NULL의 주소를 주어 실제 사용은 안하고,

 

system("/bin/sh"); exit();로 대체하려고 한다.

 

buf[40]+sfp[4]: dummy 값

main ret[4]: &execve = 0x400a9d48

execve ret[4]: &system = 0x40058ae0

system ret[4]: &exit = 0x400391e0

system 함수의 argv[1]: &"/bin/sh" = 0x400fbff9

&execve 함수의 인자: &NULL = 0xbffffffc (특수한 경우가 아니면 이 영역은 항상 NULL이다.)

 

&system, &exit, &"/bin/sh"는 모두 여기에서 구한 것을 재활용했다.