본문 바로가기

/LOB

LOB #6 wolfman

ID : wolfman

Passwd : love eyuna

 

- darkelf.c 내용을 확인

버퍼의 크기는 40이고, 코드의 내용은 위와 같다

 

- main 함수 디버깅

스택의 크기는 44 (buffer(40)+i(4))이므로 dummy값은 존재하지 않는다

sfp에서 40만큼 떨어진 거리에 buffer가 존재한다

 

- argv[1]의 길이가 48까지만 허용되므로 buffer(40) + sfp(4) + ret(4) =48만큼만 들어갈 수 있다

  그러므로 쉘코드는 argv[1]에 들어가면 안된다

 

-> argv[1] 대신 argv[2]에 쉘코드를 넣고 argv[2]의 주소를 ret에 넣는 방법 사용

 

- argv[2]의 주소를 알아내기 위해 strcpy 다음 코드에 break point를 걸고 디버깅 창에서 다음과 같은 payload를 실행

48번째 문자가 "\xbf"여야하므로 일단 argv[1]에는 "\xbf"로 채워준다

 

- argv[2]의 주소를 알아내기 위해 esp를 본다

esp 주소값을 140 정도 뽑으면 위와 같이 41("A")가 나온다

이 중 한 주소를 ret에 넣으면 된다. (선택값 -> 0xbffffc24)

 

- payload 작성

- 결과

uid가 상승하고 비밀번호 확인 가능!

'Write Up > LOB' 카테고리의 다른 글

LOB #5 orc  (0) 2019.11.11
LOB #4 goblin - argv[2] + NOP Sled이용  (0) 2019.11.11
LOB #4 goblin - NOP Sled 이용  (0) 2019.11.11
LOB #3 cobolt  (0) 2019.10.10
LOB #2 gremlin  (0) 2019.10.10