ftz(9)
-
[어설픈] 해커스쿨 FTZ Level 19 문제풀이(late upload)
안녕하세요!오늘도 까먹고 늦게 올린FTZ 문제 19번을 풀어보도록 할게요! 문제는 아래와 같이 더럽게 simple 합니다! main에 buf[20] 만큼 선언하고!gets함수로 overflow가 일어나게끔 해놓죠! 저도 맨 처음에 신나서 문제 풀었습니다! 근데... 문제를 풀어도 권한 상승이 일어나지 않고계속 level19의 권한이길래이상했습니다! 그리고 왜 이러지..?생각을 하고 다른 문제와 비교해보니!하나가 빠져있었습니다! 직전 문제에서 shellout( )함수 코드를 봐도setreuid(3099,3099)가 있었죠? setreuid( id 숫자 , id 숫자)함수를 이용하여 다음레벨로 권한상승을 시킨 후에쉘을 시켜야 저희가 원하는 문제가 풀리는 겁니다! 처음에 저는 그래서execve 함수를 이용해서..
2019.04.18 -
[어설픈] 해커스쿨 FTZ Level 18 문제풀이(late upload)
안녕하세요!올린다는 걸 깜빡하고이제서야 늦게 올립니다! 오늘은 FTZ level18번 문제를 풀어보겠습니다! main에 변수들도 많이 선언되어있고!코드도 상당히 기네요! 우선 변수들 먼저 볼까요?char형의 string이 제일 먼저 선언되어있네요!그 다음에 check 변수, x변수, count 변수, fd_set 구조체의 fds 하나많이도 선언되어 있네요! 다음으로, 밑에 이제 함수들을 보면!printf로 command를 입력하라는 문장을 출력하고stdout과 관련된(저희가 입력할 때 쓰는 stdin과 반대) 출력 버퍼를 fflush함수로 청소하네요!fflush는 버퍼를 클리닝, 초기화하는 함수입니다! 그리고 while(1)이니 무한 반복인 상태가 되는데어떤 함수들이 계속 실행 되는지 볼까요? 제일 먼저..
2019.04.16 -
[어설픈] 해커스쿨 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 -
[어설픈] 해커스쿨 FTZ level 14문제풀이
안녕하세요!오늘은 FTZ level 14문제를 풀어보도록 하겠습니다! 문제를 보니 아래와 같네요! main에 crap선언 되고 스택에 쌓이고check 선언되고 스택에 쌓이고char 형의 buf 20byte 선언되고 스택에 쌓이고 fgets로 표준입력으로 45byte받아서 버퍼에 저장하고!근데 문제는 버퍼 크기가 20인데 여기에 45만큼을저장하니 오버플로우가 생기겠죠? 근데 지난번 문제와 좀 비슷하긴한데더 쉬운거 같은데요?check의 값이 0xdeadbeef이면알아서 shell이 실행되네요! Level 13번은 저희가 RTL(Return To Library)하느라 시스템 함수 주소값이랑 /bin/sh 주소값 다 넣었어야 했는데 말이죠 ㅎ 자 일단 gdb를 실행시켜서 attackme를 분석해보니0x38만큼 ..
2019.01.31