Wargame/pwnable.xyz

We did some subtraction, now let's do some addition.Analysis스택에서 임의의 위치에 임의의 8바이트 값을 넣을 수 있다.ExploitPIE가 비활성화되어 있기 때문에 main()의 return address에 win()의 주소를 넣고 return하면 플래그를 획득할 수 있다.while (1)을 탈출하기 위해서는 scanf()의 return value가 3이 아니어야 한다. 이것은 scanf()에 %ld로 받을 수 없는 문자를 입력하면 된다.
Do you know basic math?Analysis _printf_chk(1LL, "1337 input: "); _isoc99_scanf("%u %u", &num1, &num2); if ( num1 num1과 num2를 입력받는다. 이 수들이 두 가지 조건을 만족하면 플래그를 획득할 수 있다.두 수 모두 4918보다 작거나 같아야 한다.두 수의 차가 4919여야 한다.Exploit수학적으로, 주어진 조건들이 성립하려면 최소 하나의 수는 음수여야 한다.mov edx, [rsp+18h+num2]cmp edx, 1336hjle short loc_8C5위의 어셈블리 코드는 num2를 1336과 비교하여, 작거나 같으면 loc_8c5로 점프하는 코드이다. 이때 점프 명령어로 jle..
Are you worthy to continue?Analysis mapped = malloc(0x40000uLL); *mapped = 1LL; _printf_chk(1LL, "Leak: %p\n", mapped);0x40000 크기의 메모리를 동적 할당하여 주소를 mapped에 저장한다. 이 메모리의 첫 바이트에 1을 넣고, 메모리의 주소를 출력해준다. _printf_chk(1LL, "Length of your message: "); size[0] = 0LL; _isoc99_scanf("%lu", size); message = (char *)malloc(size[0]); _printf_chk(1LL, "Enter your message: "); read(0, message, size[0]..
Let's encrypt the seed Mitigation Analysis Stack buffer overflow read_line()은 개행 문자가 들어올 때까지 계속해서 입력을 받는 gets()와 동일한 동작을 합니다. 따라서 BOF가 발생하고 main()의 return address를 덮어쓸 수 있습니다. Exploit Leak address of win() main()에서 do_seed()에 win()의 주소를 인자로 전달하고, do_seed()에서는 인자로 전달된 값에서 1바이트를 뽑아 seed로 사용합니다. 가능한 경우의 수는 0x100가지이기 때문에, 가능한 seed들에 대해 미리 random value들을 준비해 놓으면 encryption 결과를 보고 seed를 역으로 알아낼 수 있습니다..
Door To Other RealmS Mitigation Analysis 1. Choose a door.에서 realm을 door의 값과 같게 맞추면 AAW가 가능합니다. door_의 값을 바꿀 수 있는 유일한 방법입니다. 3. Enter the door.에서 realm이 door의 주소이면 door_의 초깃값인 0을 넣어서 random value를 제거할 수 있지만, 그렇게 하면 door의 값이 0이 되어 2. Open the door.를 사용할 수 없게 됩니다. Exploit door가 아니라 door + 1에 0을 넣어서 random value를 1바이트만 남길 수 있습니다. 남은 1바이트는 brute force로 맞출 수 있습니다. AAW로는 한 번에 4바이트만 쓸 수 있기 때문에 GOT를 한 번..
homeb0dy
'Wargame/pwnable.xyz' 카테고리의 글 목록 (3 Page)