728x90
충족될 점
- Libc Base 주소를 미리 구한 상태
- 임의의 주소를 leak 할 수 있어야 함.
libc에는 environ이란 symbol이 있다.
이 symbol은 메인 함수의 세번째 인자인 char **envp와 같은 가치를 가지고 있다.
char **envp의 가치는 스택에 있고, 따라서 우리는 스택 주소를 구할 수 있다.
(gdb) list 1
1 #include <stdlib.h>
2 #include <stdio.h>
3
4 extern char **environ;
5
6 int main(int argc, char **argv, char **envp)
7 {
8 return 0;
9 }
(gdb) x/gx 0x7ffff7a0e000 + 0x3c5f38
0x7ffff7dd3f38 <environ>: 0x00007fffffffe230
(gdb) p/x (char **)envp
$12 = 0x7fffffffe230
(gdb) x/gx $rsp
0x7fffffffe140
(gdb) p 0x7fffffffe230 - 0x7fffffffe140
$13 = 0xf0
- 0x7ffff7a0e000은 현재 libc base 주소
- 0x3c5f38은 envrion의 offset
- envrion의 주소는 0x7fffffffe230
- stack의 주소는 0x7fffffffe140
- envrion 주소 - stack의 주소 = 0xf0
이를 통해서 알 수 있는 점은
envrion 주소와 stack의 주소는 0xf0 차이가 나므로,
stack의 주소를 알고 싶다면, envrion addr - 0xf0 = stack addr으로 알 수 있다.
'SYSTEM HACKING > 기법' 카테고리의 다른 글
About Heap(2) (0) | 2021.12.28 |
---|---|
About Heap(1) (0) | 2021.12.25 |
Windows Universal Shellcode - 이론 (1) | 2021.04.02 |
Return to Csu (0) | 2020.04.26 |
[How2Heap] House of Force (0) | 2018.03.08 |