LOB:Vampire→Skeleton

LOB 2018. 4. 9. 19:22

이번에도 규칙이 많다. 이번엔  argv[0]까지 초기화한다.


코드상 argv[1]과 buffer은 0으로 초기화 되고, 또 argv 길이제한까지 있으니 공략하기 힘들어 보인다.


그렇다면 argv[0]밖에 안남는데 이 코드는 // ultra argv hunter! 이라면서 argv를 전부다 지워버리니 어떻게 해야하는지 막막...하다.


그래도 일단 뭐라도 해봐야 할 것 같아서 argv[0] 즉 파일명을 심볼릭 링크로 바꿔보았다.



우선 코어를 떨구고, gdb로 열어보았다.



Cannot access memory ~~가 뜨기 직전에 90이 잔뜩 보인다. 이 언저리로 ret를 해보자



ret값을 조금씩 바꾸면서 넣어봤음에도 Segmentation fault가 뜨는것을 알 수 있다.



분명히 해당 주소에는 값이 들어있는데도 말이다.



원인이 뭘까 생각하다가 gdb를 켤때 뜨는 메시지를 보았다.





각각 어느 주소를 가리키는데 이 주소를 쫒아가보면 내가 넣은 쉘코드 중간 쯤 이었다.


그래서 파일명 뒤에 0x90을 넣어서 쉘코드를 약간 앞으로 더 밀면 효과가 있지 않을까? 라는 생각으로 뒤쪽에도 0x90을 넣었다.


기존 파일 지우는것도 꽤나 노동이었지만 어쨌던 바꿨다. 

(스샷에는 약간 잘렸다)




그럼에도 Segementation fault가 뜨는 것을 확인했다.


이번엔 뭐가 문제일까 core을 뜯어보자



당연하게 뒤로 바이트가 더 들어가면서 코드가 전반적으로 앞으로 왔다. 그 만큼 더 앞쪽으로 ret을 하여야 하였다.

core상으로는 c0부터 가능하지만, 실제 실행할때는 어떨지 모르니 넉넉하게 70정도로 잡아보았다.





그리고 쉘을 얻었다.


'LOB' 카테고리의 다른 글

LOB:Golem→Darkknight  (0) 2018.04.11
LOB:Skeleton→Golem  (0) 2018.04.10
LOB : Troll→Vampire  (0) 2018.04.09
LOB : Orge→Troll  (0) 2018.04.09
LOB : Darkelf→Orge  (0) 2018.04.09
블로그 이미지

천재보다는 범재

,