ftz 풀이 level20 ftz level20 풀어보겠습니다. 힌트조회 입니다. BOF 문제 인줄 알았는데 fgets으로 받는 크기가 79로 배열크기 보다 작아서 바로 다른 방식으로 넘어갔습니다. FormatString Attack 으로 해보겠습니다. 우선 메모리를 조회해 보겠습니다. 심볼을 막아놓았습니다. 더욱 BOF의 가능성이 희미해졌습니다. 시험삼아 프로그램을 돌려 보았는데 문자는 그대로 출력하나, %x(서식문자)를 넣으니 알 수 없는 값이 출력되었습니다. 이를 포맷스트링 취약점이라고 합니다. 힌트에 보면 printf(bleh); 로 되어 있는데 보통 형식과는 다름을 알 수 있습니다. 보통은 printf("%x", bleh); 이러한 방식으로 써서 bleh의 주소를 넘겨 해당 형식에 맞게 출력하게 되는데, 그냥 전자 처럼 .. 2017. 1. 12. 3. C언어 (상수) C 언어 상수에 대하여 알아보겠습니다. 변수가 값이 유동적인 값이라면 상수는 변하지 않는 값입니다. 보통 말하는 상수는 한번 사용하고 없어지는 임시 값이라고도 합니다. 매크로 상수 매크로 상수는 #define 으로 정의되는 값입니다. 보통 헤더파일 밑에 선언하며 선언시 해당 프로그램에서 이 선언된 값을 사용할 수 있습니다. 또 다른 특징은 전처리기 문장이라는 것입니다. 사용법은 #define 변수명 값 이렇게 사용됩니다. 컴파일러 전에 실행되는 문장이기 때문에 유용하게 쓰일 수 있습니다. 이러한 전처리기 코드의 성질을 이용한 것도 전에 해본적이 있습니다. 2016/12/22 - [etc] - main 함수 없는 C 언어?? 전치리기 수행이 되면 어떤식으로 적용되어 컴파일 되는지 간단히 알아보겠습니다. 위.. 2017. 1. 11. ftz 풀이 level19 ftz level19 풀어보겠습니다. 힌트조회 입니다. 코드가 생각보다 간단합니다. 배열선언 후 gets 함수로 입력받은 값을 출력하는 프로그램입니다. gets 함수에서 버퍼오버플로 취약점이 있다는 것을 알 수 있습니다. 구조를 한 번 보겠습니다. 메모리 구조를 한번 정리해보면 20(배열)+20(dummy)+4(sfp)+(ret) 44바이트를 건너뛰고 쉘코드 환경변수 주소를 삽입하여 공격해보겠습니다. 환경변수를 설정하였으면 getenv 함수로 주소를 추출합니다. 주소가 나왔으니 공격을 해보겠습니다. 공격하니 권한상승이 이루어지지 않았습니다. 권한 상승을 위해 setreuid 가 필요합니다. level20의 uid는 3100임을 확인하였습니다. setreuid 와 쉘실행을 포함한 쉘코드를 다시 환경변수에 .. 2017. 1. 11. 2. C언어 (변수) C 언어 변수에 대해 알아보겠습니다. 우선 변수의 형에 대해 알아보겠습니다. 형식 이름 크기 문자형 char 1byte 정수형 short 2byte int 4byte long 4byte 실수형 float 4byte double 8byte 각 범위는 쉽게 생각해 바이트크기로 생각하시면 됩니다. 1바이트에 8비트이기 때문에 이진수로 표현가능한 만큼 범위로 생각하면 쉽습니다. 변수는 쉽게 말해 값을 넣어두는 곳이라고 생각하면 됩니다. 예를 들어 a,b,c 라는 변수가 있을때 원하는 값을 각 변수에 넣어 여러가지 연산을 할 수 있습니다. a에 1 b에 2를 넣어 c에 a+b인 3을 넣을 수도 있고 a*b인 2를 넣을 수 있는등 다양하게 활용하기 위하여 사용하는 것이 변수 입니다. 이러한 변수는 C언어에서 선언을.. 2017. 1. 10. ftz 풀이 level18 ftz level18 풀어보겠습니다. 힌트조회입니다. attackme의 소스인데 필수적인 몇개만 설명하며 넘어가겠습니다. *FD_SET, FD_ZERO, select() 에 대한 내용은 아래의 URL을 참고하시면 됩니다.http://mintnlatte.tistory.com/313 if(count >= 100) //count가 100이상이면 printf("what are you trying to do?\n"); //문자열 출력 if(check == 0xdeadbeef) //check의 값이 0xdeadbeef 이면 shellout(); //shellout함수 실행(쉘함수) switch(x) //switch case문 { case '\r': //x가 \r 일 경우 아무것도 안함 case '\n': //x가 .. 2017. 1. 8. ftz 풀이 level17 ftz level17 풀어보겠습니다. 힌트 조회 입니다. , 힌트를 보니 level16 힌트에서 shell() 함수만 빠진 상태 입니다. shell()이 없으니, 생각나는 방법은 환경변수로 쉘코드를 작성해 call() 호출주소에 환경변수 주소를 실행하는 방법을 사용하겠습니다. 메모리 형식이 level16과 거의 비슷하기 때문에 넘어가겠습니다. 환경변수 설정을 해줍니다. 이것도 전에 많이 해보았기 때문에 넘어가겠습니다. 환경변수가 확인되었으면, tmp 디렉터리에 환경변수 주소를 알기위한 코딩을 해주고 주소를 획득 합니다. 40Byte+Shell()주소 형식은 level16과 같기때문에 주소부분에 환경변수 주소를 넣어주면 성공적으로 쉘이 실행됩니다. level17을 풀어보았습니다. 2017. 1. 6. 이전 1 ··· 7 8 9 10 11 12 13 ··· 19 다음