해커스쿨(22)
-
[어설픈] 해커스쿨 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 -
[어설픈] LOB 17번 zombie_assassin 문제풀이
안녕하세요!오늘은 LOB 17번 문제인 zombie_assassin을 풀어보도록 하겠습니다!소스코드는 아래와 같습니다! 근데 문제 힌트에서calling functions continuously! 라고 적혀있네요! "함수를 계속해서 호출한다!"이렇게 이해하시면 됩니다! inspector(확인하는 사람)라는 변수가 전역으로 선언되어 있네요!그 값엔 0이 있습니다! 그리고 밑에 있는도(do) 개(gye) 걸(gul) 윷(yut) 모(mo) 함수들을 하나씩 보면각각의 함수가 실행되기 전에전역변수 check의 값을 확인합니다! 그래서 도->모까지 계속 함수를 실행시켜 주면됩니다!무슨말이냐? 우리나라의 전통 윷놀이에서 도:1 개:2 걸:3 윷:4 모:5 이렇게 되어있죠? 도 함수에서 check의 값을 1로 설정합니..
2019.04.10 -
[어설픈] LOB 15번 giant 문제풀이
안녕하세요!오늘은 LOB 15번 문제인giant 문제풀이를 해보도록 하겠습니다! 소스는 아래와 같습니다!RTL도 못하고 Stack도 사용 못한다고 적혀있네요! 1) 버퍼 [40] 선언되고 2) argument 는 2개 이상! 3) argv[1]의 48번째 값이 \xbf면 exit되고 (stack으로 return 하지마라) 4) argv[1]의 48번째 값이 \x40이면exit되고 (library로 return 하지마라) 5) 버퍼도 깔끔하게 비우네요! 저는 여기서 최대한 나에게 주어진 조건이 뭔지판단해봤습니다 1) return 뒤에 코드를 덮을 수 있고(이게 굉장히 큰 merit) 2) argv[ ]들을 초기화 안 함 근데 return 뒤에 코드를 덮을 수 있으니return에 pop pop return ..
2019.04.06 -
[어설픈] LOB 14번 bugbear 문제풀이
안녕하세요!오늘은 LOB 14번 문제인bugbear 문제풀이를 해보도록 하겠습니다! 소스는 아래와 같습니다!소스가 좀 길어지긴 했네요! 근데 사실 별거는 없습니다!주석으로 된 부분(execve구하는 코드)이 길어서 그런거죠 간단하게 보자면 똑같이 버퍼는 40byte입니다그 뒤에 다양한 포인터들 선언되는데그건 프로그램이 execve의 정확한 주소 구하는데 사용되는 거구요! argument 개수 2개 보다 작으면 안되고컴퓨터가 아래의 주석처럼 코드가 쭉 실행되서execve 함수의 주소를 execve_addr에 담죠! 그 다음에 저희가 argv[1]에 입력한 45~48번째 값들을ret 변수에 담습니다! 그리고 execve_addr이랑 ret 변수 값이랑 같으면 통과!다르면 exit! 그 다음에는 strcpy로..
2019.04.04 -
[어설픈] LOB 13번 darkknight 문제풀이
안녕하세요! 오늘은 LOB 13번 문제인darkknight 문제 풀이를 해보도록 하겠습니다! 소스에 RTL1이라고 되어 있네요!소스 자체도 매우 간단하네요! 버퍼 크기가 40이고argument 개수가 2개이상이여야 하고!스택으로 return 하면 안되고!strcpy에서 취약점 터지고요! 문제를 분석해보니 LOB gate 문제에서stack return만 막아 놓은 문제 같은데요? 근데 방법은 LOB gate와 똑같이 하면 될 거 같아요!왜냐면 그때도 return은 library에 있는 system함수로 했거든요! 자 오랜만에 ldd 명령어를 이용해서bugbear가 어떤 라이브러리 의존성을 가지고 있는지 확인! 역시 /lib/libc.so.6을 사용하네요!(주소는 0x40018000) 그리고 nm 명령어를 ..
2019.04.02