-
[FTZ]해커스쿨(HackerSchool) LEVEL16 풀이(Solution)미사용/##Security 2015. 8. 15. 01:20
HackerSchool FTZ WARGAME Solution
Start : 15.07.03
LEVEL16
[그림 1]
hint 를 확인해 보면 [그림 1]과 같이 출력이 된다. 코드를 분석해보면 shell 함수와 printit 함수가 정의되어 있고, main 함수에서는 void 타입의 call 함수 포인터가 선언되어 있다. 그리고 해당 함수 포인터에는 printit 함수의 포인터가 저장되어 있으며 나중에는 call에 저장된 포인터로 함수를 호출한다. shell 함수에 상위 권한으로의 쉘을 실행시키는 코드가 포함되어 있으므로 우리는 이 shell 함수가 실행되도록 해야한다.
[그림 2]gdb로 열어서 info functions 를 입력하면 정의된 함수 정보가 출력이 되는데 그 중 shell 함수의 주소값을 확인한다.
[그림 3]
이어서 어셈블리를 확인해서 buf 변수의 위치와 call 함수 포인터의 위치를 확인한다. 40byte 만큼의 차이가 나기 때문에 버퍼 오버플로우를 발생시켜 값을 덮어쓸 수 있다.
[그림 4]
공격에 필요한 파일을 [그림 4]와 같이 만드는데 이 때 덮어쓸 값은 shell 함수의 주소값을 넣으면 된다.
[그림 5]
버퍼 오버플로우를 진행하면 [그림 5]와 같이 상위 권한으로 쉘이 실행이 된 것을 확인할 수 있다.
'미사용 > ##Security' 카테고리의 다른 글
[FTZ]해커스쿨(HackerSchool) LEVEL18 풀이(Solution) (0) 2015.08.15 [FTZ]해커스쿨(HackerSchool) LEVEL17 풀이(Solution) (0) 2015.08.15 [FTZ]해커스쿨(HackerSchool) LEVEL15 풀이(Solution) (0) 2015.08.15 [FTZ]해커스쿨(HackerSchool) LEVEL14 풀이(Solution) (0) 2015.08.15 [FTZ]해커스쿨(HackerSchool) LEVEL13 풀이(Solution) (0) 2015.08.15