Hackershcool level14 = )

 

해커스쿨 FTZ 레벨14 [BOF]

 

 

 

이번에는 fgets함수로 글자수 길이를 45바이트로 제한하고 있지만 buf배열의 크기가 20이므로 BOF가 발생할 수 있다. 그리고 check변수의 값이 0xdeadbeef라는 값이 들어가야 setreuid와 쉘이 뜨게 되어있다. 바로 쉘을 얻을 수 있으니 에그쉘 없이 BOF만을 이용해 check에 deadbeef라는 문자열을 넣어야 한다는 것을 추측할 수 있다.

 

 

main한 번 살펴보면 ①번 밑줄에서 56byte만큼 공간을 할당해주고 있고 ②번 밑줄에서 ebp-16만큼의 공간에서 문자열 비교를 해주고 있다. 그렇다면 쓰레기값 ‘40byte+비교문자열’이면 쉘이 뜰거라는 것을 알 수 있다. 인자 전달 방식은 이전의 Level12와 같이 gets와 같은 fgets이므로 cat 명령어와 Pipe를 이용하여 전달해주면 된다.

 

 

다음과 같이 공격이 성공하여 Level15의 패스워드를 얻을 수 있다.







'WarGame > Hacker School FTZ' 카테고리의 다른 글

해커스쿨 Level16  (0) 2013.03.31
해커스쿨 Level15  (0) 2013.03.30
해커스쿨 Level14  (0) 2013.03.29
해커스쿨 Level13  (1) 2013.03.28
해커스쿨 Level12  (0) 2013.03.27
해커스쿨 Level11  (0) 2013.03.25

Hackershcool level13 = )

 

해커스쿨 FTZ 레벨13 [BOF]

 

 

 

이번 문제는 11, 12번과 역시 같은 구조이지만 변수 i의 값이 0x1234567이 아니라면 메시지 출력 후 프로그램이 종료되어버리는 특징이 있다. 따라서 이번에는 변수 i 부분에는 01234567이라는 값을 넣어주고 나머지 부분은 dummy로 오버플로우 시켜서 ret값에 도달하면 된다.

버퍼1 + \x67\x45\x23\x01 + 버퍼2 + ebp + Ret 과 같은 구조로 코드를 구성해야하기 때문에 변수 i까지의 거리를 구해야한다.

 

0x080484a0 <main+0>: push   %ebp
0x080484a1 <main+1>: mov    %esp,%ebp
0x080484a3 <main+3>: sub    $0x418,%esp
0x080484a9 <main+9>: movl   $0x1234567,0xfffffff4(%ebp)

0x080484b0 <main+16>: sub    $0x8,%esp
0x080484b3 <main+19>: push   $0xc16
0x080484b8 <main+24>: push   $0xc16
0x080484bd <main+29>: call   0x8048370 <setreuid>
0x080484c2 <main+34>: add    $0x10,%esp
0x080484c5 <main+37>: cmpl   $0x1,0x8(%ebp)
0x080484c9 <main+41>: jle    0x80484e5 <main+69>
0x080484cb <main+43>: sub    $0x8,%esp
0x080484ce <main+46>: mov    0xc(%ebp),%eax
0x080484d1 <main+49>: add    $0x4,%eax
0x080484d4 <main+52>: pushl  (%eax)
0x080484d6 <main+54>: lea    0xfffffbe8(%ebp),%eax
0x080484dc <main+60>: push   %eax
0x080484dd <main+61>: call   0x8048390 <strcpy>

0x080484e2 <main+66>: add    $0x10,%esp
0x080484e5 <main+69>: cmpl   $0x1234567,0xfffffff4(%ebp)
0x080484ec <main+76>: je     0x804850d <main+109>
0x080484ee <main+78>: sub    $0xc,%esp
0x080484f1 <main+81>: push   $0x80485a0
0x080484f6 <main+86>: call   0x8048360 <printf>
0x080484fb <main+91>: add    $0x10,%esp
0x080484fe <main+94>: sub    $0x8,%esp
0x08048501 <main+97>: push   $0xb
0x08048503 <main+99>: push   $0x0
0x08048505 <main+101>: call   0x8048380 <kill>
0x0804850a <main+106>: add    $0x10,%esp
0x0804850d <main+109>: leave 
0x0804850e <main+110>: ret   
0x0804850f <main+111>: nop

 

