System/FTZ2019. 3. 19. 07:43

▲ level17의 힌트. shell 코드를 환경변수에 올려서 호출시키는 방식으로 공격 가능하다.


▲ 스택의 구조는 이전 프로그램과 같다. 56, 16, 40


▲ 환경변수에 쉘코드를 업로드하고 주소를 확인하였다. 주소는 0xbfffc8c 이다.

이제 프로그램에 NOP*40+0xbfffc8c를 입력해 주면 된다.



'System > FTZ' 카테고리의 다른 글

[FTZ school] level 19  (0) 2019.03.19
[FTZ school] level 18  (0) 2019.03.19
[FTZ school] level 16  (0) 2019.03.19
[FTZ school] level 15  (0) 2019.03.19
[FTZ school] level 14  (0) 2019.03.19
Posted by BadSchool
System/FTZ2019. 3. 19. 06:31

▲ level16의 힌트 입니다. 함수포인터 call을 선언해 printit를 호출시켜 줍니다. 함수포인터의 주소값을 printit()가 아닌 shell()의 주소로 바꿔주면 되겠네요.


▲ esp-56 만큼 해 주며 시작합니다. 마지막 부분에 ebp-16위치에 있는 주소값을 call 해 주는 모습이 보이네요. 따라서 이전문제와 비슷하지만 하드코딩값 주소가 아닌 shell()의 주소값을 넣어주면 되겠습니다.


▲ shell()함수의 시작주소는 0x080484d0 입니다. 따라서 공격은 NOP*40 + 0x080484d0 이 되겠네요.


▲ (python -c 'print "\x90"*40+"\xd0\x84\x04\x08"';cat)|./attackme



'System > FTZ' 카테고리의 다른 글

[FTZ school] level 18  (0) 2019.03.19
[FTZ school] level 17  (0) 2019.03.19
[FTZ school] level 15  (0) 2019.03.19
[FTZ school] level 14  (0) 2019.03.19
[FTZ school] level 13  (0) 2019.03.19
Posted by BadSchool
System/FTZ2019. 3. 19. 06:19

▲ 언뜻 보면 level14와 같아 보이지만 check가 그냥 변수가 아닌 포인터 변수로 변경되었습니다.


▲ 분석 편의상 intel 문법으로 변경하였습니다. 보면 버퍼를 56만큼 할당 해 주고 ebp-16위치에 있는 값과 0xdeadbeef를 비교해 줍니다. 따라서 56-16 = 40. 즉 40만큼의 NOP을 입력해 준 후 deafbeef가 있는 주소를 입력해주면 됩니다.


▲deadbeef는 프로그램 내에 하드코딩 되어 있는 상태. 약간의 게싱을 통해 찾아냈습니다. 주소값은 0x080484b2 입니다.


따라서 공격은 NOP*40 + 0x080484b2로 이루어집니다.

▲ (python -c 'print "\x90"*40+"\xb2\x84\x04\x08"';cat) | ./attackme


'System > FTZ' 카테고리의 다른 글

[FTZ school] level 17  (0) 2019.03.19
[FTZ school] level 16  (0) 2019.03.19
[FTZ school] level 14  (0) 2019.03.19
[FTZ school] level 13  (0) 2019.03.19
[FTZ school] level 11  (0) 2019.03.19
Posted by BadSchool