시스템 해킹(22)
-
[어설픈] LOB 4번 goblin 문제풀이
안녕하세요! 오늘은 LOB 4번goblin 문제풀이를 해보도록 할게요! 아래와 같이 일단 소스가 있습니다!직전 문제 cobolt에 비해서꽤 기네요! 하나씩 천천히 살펴볼게요! 1) argv 형식으로 입력받음 2) 스택에 buffer 40크기, int형 i 변수가 있구요! 3) argument가 2개보다 작으면 오류라고 에러 메세지 출력! 4) 여기서 egghunter라고 하는건! 환경변수를 못쓰게 한거에요!왜냐면 코드를 보면 environ[i] 이 부분이 환경변수를 가리키는 건데memset 함수로 environ[i] 값을 모두 0으로 설정하잖아요! 5) 여기도 추가된 부분인데 argv[1][47] != '\bf'배열에서 47이면 실제론 48이죠?(배열의 index가 0부터 시작하니까요) 즉, argv[1..
2019.03.15 -
[어설픈] LOB 3번 cobolt 문제풀이
안녕하세요!오늘은 LOB 3번Cobolt 문제를 풀어보도록 하겠습니다! 문제에 들어가니 아래와 같은 소스코드가주어지네요! 근데 사실 바로 직전 문제gremlin과 달라진 게 별로 없습니다!달라진 게 있다면 gremlin: argv 형식으로 입력을 받았다cobolt: stdin(standard input)으로 입력을 받는다 이게 끝이에요....입력 방식만 차이가 있지풀이나 exploit은 똑같아요 왜냐면 소스코드를 보시면버퍼가 16byte가 있죠?그리고 gets 함수로 입력을 받고 그 값을 버퍼에 저장다음에 버퍼에 저장된 값을 printf 함수로 출력! 여기서 취약점은 마찬가지로 gets 함수가 얼만큼 읽을지 크기를 안정해줘서오버플로우가 발생하는 것이죠? 즉 gremlin과 마찬가지로 main 함수의 re..
2019.03.13 -
[어설픈] LOB 2번 gremlin 문제풀이
안녕하세요!오늘은 LOB의 두 번째 문제!gremlin을 풀어보도록 하겠습니다! 우선 코드를 보니 아래와 같네요!버퍼의 크기가 gate에 비해서현저하게 줄었네요!16 byte 밖에 안되네요 ㅠㅠ 그리고 argument가 2개보다 작으면 argv error라고 뜨네요! 그리고 argv[1]의 값을buffer에 복사하네요!(여기서 취약점이 발생하죠! 얼만큼 copy할지 크기 지정이 없으니....ㅎㅎ)그리고 printf함수가 buffer에 저장된 값을 출력하네요! gate에서도 보셨듯이,red hat linux 6.2에서는 스택 사이에 dummy값이 존재하지 않습니다! [gremlin의 스택구조]buffer (16byte)EBP(4byte)RET_ADDR(4byte).....(이후 스택) 근데 저희가 gate..
2019.03.11 -
[어설픈] LOB 1번 gate 문제풀이
안녕하세요!오늘은 LOB의 첫 번째 문제gate를 풀이해보도록 하겠습니다! 아래에 소스코드가 나와있습니다!첫 번째 문제라 그런지 비교적 간단하네요! 소스코드를 분석해보자면,우선 argv 형식으로 입력을 받네요! 다음으로 버퍼 크기가 256byte네요! 그리고 argument의 갯수가 2개 보다 작으면 안되요!그러면 argv error 라는 문구를 출력하고 프로그램이 종료 돼요! 그리고 바로 다음으로 strcpy 하는데!이 부분이 취약하죠!얼만큼 copy할지 크기를 지정 안해줘서 오버플로우가 터져요!뭐 FTZ에서 봤던 문제와 매우 비슷하네요! 제일 기본적인 오버플로우 풀이방법인shellcode를 그냥 버퍼에 넣고그리고 ret_addr를 버퍼의 주소로! 이건 제가 FTZ 풀이 할 때도 많이 했던 방식이죠? ..
2019.03.04