[pwnable.xyz] message
Wargame/pwnable.xyz
Leave a message for the admin.AttachmentBugStack BOF in main()Message를 입력받을 때 stack buffer overflow가 발생한다.OOB read in get_choice()idx가 table의 범위 내에 있는지 확인하지 않아서 OOB read가 가능하다.get_choice()의 return value를 출력해 주기 때문에, 스택에서 char의 크기만큼의 범위에 있는 1바이트 값을 leak할 수 있다.ExploitationOOB read를 이용하여 canary와 PIE base를 leak한 후, stack BOF를 이용하여 main()의 return address를 win()의 주소로 덮으면 플래그를 획득할 수 있다.ex.py
[pwnable.xyz] UAF
Wargame/pwnable.xyz
Is it time for a UAF challenge yet?AttachmentBugstrchrnul()은 문자열에 찾으려는 문자가 없으면 문자열의 끝 주소를 반환한다. 따라서 cur->name에 old_char가 포함되어 있지 않으면 cur->name의 끝에 new_char를 이어붙일 수 있다.ExploitationOff-by-one을 이용하여 name을 play_game 포인터까지 연장할 수 있다.이후에 play_game에 저장된 calc()의 주소를 win()의 주소로 덮어쓰면 플래그를 획득할 수 있다.ex.py
[pwnable.xyz] iape
Wargame/pwnable.xyz
Shake off the pwn and let's do some programmingAttachmentThe Bugappend()에 길이 검사가 존재하지 않아 stack buffer overflow가 발생한다.Exploitmain()의 return address를 win()의 주소로 덮어쓰면 플래그를 획득할 수 있다.Generate random valuessetup()에서 time(0) (현재 시각)을 random seed로 설정한다. 이 값은 재현할 수 있기 때문에, append()에서 랜덤으로 주는 길이들을 미리 계산해놓을 수 있다.Leak PIEappend()에서 read()로 rbp-0x20부터 입력을 받는데, rbp-0x18에 read_int32+64의 주소가 저장되어 있다. read_int32..
[pwnable.xyz] strcat
Wargame/pwnable.xyz
Who needs a name extending service? That's probably vulnerable.AttachmentThe Bugmain()에서 format string bug가 연속으로 두 번 발생한다.Exploitmain()의 rsp에 rsp+0xf0의 값이 저장되어 있다. 첫 번째 FSB로 이 위치에 임의의 주소를 쓰고, 두 번째 FSB로 그 주소에 임의의 값을 쓸 수 있다.putchar()의 GOT를 win()의 주소로 덮어쓰면 플래그를 획득할 수 있다.desc의 중간에 null terminator가 삽입되지 않도록 name의 길이를 충분히 길게 설정해야 한다.from pwn import *r = remote("svc.pwnable.xyz", 30013)sla = r.sendline..
[pwnable.xyz] J-U-M-P
Wargame/pwnable.xyz
Jump aroundAttachmentThe Bugread_int8()에서 1바이트만큼 overflow가 발생한다. 이를 이용하여 main()의 rbp의 하위 1바이트를 임의의 값으로 조작할 수 있다.read_int8()의 return value는 rbp+0x11에 저장된다. rbp를 조작할 수 있기 때문에 결과적으로 main()의 스택 프레임에서 임의의 1바이트를 임의의 값으로 조작할 수 있다.Exploit원래 점프할 주소는 main+22인데, 마지막 1바이트를 0x77로 조작하면 win()으로 점프할 수 있다.from pwn import *r = remote("svc.pwnable.xyz", 30012)sla = r.sendlineaftersa = r.sendafter# get stack addres..
h0meb0dy_
'Wargame/pwnable.xyz' 카테고리의 글 목록 (3 Page)