pwnable
[pwnable.kr][Toddler] blackjack 문제풀이
blackjack 문제를 푸는 시간보다 blackjack 게임에 대해 이해하는게 더 어려웠던 문제....😒 nc로 접속해 보면 위 처럼 보여지는데, 1번을 누르면 게임이 시작되고, 2번은 게임 설명이다. 블랙잭에 대해 몰라서 2번을 눌러 설명을 보기로 했다.(사실 이걸 읽고도 이해하지 못해서 블랙잭을 아는 지인한테 물어봐서 겨우 이해했다... 제대로 이해 했는지는 모르겠지만😂)블랙잭은 나와 딜러 2명이서 진행하는 게임이다.처음 서로 1장씩 가지게 되고 베팅을 하게 된다.그리고 각 라운드마다 'Hit'과 'Stay'중 선택을 할 수있다.각 라운드마다 받은 카드 숫자의 합이 21과 더 가까운 사람이 승리하게 되며, 21을 넘어서면 패배가 된다.그리고 21이 되면 무조건 승리하게 된다.대충 블랙잭은 이렇게 흘..
[pwnable.kr][Toddler] lotto 문제풀이
lotto #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 fd = open("/dev/urandom", O_RDONLY); if(fd==-1){ printf("error. tell admin\n"); exit(-1); } unsigned char lotto[6]; if(read(fd, lotto, 6) != 6){ printf("err..
[pwnable.kr][Toddler] coin1 문제풀이
coin1 문제를 요약하면 동전이 있는데 진짜 동전은 무게가 10이고, 가짜는 9이다.한번 실행되면 랜덤한 동전 개수(N)와 서버에게 물어볼 수 있는 카운트 수(C)가 설정되어 출력된다.만약 '0 1' 이라고 해서 보내면 서버는 첫번째 코인과 두번째 코인의 무게를 합한 값을 대답해준다.하나의 세트에는 1개의 가짜 동전이 존재하고, 동전을 찾으면 다시 새로운 세트가 만들어 지고 또 다시 가짜 동전 1개를 찾아야 한다.이런식으로 총 100개의 가짜 동전을 찾으면 되는데, 문제는 주어진 시간은 60초이다.따라서 자동화코드를 만들어서 찾는 방법 밖에없다. 가짜 동전을 최소한의 질의로 찾는 알고리즘부터 만들어야 한다.예를들어 서버로부터 N=400, C=10이라는 값을 받았다고 가정했을 때,코인을 0~200, 20..
[pwnable.kr][Toddler] shellshock 문제풀이
shellshock shellshock@ubuntu:~$ ls -l total 960 -r-xr-xr-x 1 root shellshock 959120 Oct 12 2014 bash -r--r----- 1 root shellshock_pwn 47 Oct 12 2014 flag -r-xr-sr-x 1 root shellshock_pwn 8547 Oct 12 2014 shellshock -r--r--r-- 1 root root 188 Oct 12 2014 shellshock.c ls로 해서 보면 shellshock과 bash가 존재한다.shellshock.c를 살펴보자. #include int main(){ setresuid(getegid(), getegid(), getegid()); setresgid(get..
[pwnable.kr][Toddler] leg 문제풀이
leg #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"); } int main(){ int key=0; printf("Daddy has very strong arm! : "); scanf("%d", &key); if( (key1()+key2()+key3()) == key ){ printf("Congratz!\n"); int fd = ..
[pwnable.kr][Toddler] input 문제풀이
input #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 give me correct inputs then you will get the flag :)\n"); // argv if(argc != 100) return 0; if(strcmp(argv['A'],"\x00")) return 0; if(strcmp(argv['B'],"\x20\x0a\x0d")) return 0; printf("S..
[pwnable.kr][Toddler] random 문제풀이
Random #include int main(){ unsigned int random; random = rand();// random value! unsigned int key=0; scanf("%d", &key); if( (key ^ random) == 0xdeadbeef ){ printf("Good!\n"); system("/bin/cat flag"); return 0; } printf("Wrong, maybe you should try 2^32 cases.\n"); return 0; } rand 함수로 랜덤값을 가져오고 있다. 하지만 컴퓨터에서 랜덤값은 항상 똑같은 패턴으로 생성된다. 그래서 보통 랜덤값을 사용할 때에는 rand 함수로 나온 값에 현재 시간이나 다른 요소들을 포함하여 생성한다. 이 ..
[pwnable.kr][Toddler] passcode 문제풀이
PASSCODE keyword : GOT Write, fflush #include #include void login(){ int passcode1; int passcode2; printf("enter passcode1 : "); scanf("%d", passcode1); fflush(stdin); // ha! mommy told me that 32bit is vulnerable to bruteforcing :) printf("enter passcode2 : "); scanf("%d", passcode2); printf("checking...\n"); if(passcode1==338150 && passcode2==13371337){ printf("Login OK!\n"); system("/bin/cat ..