본문 바로가기

My Study/Exploit

Hackerschool level18

예전 문제와 달리 코드 길이가 너무 길더군요. 어셈으로 봤는데 시간이 쫌 걸릴꺼 같아서 소스코드를 보았습니다.
소스코드를 길지만 잠시 일부만 올리겠습니다.

사실 
FD_ZERO
FD_SET
FD_SETSIZE
FD_ISSET
위 함수들을 잘몰라서 분석이 어려웠습니다. 머리가 쫌..그래서 이해도 잘 안되더군요.
하지만 위 함수들이 하는 일은 확실하게 몰라도 문제는 풀수있었습니다.

소스를 분석해보겠습니다.

쭉 변수를 생성 후 check값이 0xdeadbeef이면 shellout() 함수를 실행시키게 됩니다.
다른 부분을 보시겠습니다.

1byte씩 읽어서 스위치 문으로 넘겨줍니다. 

우리의 목표는 check값에 0xdeadbeef만 넣어주면 끝납니다.
어셈코드로 보시겠습니다.

스택에 공간을 할당하고 비교하는 부분까지 나타내본 것입니다. 위 어셈을 스택에 간단하게 표현해보도록 하겠습니다.

위와 같이 됩니다. 그러면 위 소스를 보시면 string에는 값을 입력 받습니다. count가 offset으로 작용하게 되죠.
그러면 check에 값을 입력 하려면 어떻게 하면 될까요??
string[-4]에서부터 값을 입력 받으면 됩니다. 
그리고 소스코드를 보시면 \x08을 입력 받으면  count값이 -1씩 줄어들게됩니다.
그러면 \x08을 4번을 입력하고 0xdeadbeef를 입력하면 됩니다.

시나리오대로 공격을 해보겠습니다.

성공입니다. 딱 8byte만 넣어주시면 쉘을 따게 됩니다.

끝.

'My Study > Exploit' 카테고리의 다른 글

Hackerschool level20  (0) 2010.03.30
Hackerschool level19  (2) 2010.03.27
Hackerschool level17  (0) 2010.03.23
Hackerschool level16  (0) 2010.03.23
Hackerschool level15  (0) 2010.03.23