위의 코드를 보면 main+3에서 1048바이트만큼 Buffer 공간을 할당해주고 있고 main+9, 54, 60, 61에서는 1234567이라는 값을 ebp-12번째에 넣어야 한다는 것을 알 수 있다.

 

 Ret = Egg Shell

 ebp = 4byte

Buffer

= 1048byte

Buf ① = 8byte

0x1234567 = 4byte

Buf ② = 1036byte

 

좌측의 표와 같이 스택이 구성되었고 공격 코드는 A*1036, \x67\x45\x23\x01, A*12, RET와 같은 구조로 짤 수 있다.

 

 

그 결과 성공적으로 Level14의 Password를 얻어낼 수 있었다.







'WarGame > Hacker School FTZ' 카테고리의 다른 글

해커스쿨 Level16  (0) 2013.03.31
해커스쿨 Level15  (0) 2013.03.30
해커스쿨 Level14  (0) 2013.03.29
해커스쿨 Level13  (1) 2013.03.28
해커스쿨 Level12  (0) 2013.03.27
해커스쿨 Level11  (0) 2013.03.25
  1. 초보해커 2015.03.18 13:24 신고

    ebp-12byte라는것은 어떻게 알 수 있는건가요?

Hackershcool level12 = )

 

해커스쿨 FTZ 레벨12 [BOF]

 

 

 

Level 12문제도 Level11처럼 hint를 보면 setreuid함수와 gets함수로 문자열을 입력받는 것을 볼 수 있다.

12번 문제도 11번처럼 gdb로 disas main해본 결과 다음과 같았다.

 

 

①을 보면 11번 문제와 마찬가지로 스택에 16진수로 108만큼 공간을 할당 해주는 것을 볼 수 있다. 역시 10진수로 바꾸면 264바이트가 된다. 이후는 11번 문제와 같이 264바이트 + ebp 4바이트 = 268바이트를 쓰레기 값으로 채워주고 Return Address를 에그쉘의 주소로 넘겨주면 된다. 따라서 이전과 같이 공격을 해보았다.

 

 

공격한 방법이 효과가 없었으며 11번과 달리 gets로 입력받으므로 인자 전달방식을 바꿔야겠다고 생각됬고 | (Pipe)를 사용해봤다.

 

 

하지만 쉘을 얻지 못했고 나름대로의 원인과 해결법을 찾아보았다.

① Pipe는 왼쪽의 표준 출력을 오른쪽의 표준입력으로 전달한다.

② 표준입력을 지원하는 명령어인 cat을 Perl문과 같이 사용하기 위해 ‘;’으로 명령어 구분

③ '`'(Back quote)로 묶인 문자열은 명령어로 인식한다.

 

위 사진에서처럼 공격을 한다면 attackme는 제대로된 표준입력을 받지 못하기 때문에 cat 명령어를 붙여주며 이를 위해 ‘;’를 사용하여 명령어를 나눠준다. 하지만 Back quote로 묶어준다면 ';cat'자체를 명령어로 인식하여 제대로 실행하지 못하기 때문에 ‘()’를 사용하여 하나로 묶어주고 Pipe를 통해 attackme로 넘겨준다.

따라서 제대로 된 코드를 쓰면 다음과 같이 쉘이 떨어지고 Level13의 패스워드를 얻을 수 있다.

 

 

 






'WarGame > Hacker School FTZ' 카테고리의 다른 글

해커스쿨 Level16  (0) 2013.03.31
해커스쿨 Level15  (0) 2013.03.30
해커스쿨 Level14  (0) 2013.03.29
해커스쿨 Level13  (1) 2013.03.28
해커스쿨 Level12  (0) 2013.03.27
해커스쿨 Level11  (0) 2013.03.25

+ Recent posts

티스토리 툴바