포너블

    [pwnable.kr] 15번_cmd2 풀이

    [pwnable.kr] 15번_cmd2 풀이

    포너블 15번 cmd2 문제를 풀어볼 것이다. 아빠가 나에게 시스템 명령 쉘을 사주셨다고 한다. 하지만 그는 그의 허락없이 노는 것을 막기 위해 어떠한 필터를 걸어놨다. 하지만 나는 내가 원할때 언제든 하고 싶다! ...라고 한다. 일단 서버에 접속해주었다. 이번엔 독특하게 이전 문제의 flag 값을 입력해야했다. ls 명령어를 통해 cmd2, cmd2.c, flag 파일을 확인하였다. cmd2 실행이 안되었기 때문에 바로 소스코드를 출력했다. cmd1과 filter 과정을 거치는 것은 동일해보인다. 이번엔 필터링을 하는 것이 =, PATH, export, /, `, flag로 늘어났따. 그리고 /가 포함되어 있기 때문에 와일드카드를 사용하는 것도 불가능해진 상황이다. 또한, 메인함수를 보면 환경변수를 ..

    [pwnable.kr] 14번_cmd1 풀이

    [pwnable.kr] 14번_cmd1 풀이

    포너블 14번 cmd1 문제를 풀어볼 것이다. 리눅스에서 PATH 환경이 무엇인지 물어보고 있다. 일단 아래 서버로 접속을 시도하였다. ls 명령어를 통해 cmd1, cmd1.c, flag 파일을 확인하였다. cmd1을 실행해보니 Segmentation fault로 실행이 되지 않았다. cmd1의 소스코드를 살펴보았다. filter 함수를 통해 flag, sh, tmp의 경우 필터링을 거쳐서 나타나지 않는 것을 볼 수 있다. strstr()함수는 string1 에서 string2의 첫 번째 표시를 찾는다. 함수는 동일한 프로세스에서 string2로 끝나는 null 문자를 무시한다. putenv() 함수는 기존 변수를 변경하거나 새 변수를 작성하여 환경 변수의 값을 설정한다. 이 문제는 환경변수를 사용해서..

    [pwnable.kr] 13번_lotto 풀이

    [pwnable.kr] 13번_lotto 풀이

    포너블 13번 lotto 문제를 풀어볼 것이다. 숙제로 로또 프로그램을 만들었다고한다. 서버에 접속을 시도하였다. 우선 lotto 파일을 실행시켜보았다. 일단 프로그램의 룰을 알기 위해 2를 입력하였다. nlotto는 46보다 작은 6개의 랜덤 자연수로 구성된다. 당신의 목표는 당신이 할 수 있는만큼 로또 번호를 매치시키는 것입니다. 만약 1위 복권에 당첨이 된다면 보상을 받을 수 있습니다. 더 자세한 내용은 아래 링크를 참조하십시오. 위 설명처럼 46보다 작은 6개의 자연수를 맞춰야한다. 아무 수나 입력하면 다른 메시지가 뜨기 때문에 lotto.c 코드를 분석하였다. flag를 얻기 위해서는 로또 결과값에 따라 flag를 볼 수 있는 권한을 주는 play함수를 중요하게 봐야하는 것 같다. fflush(..

    [pwnable.kr] 12번_blackjack 풀이

    [pwnable.kr] 12번_blackjack 풀이

    포너블 12번 blackjack 문제를 풀어볼 것이다. 블랙잭 게임을 이행을 확인하라고 한다. 일단 서버에 접속하여 문제를 확인해보았다. 서버에 접속하니 총 3가지의 선택지가 있다. 1번은 게임을 시작하고, 2번은 규칙을 볼 수 있으며, 3번은 나가기이다. 우선 규칙을 알아보기 위해 2를 입력하였다. VLAD의 블랙잭 규칙은 다음과 같다. 1. 나는 게임의 확률에 의문을 제기하면 안된다. S 이 프로그램은 랜덤으로 카드를 생성한다. D 만약 너가 진다면, 너는 운이 없는 것이다! 2. 각 카드에는 가치가 있다. S 숫자 카드 1부터 10까지는 그 숫자에 해당하는 값을 유지한다. D J,Q,K 는 10의 값을 갖는다. C 에이스 카드는 11의 값을 갖는다. 이 게임의 목표는 값의 합이 21에 도달하는 것이..

    [pwnable.kr] 11번_coin1 풀이

    [pwnable.kr] 11번_coin1 풀이

    포너블 11번 coin1 문제를 풀어볼 것이다. 네트워크 응답이 너무 느리다면 nc 0 9007을 시도해보라고 한다. 별다른 방법은 없어보였고, nc로 적힌 넷캣 서버 접속을 하라고 되어있다. 접속하게 되면 "Shall we play a game?"이라는 문구가 제일 먼저 나타난다. 문장을 해석해보면 우리의 손에 금화가 몇개 있는데 위조된 동적이 있다고한다. 그러나 생긴 것은 진짜와 매우 동일하고 무게가 진짜와 다르다고 한다. 100개의 위조된 동전을 찾는다면, 이기게 되는 게임이다. 실제 동전 무게가 10이고, 위조 동전 무게가 9인 점을 기억해야한다. - How to play - 1. 당신은 N개의 동전 갯수와 C번의 기회를 얻는다. 2. 그러면 동전들의 index 번호를 지정하여 3. 무게 정보를 ..

    [pwnable.kr] 9번_ mistake 풀이

    [pwnable.kr] 9번_ mistake 풀이

    포너블 9번 mistake 문제를 풀어볼 것이다. 어떠한 실수를 저질렀다고 한다. 심각하게 생각하지 않아도 된다는 문구도 있다. 먼저 ssh로 접속을 해볼 것이다. ls를 해보니 mistake 실행파일과 코드파일, flag, password 파일이 있었다. mistake를 실행해보니 다음과 같이 나타났다. cat명령어를 통해 mistake 코드를 확인해보았다. 이 코드의 흐름은 다음과 같다. 사용자에게 pw_buf에 10바이트를 입력받아, 사용자가 pw_buf2에 10바이트를 입력받는다. 그리고 pw_buf2의 각 바이트에 1을 xor하고 pw_buf와 pw_buf2가 같으면 flag를 볼 수 있다. 총 10바이트의 길이인 pw_buf2에 각 바이트에 1을 xor한 값이 pw_buf의 각 바이트와 같아야..