본문 바로가기

[Pwnable] 해커스쿨 FTZ

(20)
[해커스쿨 FTZ] level12 이번엔 level12 를 풀어보자. 로그인을 하고, 파일 목록을 확인하고, 힌트를 확인한다. level11 과 유사하다. 코드를 분석해보면, str에 256바이트를 할당하고, setreuid로 level13 권한을 주고, 문장을 입력하세요 라는 문구가 뜨고, str 을 입력받고, str을 화면에 띄워준다. gdb를 이용해 attackme를 분석해보자. main + 49 를 보면 ebp-264 부터 입력을 받는다. 스택구조를 보면 level11 과 동일하다. 높은주소 RET[4] ↓ SFP[4] ↓ dummy[8] 낮은주소 str[256] 이번에는 환경변수를 이용해 풀어보자. tmp 디렉토리로 이동해 아래 명령어들을 순서대로 실행한다. 1. $export EGG=`python -c 'print "\x90"..
[해커스쿨 FTZ] Level11 이번엔 FTZ Level11을 풀어보자. 로그인을 하고, 파일 목록을 확인하고, 힌트를 확인한다. 힌트는 아래와 같다. 힌트의 코드는 attackme 라는 실행파일의 소스코드 인 것 같다. str의 크기를 256으로 제한해놨는데, 입력값의 제한은 없다. => 버퍼오버플로우 문제이다 =>문자열 길이를 조절해 RET값 변조가 가능하다. 그리고 setreuid( 3092, 3092) 명령어를 통해 프로그램의 권한을 level12로 설정해 놓았다. 따라서 프로그램이 실행되는 중에 my-pass나 /bin/bash 같은 명령어를 통해 level12의 암호를 알아 낼 수 있을 것이다. 이를 메모리상에서 실행시키기 위해서는 shell code(쉘 코드)를 사용해야 한다. shell code는 쉘을 실행시켜 주는 코드..
[해커스쿨 FTZ] Level10 이번엔 FTZ level10 문제를 풀어보자. 로그인을 하고, 파일 목록을 확인하고, 힌트를 확인한다. 힌트는 아래와 같다. 공유 메모리에 관한 문제이다. 공유 메모리에 대해 간단히 설명하면, 위 그림처럼, 여러 프로세스에서 동시에 접근 할 수 있는 메모리이다. 힌트에 나와있는 key_t 값은 공유 메모리를 식별 할 수 있는 값이라고 생각하면 된다. 공유 메모리의 위치로 생각하면 편하다. level10의 공유 메모리에 접근하려면 key_t 7530 위치에 접근하면 된다. 일단 공유메모리와 관련된 ipcs 명령어를 사용해본다. 공유 메모리 세그멘트를 보면 key 값이 0x00001d6a 라고 되어있다. 0x00001d6a(16) = 7530(10) 이다. 힌트의 값과 똑같다. 그럼 이제 이 위치에 접근하는..
[해커스쿨 FTZ] Level9 이번엔 level9을 풀어보자. 로그인을 하고, 파일 목록을 확인하고, 힌트를 확인한다. 이번 문제의 힌트는 아래와 같다. 이번 문제는 Buffer of Flow에 관련된 문제 인 것 같다. buf2, buf 에 10바이트만큼 할당하고, buf2의 공간에 " go " 라는 문자열이 들어가 있으면 문제는 풀린다. 버퍼의 크기를 10으로 설정 해놨는데 40 만큼의 데이터를 받으면서 버퍼오버플로우의 취약점이 생긴다. 정확한 분석을 위해 /tmp 디렉으로 이동해 bof.c 라는 이름으로 힌트의 코드를 복사한다. 그리고 bof 라는 이름으로 새롭게 컴파일 한다. ( gcc -o bof bof.c) gdb 를 이용해서 정확한 분석을 해 보자 ( gdb -q bof ) ( set disassembly-flavor i..
[해커스쿨 FTZ] Level8 이번엔 level8을 풀어보자. 로그인을 하고, 파일 목록을 확인하고, 힌트를 확인한다. level9의 Shadow 파일이 서버 어딘가에 숨어있고, 용량이 2700 이라고 한다. find 명령어를 통해 용량이 2700인 파일을 찾아보자. " find / -size 2700c 2> /dev/null " 수상해 보이는게 하나 있다. /etc/rc.d/found.txt 제목부터 found이다. 확인해보자 뭔가가 와다다 나왔다. 이게 level9의 Shadow 파일인데 Shadwo 파일의 형식은 아래와 같다. ------------------------------------------------------------------------------------------------------------------..
[해커스쿨 FTZ] Level7 이번엔 level7 을 풀어보자. 로그인을 하고, 파일 목록을 확인하고, 힌트를 연다. 일단 /bin/level7 을 실행시키면, Insert the password : 라고 뜨는데 아무 값이나 넣어보았다. /bin/wrong.txt 가 없다고 뜬다. 뭔가 이상해서 알아보니까 개인이 FTZ 서버를 열어서 하는 경우 생기는 오류라고 한다. 직접 root 계정으로 접속해서 wrong.txt를 만들어 줘야 한다고 한다. 정상적으로 작동했을 경우에는 오류 대신 이런 문자가 출력된다. 힌트를 사용해 문제를 풀어보자. 3. 2진수를 10진수로 바꿀 수 있는가? ( - )를 1로, ( _ )를 0으로 생각해 저 문자들을 치환하면, --_--_- => 1101101(2) => 109(10) --____- => 1100..
[해커스쿨 FTZ] Level6 이번엔 level6다. 지금까지와는 다르게 로그인 하자마자 창이 하나 뜬다. 여기서 Enter 키를 누르면 이런 창이 뜨는데 여기서 1번으로 한번 들어가봤다. Trying 이라며 뭔가 열심히 노력하는데, putty 창을 닫는 노력이었는지 창이 계속 닫힌다. 2, 3 번도 마찬가지다. 그래서 이 텔넷 접속 서비스 자체를 종료시켜보려고 했다. 유닉스 체계에서는 이러한 키들이 잇다. Ctrl+z : 백그라운드로 작업전환 Ctrl+d : 정상종료 Ctrl+c : 강제종료 Ctrl+z 와 Ctrl+d 는 효과가 없었고, Ctrl+c 를 누르니 level6의 쉘이 떴다. 파일 목록을 확인해 보니 password 라는 파일이 있고 열어보니 level7 의 비밀번호가 나왔다. level7 암호 : come together
[해커스쿨 FTZ] level5 이번엔 level5를 풀어보자. 로그인을 하고, 어떤 파일이 있는지 확인하고, 힌트를 열어보았다. /usr/bin 디렉토리로 들어가 확인해보니 level5 라는 실행파일이 있다. 다른 권한은 없고 실행만 시킬 수 있으니 실행시켜 보았다. 뭐 바뀐게 없지만 힌트에 따르면 /tmp 디렉에 level5.tmp 라는 파일을 생성한다 했으니 그리로 가본다. mysql.sock 이라는 unix domain socket 을 제외하고, 내가 원하는 level5.tmp는 없다. 그렇다면 내가 level5.tmp 를 만들어 놓는다면 어떻게 될까? 임의로 level5.tmp를 만들고 level5를 실행해 보았다. 내 생각대로라면 level5.tmp에 암호가 덮여 씌워졌거나, 이어붙여졌을 것이다. 확인해보자. 암호가 덮여 씌..