본문 바로가기
ftz 풀이 level17 ftz level17 풀어보겠습니다. 힌트 조회 입니다. , 힌트를 보니 level16 힌트에서 shell() 함수만 빠진 상태 입니다. shell()이 없으니, 생각나는 방법은 환경변수로 쉘코드를 작성해 call() 호출주소에 환경변수 주소를 실행하는 방법을 사용하겠습니다. 메모리 형식이 level16과 거의 비슷하기 때문에 넘어가겠습니다. 환경변수 설정을 해줍니다. 이것도 전에 많이 해보았기 때문에 넘어가겠습니다. 환경변수가 확인되었으면, tmp 디렉터리에 환경변수 주소를 알기위한 코딩을 해주고 주소를 획득 합니다. 40Byte+Shell()주소 형식은 level16과 같기때문에 주소부분에 환경변수 주소를 넣어주면 성공적으로 쉘이 실행됩니다. level17을 풀어보았습니다. 2017. 1. 6.
ftz 풀이 level16 ftz level16 풀어보겠습니다. 힌트조회 입니다. 이번에는 쉘을 획득할 수 있는 함수가 shell() 로 정의 되어 있고 main() 에서는 배열을 선언 후 버퍼 오버플로 취약점이 있는 fgets 함수를 사용하였습니다. 그러나 shell() 을 호출하지 않고 call() 를 호출하여 실행하면 "Hello there!" 문자열을 출력하도록 되게 해놓았습니다. 코드만 봐도 알 수 있듯이 call() 을 호출하는 부분에 shell() 주소를 집어 넣어 shell() 을 실행하여 쉘을 획득하는 방식으로 풀어 보겠습니다. 구조는 전에 레벨과 비슷합니다. 56바이트를 확보하고 0xffffffc8 부터 들어가는데 0xfffffff0 부분에 주소를 넣어서 그 주소를 호출하는 것으로 보아 printit() 가 들어.. 2017. 1. 6.
ftz 풀이 level15 ftz level15 풀어보겠습니다. 힌트조회 입니다. level14와 매우 유사하나 다른점이 있다면 check를 포인터 변수로 선언했다는 점입니다. 그렇다면 deadbeef의 값을 직접 넣어준 level14와 달리 deadbeef를 가르치고 있는 주소의 값을 넣어주면 될거 같습니다.구조를 살펴보겠습니다. 구조는 level14와 거의 같습니다. 0xffffffc8부터 해서 56바이트를 저장하고, 0xfffffff0 에 있는 주소로 가 그 값이 deadbeef 이면 성공적으로 쉘을 실행하는 것입니다. 구조는 level14와 거의 같습니다. 이제 deadbeef가 저장된 주소를 찾아서 값대신 그 주소를 넣어보겠습니다.우선 main을 뒤져 보았습니다. main을 보니 0x80484b0 부분에(빨간 네모박스) .. 2017. 1. 4.
ftz 풀이 level14 ftz level14 풀어보겠습니다. 힌트조회 입니다. fgets 함수가 있는것으로 보아 버퍼오버플로우문제임을 알 수 있습니다. 또한 attackme 실행시에 입력을 받으면 바로 종료되기 때문에 이를 방지하기 위한 cat과 파이프를 이용하여 명령어를 사용하는 방법도 생각할 수 있습니다. 그 전과 다른점은 0xdeadbeef 값이 존재할 경우에 쉘을 실행시켜줍니다. 이번에는 따로 쉘코드는 설정안해도 될거 같습니다. 우선 디스어셈블러로 대략의 구조를 보겠습니다. 버퍼에 56바이트를 할당하는데 위에 변수 두개가 있었으므로 대략 구조는 아래와 같이 생각할 수 있습니다. 20(배열)+(dummy)+4(crap)+(dummy)+4(check)+(dummy)=56 그리고 빨간표시로된 부분을 보게 되면 에서 입력받는 .. 2017. 1. 3.
ftz 풀이 level13 ftz level13 풀어보겠습니다. 힌트조회부터 하겠습니다. 계속 비슷한 형식의 문제가 나오는거 같습니다. 이번에는 버퍼오버플로우 취약점이 존재하나 i의 값이 0x1234567 이 아니면 바로 종료되는 문제입니다. 저 해당조건을 우회할 수 있는 버퍼오버플로 공격을 하는게 목적이 될거 같습니다. 우선 늘 해왔던대로 tmp디렉터리에 옮겨주고, 디스어셈블러로 한번 구조를 보겠습니다. ebp에 i의 값(0x1234567)을 넣어 에서 비교를 하여 0x1234567이 아닐경우 종료하는 구조입니다. 1024(배열)+24(dummy)+4sfp(base pointer)+4ret(return address)=1056 이러한 구조로 생각할 수 있는데 24바이트의 더미 어딘가에 0x1234567값(비교를 위한 값)이 존재.. 2017. 1. 2.
ftz 풀이 level12 ftz level12 풀어보겠습니다. 힌트조회 입니다. level11과 유사한 코드이나 이번에는 gets 함수가 있음을 볼 수 있습니다. 저번과 다르지만 gets 함수의 BOF 취약점을 이용한 공격을 하겠습니다. 우선 메모리먼저 살펴보겠습니다. level11과 매우 유사합니다. 우선 배열할당과 크기는 전과 같습니다. 256(배열)+8(dummy)+4sfp(base pointer)+4ret(return address)=272 저번과 같이 환경변수를 만들어 268바이트에 아무문자나 넣고, 뒤에 4바이트는 쉘코드의 주소를 넣어 쉘코드를 실행시키도록 하겠습니다. 우선 환경변수를 만들어 줍니다. 쉘코드 앞에는 NOP를 붙여줍니다. 함수 점프시 메모리주소가 처음쉘코드에 안잡힐 수도 있습니다.쉘코드와 환경변수 설정은.. 2016. 12. 31.