CTF 스터디

    [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] 10번_ shellshock 풀이

    [pwnable.kr] 10번_ shellshock 풀이

    포너블 10번 shellshock 문제를 풀어보았다. bash에 대한 충격적인 소식이 있다고 한다. 먼저 ssh로 로그인을 해주었다. ./shellshock 라고 입력하면 shock_me라는 문구가 출력되고 별다르게 진행되는 사항은 없었다. shellshock.c 파일의 코드를 확인해보았다. uid와 gid만 세팅한 뒤, 시스템에서 출력하는 함수를 호출하고 마친다. 아까 문제에서 bash에 대한 취약점을 다루는 것 같았는데, 일단 코드만으로는 이해가 제대로 되지 않아 셸과 그에 대한 취약점을 확인해보았다. 먼저 코드에 사용된 명령어들을 확인해보았다. setresuid, setresgid를 shellshock_pwn의 권한으로 부여받는다. 위 두 명령어는 set real, effective and save..