이번 문제는 저번 문제에 비해서 코드가 상당히 짧아졌습니다 .
buffer가 40이 할당되어있는데 strncpy로 41만큼을 넣을 수 있습니다.

이번 문제도 고민하다가 결국 새로운 기법이 필요하다는걸 알고 화가낫는데요 

이번에 필요한 기법은 Frame Pointer Overflow 라는 기법이 필요합니다.
sfp를 1개만 버퍼오버플로우가 가능할때 사용할 수 있는 기법입니다 .

sfp는 이전 스택프레임의 포인터를 가리키고있는 친구입니다
Frame Pointer Overflow는 leave,ret을 이용한게 중요합니다 
leave 는 move ebp,esp /pop ebp를 수행하게됩니다 .
esp는 현재 스택의 가장 위의 포인터라고 생각할 수 있습니다.
여기서 mov ebp,esp를 하면 현재 스택의 가장 위의 포인터가 현재 스택의 가장 아래를 가리키고 있는 ebp에 들어갑니다 [ esp(sfp에 우리가 1개의 값을 넣은값이 포함되잇음) ]
그리고 이제 pop ebp를 수행함으로써 esp가 4가 증가하게 됩니다 .
(4가 증가한것을 계산하여 sfp를 이용해야합니다)
http://research.hackerschool.org/Datas/Research_Lecture/sfp.txt

이제 ret주소에다가 쉘코드의 시작주소를 넣어줌으로써 공격을 하게 됩니다 


problem_child를 이용해서 풀어야 하므로 problem_child를 gdb로 열어봤습니다 여기서 leave에 브레이크 포인트를 잡아준뒤 esp에서 100개를 뽑아줬습니다.



A가 버퍼 40 + sfp값 1추가한 총 41개가 들어가있습니다 .    

----------노트북에서 데스크탑으로 바꿔서 진행해서 주소값이 조금씩 달라졌습니다


쉘코드 25 + nop값 15  + sfp변경할 값 1 해서 총 41을 넣어줬더니 
세그먼트폴트가 떠서 코어덤프를 해서 찾아봤습니다 

이렇게 찾자니 가독성..?이 조금 떨어지는거같아서 단순히 A41개만 넣어줘서 다시 봐보겠습니다 

problem_child+41에 브레이크 포인트를 걸어준뒤에 

A를 단순히 41개 넣어줬습니다 .
아까 제가 찾앗던 주소값에서 조금 변경된것을 보여줄 수 있습니다 .
이제 저기서 찾은 주소값으로 공격을 할 수 있는데 단순히 +4를 넣어주는것이 아닙니다 ( 위에 올린 문서링크를 읽고 참고해주세요 )

 +4는 일단 leave,ret 하는 과정에서 pop을 할때 +4가됩니다.그 후에 단순히 +4만 해야하는것이 아니라 우리는 sfp값을 변조해서 쉘코드가 잇는곳을 실행시키도록 하는 공격을 사용하는것인데 buffer가 들어있는 주소 값 (+4)까지 생각을 해야 하므로 
공격하려는 주소에서 -8을 해서 공격을 해주면된다

94-8을 해줘서 8c로 공격을 하였더니 권한을 휙득할 수 잇었다 .


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

LOB giant  (0) 2016.05.12
LOB bugbear  (0) 2016.05.12
LOB golem  (0) 2016.05.10
LOB skeleton  (0) 2016.05.05
LOB vampire  (0) 2016.05.04

+ Recent posts