나혼자 공부장

[LOB] Level 5 'orc' write-up 본문

pwnable/LOB

[LOB] Level 5 'orc' write-up

라부송 2019. 12. 5. 16:01

wolfman.c

위 코드를 봤을 때, 이전과 다르지 않아 보이지만 제약사항이 두 가지 추가되었다.

 

1. 환경변수를 초기화하는 과정이 추가되어 환경변수를 이용한 공격이 불가능해졌다.

2. buffer를 모두 0으로 만들어버리기 때문에 buffer에 쉘코드를 넣는 방식의 공격이 불가능해졌다.

 

즉, 환경변수를 이용하지 않고 return으로 buffer가 아니면서 bf로 시작하는 주소에 저장되어있는 쉘코드를 실행시키라는 소리이다.

buffer를 0으로 만들더라도, 쉘코드는 어차피 버퍼 너머에서 동작할 것이기 때문에 영향을 받지 않는다.

 

공격 시 스택구조는 위와 같게 된다.

.... 라고 표현한 부분은 리턴 주소가 bf 로 시작해야하기 때문에, 주소를 맞추기 위해 스택의 크기를 bf가 로 시작하는 주소에 닿을 때까지 늘려주는 것이다.

strcpy 부분에 breakpoint를 걸고 위와 같이 페이로드를 구성해서 A가 시작되는 부분을 확인한다.

 

0xbffffad4 를 리턴 주소로 삼을 것이다.

사실 NOP Sled를 태울거기 때문에 A 범위 안에 드는 주소라면 뭐든 상관없다.

이제 위에서 그린 스택 구조를 참고해서 공격 페이로드를 짜고 패스워드를 따보자.

 

./wolfman `python -c 'print "\x90"*44+"\xd4\xfa\xff\xbf"+"\x90"*200+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"'`

 

PW :  love eyuna

'pwnable > LOB' 카테고리의 다른 글

[LOB] Level18 'succubus' write-up  (0) 2019.12.07
[LOB] Level9 'troll' write-up  (0) 2019.12.05
[LOB] Level 2 write-up  (0) 2019.11.27
Comments