해커스쿨 문제를 푸는 중 가장 마음에 들면서도 감명받은 문제.

FPO의 개념을 여기서 처음 알았고, 가장 처음 공부할 때 혼자 어떻게 공격할지 엄청 고민하면서 며칠을 보냈고

결국 이해하면서 큰 전율을 느꼈었다.

BoB 면접 때도 이걸로 발표했을 만큼 꽤 좋아하는 공격 방식이다.

이 문제에서는 problem_child라는 다른 함수가 이미 존재하고, 그 안의 버퍼를 넘치게 하는 방식이므로 어려울 것도 없다.

흔히 말하는 1바이트 오버플로우 문제인데, 더미가 없는 관계로 저부분은 바로 SFP이다.

SFP 1바이트를 덮어쓸 수 있고, main 외의 다른 함수 내의 버퍼를 오버플로우 할 수 있다는 말은 FPO의 위험을 가지고 있다는 것이다.

해당 함수의 에필로그 + 메인 함수의 에필로그로 총 두 번의 leave와 ret이 일어나기 때문에 SFP의 변조는 곧 EIP의 변조로 이어질 수 있다.


환경변수에 쉘코드를 올리고 해당 주소를 구한 후 EIP에 들어갈 값인 BUF의 첫 4바이트를 해당 쉘코드의 주소로 주었다.

그리고 마지막 1바이트를 오버플로우 할 때 BUF주소의 -4바이트를 준다.

이 이유는 leave-ret이 한 번 일어나면서 EBP가 변조된 EBP로 이동된 후, 한번 더 leave-ret을 할 때 leave에서 pop ebp를 진행해 버리기 때문에 ret에서 pop을 할 경우 BUF의 첫 4바이트를 참조하게 하기 위함이다.

따라서 마지막 1바이트에서 BUF 주소를 그대로 집어넣으면 BUF의 처음에 4바이트 더미를 주고 쉘코드의 주소를 넣어야 한다.

간단하게 주소를 찾고 공격에 성공하였다.

'Wargame > Lord of Buffer overflow' 카테고리의 다른 글

LOB Redhat : bugbear > giant  (0) 2015.11.03
LOB Redhat : darkknight > bugbear  (0) 2015.11.02
LOB Redhat : golem > darkknight  (0) 2015.10.17
LOB Redhat : skeleton > golem  (0) 2015.10.15
LOB Redhat : vampire > skeleton  (0) 2015.10.15
LOB Redhat : troll > vampire  (0) 2015.10.15
블로그 이미지

__미니__

E-mail : skyclad0x7b7@gmail.com 나와 계약해서 슈퍼 하-카가 되어 주지 않을래?

댓글을 달아 주세요