풀이
-
1100번 하얀 칸 풀이Programming/[BAEKJOON] acmicpc 2018. 1. 9. 13:25
[문제] URL : https://www.acmicpc.net/problem/1010 [입력/출력] 이렇게 8*8 총 64개 칸을 가진 체스판에서 말이 있다면 F 없다면 . 문자를 입력한다. 뭐.. 2진수라고 생각을 하면 될듯.... 그렇게 2진수로 생각을 해서 나타내보면 체스판은 이렇게 표현이 가능하다. 0) 0 1 0 1 0 1 0 11) 1 0 1 0 1 0 1 02) 0 1 0 1 0 1 0 13) 1 0 1 0 1 0 1 04) 0 1 0 1 0 1 0 15) 1 0 1 0 1 0 1 06) 0 1 0 1 0 1 0 17) 1 0 1 0 1 0 1 0 [풀이] #include int main(){char arr[8][8]; // 2차원 배열 선언 -> 8 * 8int count = 0,i,j; ..
-
level 19. 풀이System hacking training/Hackerschool F.T.Z 2018. 1. 6. 20:52
all clear 까지 얼마 안남았네용 ㅎ 풀이 시작합니다. 로그인 후 힌트파일을 열어보면 이와 같은 소스코드가 출력됩니다. 기존 문제와 다른 부분은 setreuid()함수가 없는것입니다. 하지만 ls -al attackme 로 attackme의 권한을 확인해 보면 이렇게 setuid가 걸려있는것을 확인 할 수 있습니다. 또한 gets()함수에서 문자열의 길이를 지정하지 않는점을 이용하여 bof 공격을 할 수 있습니다. 스택구조를 확인하기 위해 gdb로 disassemble 해보면 힌트파일의 소스코드와는 다른 40을 할당한것을 알 수 있습니다. dummy 값이 20이 들어간것이죠. 이제 공격 시나리오를 생각해보면 의미 없는 값을 40바이트로 dummy와 버퍼를 덮어고, SFP 를 4바이트로 덮고, 마지막..
-
1026번 보물 풀이Programming/[BAEKJOON] acmicpc 2018. 1. 3. 06:03
1026번 보물 풀이 시작합니다. 문제는 이러합니다. 이 문제의 정답 비율이 60%가 넘는다는 사실을 잊고 너무 어렵게 생각을 해서..시간을 낭비했습니다ㅠ [힌트]중요한건 어렵게 생각하지 않는것인것 같습니다. ㅎ 문제의 요지는 단순하게 A를 재배열하고, B를 재배열하면 안됩니다. 이 문제에서는 단순히 입력을 받는 B배열을 재배열하면 틀리게끔 해놓은것 같습니다. 그렇다면 정말 단순하지만 B의 배열에 있는 원소를 고대로! 다른 배열을 만들어 그 배열에 똑같이 넣어주고 정렬하면 되겠죠? 정렬은 A배열은 작은수 순서대로, B는 큰수 순서대로 정렬해주면 문제가 요구한 정답이 나오게됩니다. 네 그러면 됩니다. ㅎ 풀이 공개합니다. [풀이 소스코드] #include int main(){int input,i,j,tmp..
-
1037번 약수 풀이Programming/[BAEKJOON] acmicpc 2018. 1. 2. 01:25
4시간 삽질을 해버렸네요... [문제] [풀이] #include int main(void){int input,i,j,temp;scanf("%d",&input);int arr[input];for(i = 0; i arr[j+1]){temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}printf("%d",arr[0] * arr[input-1]);return 0;} 허무하지만 예외처리 필요없고 정렬 잘해서 첫번째 값과 마지막 값 곱해주면 됩니다. ㅠㅋㅋㅋ 그리고 혹시 이 문제를 푸신 분..
-
level 18. 풀이System hacking training/Hackerschool F.T.Z 2017. 12. 24. 20:40
안녕하세요 살충제입니다. 오랜만에 f.t.z를 풀어보네요.. 시험기간+프로젝트+발표준비로 너무 바쁜 하루를 보내왔습니다.ㅎㅎ 시험은 끝났지만 여전히 바쁘네요..ㅠ_ㅠ 아무튼 오늘 level 18을 풀이해보았는데요. 풀이를 시작합니다. ^____________^ 로그인 후 hint 파일을 열어보시면.. 소스코드가 아주 길게 나옵니다.....ㅎ #include #include #include #include void shellout(void);int main(){ char string[100]; int check; int x = 0; int count = 0; fd_set fds;-> 구조체/FD == 파일 디스크립터의 줄임 표현 printf("Enter your command: "); fflush(stdo..
-
level 17. 풀이System hacking training/Hackerschool F.T.Z 2017. 12. 3. 19:03
저는 해커스쿨 f.t.z를 풀이할때 한가지 습관이 있는데요. 문제 비밀번호를 획득하면 바로 풀어보는 습관입니다. (다들 그러실듯하지만..) level 16을 풀이하고 바로 level 17을 풀이하였는데 우연히 풀게 되어서 풀이를 작성하게 되었습니다. 기존에 나와있는 풀이와는 다를것으로 예상이 되고, 출제 의도와는 다르게 푼거같아서 어떨떨합니다만... ㅎㅅㅎ 풀이를 시작하겠습니다. 로그인 후 힌트파일을 열어본 결과입니다. 역시 함수 포인터로 printit() 의 시작 주소를 담고 있는것을 확인 할 수 있습니다. 하지만 이전의 문제와는 다르게 shell() 가 보이지 않네요. 대신 main()에 level 18의 권한을 주는것이 보이는데요. 풀이를 하기 위해 취약점을 찾아야겠죠? 이제는 바로 보일것같습니다...
-
level 15. 풀이System hacking training/Hackerschool F.T.Z 2017. 11. 26. 23:24
F.T.Z level 15를 풀이해 보았습니다. 로그인 후 힌트를 확인해보니 level14의 소스코드와 유사합니다. 하지만 포인터 변수를 사용한 점이 다른것을 알 수 있습니다. 즉, check이 가리키는 값이 0xdeadbeef 와 일치해야 쉘을 띄어주는 것을 확인할 수 있습니다.또 이전의 문제와 같이 fgets함수의 입력길이가 잘못되었으므로 버퍼오버플로우 공격을 하면 쉘을 띄울 수 있을것으로 보입니다. level15의 디렉토리에서 gdb사용이 제한되므로 공격해야할 attackme 라는 파일을 cp 명령어로 tmp 파일로 복사를 해줍니다. 이렇게 복사한 파일을 gdb를 통해 확인해 봅니다. lea eax, [ebp-56] 한 다음 eax를 push 해주는 것으로 보아 버퍼의 시작임을 알 수 있습니다. 또..
-
level 14. 풀이System hacking training/Hackerschool F.T.Z 2017. 11. 12. 18:29
엄청난 뻘짓끝에 F.T.Z level 14도 풀이를 했습니다. level14 풀이를 해보았습니다. 로그인 후 level15에 실행 권한이 주어진 파일을 찾은 모습입니다. 간단히 ls -al 명령어로 찾을 수 있습니다. 이번에도 변태같은 attackme가 공격을 바라며 기다리고 있네요 ㅎ 힌트 파일을 열어 힌트를 확인 해 보니.. char buf[20]; 으로 20 byte 크기의 배열이 존재합니다. 하지만 크기에 맞지 않게 fgets() 함수에서는 45 byte 를 입력받고 있는 모습입니다. 따라서 버퍼오버플로우 취약점이 존재하는 것을 확인 할 수 있습니다. 또한 if 문의 조건으로 check 이라는 int 형 변수에 0xdeadbeef 라는 문자가 존재한다면 쉘을 실행 시켜 주네요. ㅎ 저 if 문의 ..