본문 바로가기

wargame/pwnable.kr11

[포너블] pwnable.kr 3 - bof pwnable.kr 3 - bof 3번 bof문제이다. #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..\n"); } } int main(int argc, char* argv[]){ func(0xdeadbeef); return 0; } 먼저 코드를 살펴보면 1. func의 gets함수에서 bof공격을 할 수 있다. 2. func 의 호출인자로 주어진 key값을 bof공격을 통해 0xcafebabe 로 덮으면 쉘이 따진다 m.. 2022. 2. 6.
[포너블] pwnable.kr 2 - collision pwnable.kr 2 - collision 20byte 길이의 비밀번호를 맞추는 문제이다 내가 20byte 길이의 문자열을 입력하면 check_password 함수를 거치게 되고 그 반환값이 hashcode(= 0x21DD09EC ) 와 같아야한다 check_password 함수를 보면 문자열이 정수형으로 형변환이 일어난다. 즉 내가 입력한 20byte 길이의 문자열이 정수형으로 바뀌면서 4바이트씩 묶이게 되는것이다 따라서 for문이 의미하는 것은 내가 입력한 passcode를 4바이트씩 묶어서 5번 더하겠다는 뜻이다. 여기까지 정리하면 4바이트씩 5번 더했을때 0x21DD09EC 가 나오는 20byte의 passcode를 입력하면 된다. 계산하면 4번의 0x6c5cec8 와 한번의 0x6c5cecc가.. 2022. 2. 6.
[포너블] pwnable.kr 1 - fd pwnable.kr 1 - fd 문제가 fd 인게 파일 디스크립터를 아는지 묻는 문제인거같다. 쉬우니 대충쓰고 패스 버퍼에 LETMEWIN 문자열을 넣어주면 플래그가 뜬다. read(0,buf,32)를 만들어주기 위해서 fd를 0으로 만들어줘야하므로 0x1234의 10진수 값 4660을 주고 buf에 LETMEWIN을 넣어주면 플래그가 뜸 2022. 2. 6.