[pwnable.xyz] badayum
Wargame/pwnable.xyz
Let's count words.AttachmentAnalysisgenerate_me()는 strings에 저장된 10개의 문자열들 중 하나를 골라서 이어붙이는 과정을 20번 반복하여 me 문자열을 생성한다. strings에서 가장 짧은 문자열은 3바이트이고 가장 긴 문자열은 8바이트이기 때문에, me는 이론상 최소 60바이트에서 최대 160바이트까지 될 수 있다. me가 너무 길어지면 you에 입력을 받을 때 stack buffer overflow가 발생할 수 있다.ExploitationLeak canaryyou는 rsp+0x10부터 입력을 받기 때문에, me_len이 0x68 이상이면 canary의 null byte까지 채워서 canary를 leak할 수 있다.Leak PIEme_len이 0x77 이..
[pwnable.xyz] password
Wargame/pwnable.xyz
Can you restore the lost password?AttachmentAnalysisbuf의 첫 번째 문자가 null이면 strlen(buf)가 0이 되어 buf[-1]에 0이 들어가게 된다.ExploitationBypass loginlogin()에서 password를 입력받을 때 flag의 마지막 1바이트를 0으로 덮어쓸 수 있다 [1]. flag의 길이가 0x20바이트였다면 덮어쓴 이후에는 0x1f바이트가 되고, 길이가 4의 배수가 아니면 base64로 decode할 수 없기 때문에 b64decode()는 0을 반환한다 [2]. 그러면 b64cmp()의 첫 번째 인자로 0이 들어간다 [3].a1이 0이면 b64cmp()는 0을 반환하는데, login()에서는 올바른 password를 입력했다..
[pwnable.xyz] executioner
Wargame/pwnable.xyz
Let's encode this shellcodeAttachmentAnalysisinpt의 첫 번째 바이트가 null byte이면 strlen()의 return value가 0이 되어 key와 xor되지 않는다.Exploitationex.py
[pwnable.xyz] Punch it
Wargame/pwnable.xyz
Who is the strongest puncher?AttachmentAnalysisbuf에 0x2c바이트가 채워져 있을 경우 score까지 strlen()에 포함되어 buffer overflow가 발생할 수 있다.버그를 발생시키기 위해서는 rand()의 return value를 맞춰야 한다.Saitama를 선택하면 game_t에 1바이트 랜덤 값이 들어가고 이 값이 srand()의 인자로 전달된다. 1바이트는 충분히 브루트포싱이 가능하기 때문에 이후 rand()의 return value들을 모두 예측할 수 있다.Exploitationscore를 한 번 증가시키면 0x01이 되고, BOF를 이용하여 0xff로 덮어쓴 후 다시 두 번 증가시키면 0x0101이 된다. 이 과정을 반복하면 score에 null..
[pwnable.xyz] catalog
Wargame/pwnable.xyz
Another name saving app, so you don't forget it.AttachmentBugwrite_name()에서 c->length를 0x20으로 설정했다가 c->name을 입력받은 후에 다시 strlen(c->name)으로 설정한다. strlen()이 호출되는 시점에 c->name에 0x20바이트가 채워져 있다면 strlen()의 return value는 0x21이 되어 c->length에 0x21이 들어가게 된다.이후에 edit_name()에서 c->length만큼 입력을 받는데 ,c->length가 0x21인 경우 1바이트만큼 buffer overflow가 발생하여 c->length에 0xff 이하의 임의의 값을 넣을 수 있다.ExploitationBOF를 이용하여 c->fun..
h0meb0dy_
'Wargame/pwnable.xyz' 카테고리의 글 목록