해커스쿨(22)
-
[어설픈] LOB 5번 orc 문제풀이
안녕하세요!오늘은 LOB 5번 orc 문제풀이를 해보겠습니다! 아래에 문제의 소스코드가 주어졌습니다! 직전 goblin 문제와 다른 점이딱 하나 있죠? 맨 밑에 buffer를 0으로 초기화 해주는거요!goblin에서 소스코드 해석 다 했지만간단하게만 짚고 넘어가면! 1) 크기가 40인 버퍼, 정수 i 스택에 선언 2) argument 갯수 2개 이상으로 맞춰라! 3) 환경변수 못 쓴다! 4) argv의 48번째 값 \xbf이여야 한다! 5) 그리고 이 문제에서 추가된!버퍼도 초기화 해주니 exploit 할 때 버퍼 쓰지마!일단 tmp 폴더를 만들고tmp 폴더에 wolfman 프로그램을 복사합니다! 왜냐?wolfman은 저희가 로그인한orc 소유가 아니기에 gdb로 실행을 못시켜요 ㅠㅠ 자 그리고 이제 g..
2019.03.17 -
[어설픈] 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 1번 gate 문제풀이
안녕하세요!오늘은 LOB의 첫 번째 문제gate를 풀이해보도록 하겠습니다! 아래에 소스코드가 나와있습니다!첫 번째 문제라 그런지 비교적 간단하네요! 소스코드를 분석해보자면,우선 argv 형식으로 입력을 받네요! 다음으로 버퍼 크기가 256byte네요! 그리고 argument의 갯수가 2개 보다 작으면 안되요!그러면 argv error 라는 문구를 출력하고 프로그램이 종료 돼요! 그리고 바로 다음으로 strcpy 하는데!이 부분이 취약하죠!얼만큼 copy할지 크기를 지정 안해줘서 오버플로우가 터져요!뭐 FTZ에서 봤던 문제와 매우 비슷하네요! 제일 기본적인 오버플로우 풀이방법인shellcode를 그냥 버퍼에 넣고그리고 ret_addr를 버퍼의 주소로! 이건 제가 FTZ 풀이 할 때도 많이 했던 방식이죠? ..
2019.03.04 -
[어설픈] 해커스쿨 FTZ Level 17 문제풀이
안녕하세요!오늘은 오랜만에 FTZ level 17번 문제를풀어보도록 할게요! 제가 이 문제를 풀고 이해하는데 좀 오래 걸려서.. 어찌 되었건, 문제를 보면아래와 같습니다! 전 문제 16번은 shell함수가 있어서함수 포인터로 "야 shell 함수 실행시켜" 이렇게 shell 함수 주소만call 함수 포인터에 잘 넣어주면바로 문제가 풀렸죠? 이번에는 바뀌었습니다!shell 함수가 없어졌어요.... 그러면 어떻게 해야하나?저희가 직접 system함수 주소 넣고/bin/sh 인자도 줘야죠!네 맞아요 이번에도 RTL로 풀꺼에요! main함수 코드보면 16번과 비슷하죠(1) 스택에 crap 변수 쌓이고 (2) 그 위에 call 함수 포인터 쌓이고 (3) 그 위에 버퍼[20]만큼 쌓이고 (4) fgets 함수로 4..
2019.03.02 -
[어설픈] 해커스쿨 FTZ Level 16 문제풀이
안녕하세요! 오늘은 FTZ Level 16번 문제풀이를 하겠습니다! 문제를 보니 아래와 같이 나와있네요! shell함수가 선언 되어있고!shell 함수를 실행시키면 ->(real effective) uid가 Level 17로 상승한다-> (Level 17의 권한으로) 쉘을 실행한다 printit함수도 선언되어 있네요!printit함수는 Hello there!를 출력해주고 끝나는 함수네요! 그 다음에 main 함수를 보면 1. int 형 변수 crap을 선언하고! 2. void형의 함수 포인터 call에 printit의 주소를 넣네요![원래 *call 이거면 call 포인터 변수인데 (*call)( ) 이렇게 함수 ( )를 포함하고 있는 꼴이라 함수 포인터에요!] 3. char 형의 buffer 20 by..
2019.02.05 -
[어설픈] 해커스쿨 FTZ level 15 문제풀이
안녕하세요!오늘은 FTZ Level 15번을풀어보도록 하겠습니다! 문제의 코드는 아래와 같습니다!근데 뭐 레벨 14의 코드와매우 흡사하죠? Level 14의 코드와 달라진 부분이 사실 딱 두 군데입니다!1) check가 포인터 변수로 바뀐 것!2) if(*check==0xdeadbeef)로 바뀐 것! 포인터 변수는 쉽게 말해서다른 놈에게 손가락질 할 수 있는 변수에요!똑같이 변수인데, 한 가지 기능이 추가된 거에요! 예를 들자면, check에 주소 값을 넣고(예를 들어 0xbfffea1d)*check=1을 하면 check 변수에 1을 넣는게(check=1) 아니라check 변수가 가지고 있는 주소 값을 따라가서 1을 넣는 거에요! 위의 예에선 check가 0xbfffea1d 주소 값을 가지고 있죠?그럼 ..
2019.02.03