[pwnable.xyz] TLSv00
Wargame/pwnable.xyz
Transport the flag securely, right?AttachmentBuggenerate_key()에서 s에 random key를 생성한 후 strcpy()로 key에 복사한다.기존의 key보다 1바이트만큼 짧은 key를 생성할 경우, strcpy()로 복사할 때 null terminator에 의해 기존의 key의 마지막 1바이트가 사라지게 된다. 이를 이용하면 key의 길이를 1바이트까지 줄일 수 있다.또한, 0x40바이트짜리 key를 생성할 경우, off-by-one이 발생하여 do_comment의 마지막 1바이트를 null byte로 덮어쓸 수 있다.do_comment에 있는 f_do_comment()의 주소의 마지막 1바이트가 null byte가 되면 real_print_flag()의..
[pwnable.xyz] Free Spirit
Wargame/pwnable.xyz
Free is misbehaving.AttachmentBugStack address leakArbitrary address writemalloc으로 할당받은 메모리에서 0x10바이트를 읽어와서 rsp+8에 있는 v8에 넣는데, 할당받은 메모리의 주소가 rsp+0x10에 있기 때문에 이 주소를 임의의 주소로 덮어쓸 수 있다.이후에 그 주소에 임의의 0x20바이트 값을 쓸 수 있다.Exploitmain()의 return address를 win()의 주소로 덮어쓰면 플래그를 획득할 수 있다.return 전에 free()에서 터지지 않도록 free()에 들어가는 주소에 fake chunk 구조를 만들어 주어야 한다.from pwn import *r = remote("svc.pwnable.xyz", 30005)s..
[pwnable.xyz] two targets
Wargame/pwnable.xyz
Which one would you exploit?AttachmentBug임의의 주소에 임의의 4바이트 값을 쓸 수 있다.Exploit두 가지 방법으로 exploit이 가능하다.auth(s)를 true로 만들어서 win() 호출3. Change age의 AAW를 이용하여 GOT overwrite덜 귀찮아 보이는 두 번째 방법을 선택했다.strncmp()의 GOT를 win()의 주소로 덮고 auth()를 실행하면 strncmp()가 호출되어 플래그를 획득할 수 있다.from pwn import *r = remote("svc.pwnable.xyz", 30031)sla = r.sendlineaftersa = r.sendafterwin = 0x40099Cstrncmp_got = 0x603018sla(b"> ",..
[pwnable.xyz] xor
Wargame/pwnable.xyz
What can you access and what are you going to write?AttachmentBugv6에 음수가 들어갈 수 있어서 result보다 낮은 임의의 주소에 임의의 8바이트 값을 쓸 수 있다.Exploit메모리 맵을 보면 코드 영역에 w 권한이 있는 것을 확인할 수 있다. 즉, runtime에 임의의 코드를 수정할 수 있다. main()에서 exit()을 호출하는 부분의 코드를 수정해서 win()이 대신 호출되도록 하고, scanf()에 문자를 입력해서 반복문을 빠져나오면 플래그를 획득할 수 있다.main+148부터 5바이트가 exit()을 호출하는 코드에 해당한다.기계어로는 e8 63 fd ff ff이다. e8은 call에 해당하고, 뒤의 4바이트는 호출할 함수의 주소를 나타..
[pwnable.xyz] note
Wargame/pwnable.xyz
Note taking 101AttachmentBugedit_note()에서 길이 제한이 없어서 note에 buffer overflow가 발생한다.이를 이용하여 note 뒤쪽의 desc에 임의의 주소를 넣을 수 있다.desc에 넣은 주소에 0x20바이트만큼 임의의 값을 쓸 수 있다.Exploitprintf()의 GOT를 win()의 주소로 덮으면 print_menu() 내부에서 printf()가 호출되어 플래그를 획득할 수 있다.from pwn import *r = remote("svc.pwnable.xyz", 30016)sla = r.sendlineaftersa = r.sendafterwin = 0x40093Cprintf_got = 0x601238sla(b"> ", b"1")sla(b"Note len? ..
h0meb0dy_
'Wargame/pwnable.xyz' 카테고리의 글 목록 (5 Page)