argv[1]에서 44부터 4개의 주소를 비교하는데 strcpy와 같지 않으면 종료시킵니다 .
또한 dangerous waterfall 이라고 새로운 친구가 보이네요 
buffer+40+8의 주소부터 A를 4개 채워버리는군요

저는 여기서 strcpy의 역할과 ret의 기능을 생각하였습니다.
ret에 strcpy가 들어가게 되면 strcpy가 실행하게 될텐데
strcpy는 strcpy(a,b)라는 인자가 있으면 b의 값이 a로 전달 되는 함수입니다.
원하는 값을 버퍼안 혹은 ret 뒤에 넣은뒤 
그 값의 주소를 b에 주고 ret+4의 주소를 a에다가 넣어주면 되겠습니다.

strcpy의 주소를 구하였습니다 .

여기서 이제 stcpy의 주소를 argv[1]+44 다음에 넣어봅시다! 

정해진 위치에 넣지 않았더니 printf가 실행되면서 종료됩니다

정상적으로 넣어줬더니 세폴이 발생하면서 코어 덤프가 생겼습니다! 

----------------------------------------------------------------------------------------------------계속 주소값을 변경하고 찾고 찾아도 이틀동안 풀지 못했습니다... 
처음으로 돌아가서 다시 해보겠습니다 

이런식으로 버퍼의 첫 주소를 확인하려고 하였으나 실패했습니다 .

strcpy브포를 주고 시도를 해봤으나 실패했습니다 

코어를 띄우며 버퍼값을 맞추려고 해도 strlen에 값들이 주어져서 주소값들이 수시로 변해서 실패했습니다 

그러다가 strcpy+33(leave)에 값을 주고 시도해봤습니다 

버퍼의 첫 주소인 a90과 ret+4부분인 ac0을 발견했습니다.
처음에 생각햇던 페이로드인 
"A"*44+&strlen+"A"*4+&RET+&SHELL+SHELL 이 아닌

&SYSTEM+A*4+&/bin/sh+A*32+&STRELN+"A"*4+&RET+&BUF의 첫 주소로 공격을 하였고 성공했습니다 -_-(분명히 A90 과 AC0을 시도헀던거 같은데 어디서 틀린지 아직 감이 안잡힙니다..반복되는 bash2때문에 주소값이 밀렸던것일까요 ..아니면 제가 사소한 실수를 했던것일까요 반성해야겠습니다)


'해커스쿨 lob' 카테고리의 다른 글

LOB death_knight  (0) 2016.05.21
LOB xavius  (0) 2016.05.19
LOB succbus  (0) 2016.05.16
LOB zombie_assassin  (0) 2016.05.16
LOB assassin  (0) 2016.05.13

+ Recent posts