풀이
-
[2010] Problem A. Odd Man OutProgramming/Google Code Jam 2018. 2. 6. 16:18
URL : https://code.google.com/codejam/contest/438101/dashboardProblem You are hosting a party with G guests and notice that there is an odd number of guests! When planning the party you deliberately invited only couples and gave each couple a unique number C on their invitation. You would like to single out whoever came alone by asking all of the guests for their invitation numbers. InputThe fir..
-
Stack4 풀이System hacking training/Protostar 2018. 2. 4. 20:59
[문제] 이전문제와는 다르게 함수 포인터가 없다. 하지만 여전히 gets() 사용으로 인해 bof 취약점이 존재한다. ret 을 win()의 주소로 변조시키면 win()가 실행될것이다. [풀이] gdb로 열어보면 main()에서 80바이트의 공간을 할당한 것을 알 수 있다. 따라서 SFP와 buffer[64] 사이의 dummy가 들어가는지 체크할 필요가 있다. 예상한 스택 구조는 이러하다. | char buffer[64] | dummy | SFP | RET | 따라서 buffer와 dummy, sfp를 A로 모두 덮고 마지막에 win()의 주소를 넣어줬다.
-
Stack3 풀이System hacking training/Protostar 2018. 2. 4. 16:13
[문제] win()를 실행시키면 된다. 이 프로그램 역시 gets()의 사용으로 bof 취약점이 존재하고 이 취약점을 이용하여 함수 포인터 fp에 win()의 주소를 넣어주면 된다. [풀이] dummy값 확인을 위해 gdb로 열어본다. win()의 주소도 함께 알아보았다. 이 프로그램 역시 페이로드에 참고해야할 dummy값이 없다. 즉, 함수 포인터 fp와 char buffer[64]가 붙어있다는 뜻이다. 따라서 gets()의 bof 취약점을 이용하여 64 바이트 A를 넣어주고, 위에서 구한 win()의 주소를 구하면 성공한다. 주소가 정확히 win()의 주소로 변경이 되었음을 확인할 수 있다.
-
Stack2 풀이System hacking training/Protostar 2018. 2. 4. 15:49
[문제] 문제를 보면 variable에 getenv()를 이용하여 환경변수의 값을 넣어주는것을 볼 수 있다. 그리고 취약점은 역시 strcpy() ! 문자열의 길이를 검사하지 않기 때문에 bof 취약점이 존재한다. 풀이를 위해 buffer[64] 와 modified 사이의 offset을 구해야한다. 이는 gcc 컴파일 과정에서 들어가는 쓰레기값 즉, dummy 값이 존재하는지 확인을 하기 위함이다. [풀이] 먼저 gdb로 열어본다. dummy 값만 체크를 해보자. 아 여기서 dummy 값은 문제 풀이를 위해 modified 와 buffer[64] 사이만 확인을 했다. 결과는 이전 문제와 동일하게 없었다. 따라서 이 프로그램의 스택 구조를 확인해보면 이러하다. | char *variable(esp) | d..
-
Stack1 풀이System hacking training/Protostar 2018. 2. 3. 21:00
[문제] [풀이] 역시 stack0와 같이 modified 의 값을 변경해야 하는 문제인데 다른점은 if 문 참 조건이 modified 의 값이 0x61626364 이다. 또 다른점은 이 문제의 취약점은 strcpy()에 의해 bof가 발생한다는 점이다. strcpy()는 문자열의 길이를 검사하지 않는다. 정확한 계산을 위해 gdb로 열어본다. 소스 코드가 주어졌기 때문에 분석은 어렵지가 않다. 역시 esp+0x5c 가 modified esp+0x1c 가 buffer 시작 위치다. [Stack] [low address] | char buffer[64] | int modified | SFP | RET | [high address] 이전 문제와 동일하다. 따라서 페이로드를 (python -c 'print "..
-
Stack0 풀이System hacking training/Protostar 2018. 2. 3. 20:24
[문제] [풀이] main()안의 변수를 보면 int형 변수 modified와 char 64크기의 배열 buffer가 존재한다. modified의 값을 바꿀 수 있는가를 시험하는 문제인것같다. 여기서 bof 취약점을 발견할 수 있었는데 gets()는 경계를 검사하지 않는 함수가 쓰였기 때문에 bof 공격이 가능하다. bof 취약점을 이용하여 modified의 값을 바꿔주면 된다. [Stack] [low address] | char buffer[64] | int modified | SFP | RET | [high address] buffer와 modified 중간에 더미값이 없는 쉬운 문제다.(5c(hex) - lc(hex) == 64(dec)) esp+5c 에 0을 넣는것으로 modified의 위치를 알..
-
9012번 괄호 풀이Programming/[BAEKJOON] acmicpc 2018. 1. 20. 16:35
[문제] https://www.acmicpc.net/problem/9012 문제가 읽어보면 굉장히 간단합니다.[입력/출력] 처음 이 문제를 접했을때 간단하게 생각을 했습니다. '(' 가 입력될때 + 해주고 ')' 입력되면 - 해주면 마지막에 결국 '(' 개수와 ')' 개수가 동일한 결과만( ex) if(count == 0) ) YES를 출력하게 하면 되겠구나~ 그렇게 작성한 소스코드가 trouble에 있습니다.. http://hackstoryadmin.tistory.com/40?category=270793 여기 들어가보면 동일한 알고리즘으로 작성한 소스코드를 보실 수 있습니다.(삽질의 흔적) 하지만 한가지 생각을 못했던 것이 있습니다. 바로 이런 결과입니다. )( -> 즉 괄호가 닫히지 않아서 문제에서 ..
-
10828번 스택 풀이Programming/[BAEKJOON] acmicpc 2018. 1. 13. 18:18
[문제] https://www.acmicpc.net/problem/10828 [입력/출력] [ex] 시스템을 공부하면서 스택에 대한 공부를 했던 기억이있는데 직접 스택을 구현하면서 스택 구조에 대해 상기 시키는 기회가 되었습니다. strcmp함수를 적절히 사용하여 입력한 문자열에 따라 다르게 동작하도록 코딩하였습니다. [풀이] #include #include int main(){int input,i,j,count = 0;scanf("%d",&input);char opcode[input][5];int operand[input];for(i = 0; i < input; i++){scanf("%s",&opcode[i]);if(!strcmp(opcode[i],"push")) // 입력한 문자열이 push일때 op..