본문 바로가기

Wargame/Pwnable.kr

uaf

반응형

 

 

switch 문의 1번 분기에 bp를 걸고 살펴보면 give_shell (0x401570, 0x401550)이 RAX에, 그리고 힙에 올라와있다.

 

1.use 를 했을 때 0x614c38에는 'Jack' 0x614c88 에는 'Jill' , 0x614c50에는 give_shell(0x401570), 0x614ca0에는 give_shell(0x401550)이 들어간다.

이는 free를 해도 값이 남아있고, 같은 바이트(여기선 4바이트)를 다시 read할 때 똑같은 위치를 덮어쓴다.


 

이후 rax(현재 give_shell 0x401570)에 add 0x8 을 하는데,


 

0x401570 + 0x8 해서 0x401578 은 introduce() 함수다. 결과적으로 switch 구문에서 1을 선택하면 처음 rax(give_shell())에서 +8을 하면 rax(introduce())가 되고 이를 call 한다.

코드상에 virtual void give_shell() 생성 이후 virtual void introduce()를 해주어서 인듯??

 

 

실행 인자값에 4 와 AAAA가 들어간 인풋값을 넣고, 3. free 한 뒤 2. after를 해줘서 인풋값을 할당시키면 원래 0x614ca0을 AAAA가 덮어쓴다.

하지만 0x614c50은 비어있다. free 한 뒤 after 를 두번 해주면 해당 메모리까지 덮어쓰게된다.

 

 

 

1. user 를 하는 경우 give_shell이 있던 자리 +8을 call 하기 때문에 give_shell을 call 하기 위해서는 give_shell이 있던 자리에 give_shell-8을 넣으면된다.

0x401570 - 0x8

 

 

반응형

'Wargame > Pwnable.kr' 카테고리의 다른 글

바이너리 다운로드  (0) 2017.07.12
input  (0) 2015.10.08