본문 바로가기

Security/pwnable.kr12

[pwnable.kr] Toddler's Bottle - passcode 이번에는 passcode 문제를 풀어보았다. 문제를 읽어보니 passcode 기반의 로그인 시스템을 만들었는데 무언가 컴파일 에러가 난 것 같다. 딱히 얻을만한 건 없는 것 같으니 넘어가자. 문제에 있는 명령어를 통해 접속해준다. 접속 완료했다. 파일은 이렇게 있었고 당연히 flag의 내용은 확인할 수 없었다. passcode 바이너리 파일을 실행해서 다음과 같이 임의의 값을 넣어줘봤다. 대충 입력하니 segmentation fault가 뜬다. 원인을 모르겠으니 cat으로 passcode의 c 소스코드를 확인해보았다. (너무 길어서 코드를 긁어왔다.) #include #include void login(){ int passcode1; int passcode2; printf("enter passcode1 .. 2022. 6. 19.
[pwnable.kr] Toddler's Bottle - leg 이번에는 leg 문제를 풀어보았다. 아빠는 arm을 공부하라 하지만 자기는 leg를 공부하고 싶다고 한다. 아래에 있는 명령어를 통해 접속해준다. 접속 완료했다. leg 바이너리 파일을 실행시키고 임의의 값을 입력하니 위와 같이 뜬다. 일단 문제에서 준 c 소스코드를 살펴보았다. #include #include int key1(){ asm("mov r3, pc\n"); } int key2(){ asm( "push{r6}\n" "addr6, pc, $1\n" "bxr6\n" ".code 16\n" "movr3, pc\n" "addr3, $0x4\n" "push{r3}\n" "pop{pc}\n" ".code32\n" "pop{r6}\n" ); } int key3(){ asm("mov r3, lr\n"); }.. 2022. 6. 19.
[pwnable.kr] Toddler's Bottle - cmd2 이번에는 cmd1 문제를 이어 cmd2 문제를 풀어보았다. 대충 system command shell을 샀는데 필터 때문에 갖고 놀지 못한다는 것 같다. 이번에도 필터링 관련한 문제인 것 같다. 문제에 적혀있는 명령어로 접속해준다. 접속 완료했다. 파일 리스트는 이 정도 있다는 것을 확인한 뒤 cat으로 cmd2.c 내용을 살펴보았다. 먼저 main 함수를 살펴보았다. int main(int argc, char* argv[], char** envp){ delete_env(); putenv("PATH=/no_command_execution_until_you_become_a_hacker"); if(filter(argv[1])) return 0; printf("%s\n", argv[1]); system( ar.. 2022. 5. 7.
[pwnable.kr] Toddler's Bottle - cmd1 이번에는 cmd1 문제를 풀어보았다. 문제를 읽어보니 리눅스에서 PATH enviornment가 뭐냐고 묻고 있다. 아마도 이번 문제는 이와 관련한 문제인 것 같다. 아래에 적혀있는 명령어로 접속해준다. 접속 완료했다. 파일 리스트는 이 정도 있다는 것을 확인한 뒤 cmd1.c 파일의 내용을 살펴봤다. 먼저 main 함수를 살펴보았다. int main(int argc, char* argv[], char** envp){ putenv("PATH=/thankyouverymuch"); if(filter(argv[1])) return 0; system( argv[1] ); return 0; } 먼저, 낯선 함수 putenv를 살펴보았다. putenv는 환경변수의 내용을 수정하거나 추가하는데 사용된다. key=va.. 2022. 5. 7.
[pwnable.kr] Toddler's Bottle - bof 이번에는 bof 문제를 풀어보았다. 문제를 읽어보니 버퍼 오버플로우가 가장 흔한 소프트웨어 취약점이라고만 한다. 버퍼 오버플로우와 관련이 있는 문제라는 것만 알고 넘어가자. 문제에 있는 다운로드 링크를 통해, 바이너리와 c파일을 받아준다. 아래에 있는 nc 명령어는 나중에 거기로 접속해서 플래그를 획득하면 되니 일단은 넘어가자. 다운 받은 c파일을 열어 코드를 확인해보았다. #include #include #include void func(int key){ char overflowme[32]; printf("overflow me : "); gets(overflowme);// smash me! if(key == 0xcafebabe){ system("/bin/sh"); } else{ printf("Nah.... 2022. 5. 7.
[pwnable.kr] Toddler's Bottle - input 이번에는 input 문제를 풀어보았다. 그냥 컴퓨터 프로그램에 input을 어떻게 전달할 수 있냐고 물어보고 있다. 별 의미는 없는 것 같다. 아래에 있는 명령어를 통해 접속해준다. 접속 완료했다. 파일 리스트는 이 정도 있다는 것을 확인한 뒤 cat으로 input.c 내용을 살펴보았다. 너무 길어서 캡쳐보다는 코드를 긁어와서 아래에 가져왔다. #include #include #include #include #include int main(int argc, char* argv[], char* envp[]){ printf("Welcome to pwnable.kr\n"); printf("Let's see if you know how to give input to program\n"); printf("Just.. 2022. 5. 5.
[pwnable.kr] Toddler's Bottle - blackjack 이번에는 blackjack 문제를 풀어보았다. 문제를 보니 백만장자가 되면 flag를 주겠다는 것 같다. nc pwnable.kr 9009를 통해 접속해보았다. 이렇게 3가지 메뉴가 뜨는데 백만장자가 되기 위해서는 게임을 해야하니 1을 선택해준다. 1을 선택하면 위와 같은 화면이 뜨는데 어떻게 진행해야 할 지 잘 몰라서 문제에 적혀있는 사이트를 통해 blackjack 게임의 코드를 살펴보기로 했다. 대충 21에 가까운 수를 얻어야 이기는 게임인 것 같은데 cash가 500인 상황에서부터 1000000까지 가려면 굉장히 많은 과정을 거쳐야 하니 무엇인가 꼼수를 부릴만한 것이 있는 지 살펴보았다. 여러가지 함수들과 함게 코드가 굉장히 길었는데 1번 메뉴를 선택시 play() 함수를 실행하는 것으로 보아 일단.. 2021. 12. 5.
[pwnable.kr] Toddler's Bottle - lotto 이번에 풀 문제는 lotto 문제이다. 다른 힌트는 없고 그냥 로또 게임을 만들었다고 한다. 적혀있는 명령어로 접속해준다. 접속 완료했다. 파일 리스트는 이 정도 있다는 것을 확인한 뒤 lotto.c 파일의 내용을 살펴봤다. 일단 main 함수 부분을 먼저 살펴본다. 메뉴를 선택하게끔 되어있다. 1을 입력하면 play(), 2를 입력하면 help(), 3을 입력하면 종료가 된다. help() 내용은 대충 이 게임이 어떻게 진행되는 지 참고하는 용으로만 보고 play() 함수를 자세히 봐보자. 아직 뭔진 모르겠지만 match 값이 6이면 flag를 출력하도록 되어있다. 코드가 기니 play() 함수의 일부분은 따로 잘라서 살펴봤다. read 함수 부분을 살펴보면 첫번째 매개변수에 0이 들어있으므로 표준 입.. 2021. 11. 28.
[pwnable.kr] Toddler's Bottle - mistake 이번에 풀 문제는 mistake 문제이다. 대충 읽어보니 무언가 실수가 있는 것 같은데 힌트가 operator priority라는 걸 보면 연산 우선순위에 관한 실수인 것 같다. 일단 매번 하던 것처럼 pwnable.kr에 접속해서 password인 guest를 입력해준다. 접속에 성공했다. ls -l 명령어를 통해 파일을 살펴보니 저런 파일들이 있는 걸 확인할 수 있다. flag에 접근할 권한이 없으니 먼저 mistake.c 파일을 열어서 내용을 확인해보았다. 쭉 훑어보면 크게 어려운 부분은 없다. 다만, 앞서 언급한대로 연산자 순서에 주목해서 코드를 확인해보니 힌트대로 연산 순서가 애매해보이는 부분이 있다. 위의 두 부분이었는데, 일단 차근차근 살펴보도록 하자. 첫번째 부분을 보면, open 함수의 .. 2021. 11. 21.