본문 바로가기

포너블(pwnable)/CTF(pwnable.kr)13

[Toddler's Bottle] cmd2 문제 풀이 오늘의 문제는 이전 문제인 cmd1의 flag를 이용해 들어가야 한다. 아래꺼 드래그 해서 보셈요들 flag of cmd1: mommy now I get what PATH environment is for :) ssh 주소로 접속해준 뒤, ls 명령을 확인해보면 flag, cmd2 실행파일, cmd2.c 파일이 있음을 알 수 있다. cat 명령을 이용해 cmd2.c 파일의 전체적인 내용을 확인했다. filter, delete_env, main 함수로 이루어져 있다. main 함수에서 delete_env() 함수를 실행하고, putenv 함수를 실행하고, filter을 거친 뒤, system 함수를 사용해 인자값을 실행시킨다. int filter(char* cmd){ int r=0; r += strstr(.. 2021. 5. 19.
[Toddler's Bottle] cmd1 문제 풀이 오늘의 문제는 리눅스의 PATH environment와 관련있는 문제로 예상된다. ssh 주소로 접속을 했고, ls 명령을 통해 현재 위치 안의 파일을 확인해보면 flag, cmd1 실행파일, cmd1.c 파일 세개가 있다. cat 명령을 통해 cmd1.c 파일의 내용을 확인했다. filter 함수와 main 함수로 이루어져 있다. main 함수에서 putenv를 통해 PATH를 설정하고, 인자 argv[1]을 fileter 함수를 통해 검사한다. 만약 fileter 함수를 통과하면 argv[1]을 system함수에 넣어 실행시켜준다. 우린 flag 파일을 읽어야 하니까 첫번째 인자에 "cat flag" 명령과 동일한 명령을 이끌어 내야한다. cat flag 인자를 넣어주었을 때 fileter의 결과를 .. 2021. 5. 18.
[Toddler's Bottle] lotto 문제풀이 오늘의 문제는 lotto다. 난 로또 1등 당첨되고 싶은데 이 문제를 풀면 당첨될 수 있을까? ssh 주소로 들어간 뒤, ls 명령을 통해 안의 내용을 확인해보았다. 뭐 지금까지 했던 대로 lotto.c의 코드를 이해한 뒤, lotto 실행파일을 통해 flag 파일을 확인할 수 있겠지... #include #include #include #include unsigned char submit[6]; void play(){ int i; printf("Submit your 6 lotto bytes : "); fflush(stdout); int r; r = read(0, submit, 6); printf("Lotto Start!\n"); //sleep(1); // generate lotto numbers int.. 2021. 5. 7.
[Toddler's Bottle] blackjack 문제풀이 오늘의 문제는 blackjack이다. 문제에서 주어진 링크를 들어가보면 위와 같이 blackjack 게임의 코드가 나온다. 문제에서 주어진 위치로 접속해주면 블랙잭 게임에 들어갈 수 있다. 게임에 들어가서 내가 갖고 있는 돈보다 더 많이 베팅을 하더라도 게임을 진행할 수 있고, 그러고 나서 s를 누르면서 게임을 진행하면 플래그가 나온다. 이유를 알아보도록 하자! int betting() //Asks user amount to bet { printf("\n\nEnter Bet: $"); scanf("%d", &bet); if (bet > cash) //If player tries to bet more money than player has { printf("\nYou cannot bet more money.. 2021. 5. 7.
[Toddler's Bottle] coin1 오늘의 문제는 nc pwnable.kr 9007로 넘어가면 된다 nc를 통해 접속하고 나면 게임 하나가 나온다. 황금 동전 중에 하나의 가짜동전을 찾는 게임이다. 가짜동전은 진짜동전 무게와 다르며, 진짜동전의 무게는 10, 가짜동전의 무게는 9이다. 가짜 동전을 100번 찾는 것이 목표이며, 이를 찾게 되면 플래그(reward)를 얻을 수 있다. 1. 코인의 개수(N)과 시도횟수(C)가 주어진다. 2. 그 후 저울에 올릴 동전의 번호를 입력한다. 3. 무게에 대한 정보를 얻게 된다. 4. 2~3번을 시도횟수(C)만큼 반복하고, 정답을 입력한다. [Server] N=4 C=2 #4개의 코인이 있고, 2번의 기회가 있다. [Client] 0 1 #첫번째와 두번째 동전의 무게를 잼 [Server] 20 #무게.. 2021. 5. 6.
[Toddler's Bottle] mistake 문제풀이 [Toddler's Bottle] 오늘의 문제는 ssh 주소 하나가 있고, operator priority(연산자 우선순위) 라는 hint가 주어졌다. ssh 주소를 입력해 문제에 접속했다. ls -l 명령을 사용해 현재 위치에 있는 모든 파일을 확인해주었다. flag, mistake, mistake.c, password 총 4개의 파일이 있다. cat mistake.c 명령을 통해 mistake.c 파일의 내용을 확인해보았다. xor 함수와 main함수로 이루어져 있다. 우선 main함수부터 살펴보자! int fd; if(fd=open("/home/mistake/password",O_RDONLY,0400) < 0){ printf("can't open password %d\n", fd); return 0.. 2021. 4. 28.