728x90
반응형
what is environ
main 함수의 인자는 사실 3가지가 있다.int main(int argc, char **argv, char **envp);
argc – 명령행 인자 개수
argv – 명령행 인자 벡터
envp – 환경 변수 목록
인데 C 언어에서는 envnviron 이라는 전역변수가 미리 만들어져 있다.
#include <stdio.h>
extern char ** environ;
int main(){
int i = 0;
printf("environ list\n");
for(i = 0; environ[i]; i++){
printf("<%2d>: %s\n", i, environ[i]);
}
return 0;
}
그래서 아래처럼 extern 으로 environ 을 불러와서 출력해보면
이렇게 환경변수들이 모두 출력되는 것을 알 수 있다.
아무 바이너리나 켜서 __environ 을 보면
주소가 있고 그 주소를 보면 환경변수가 들어가 있음을 알 수 있다.
위에서 구한 __environ 주소를 보면 스택의 주소임을 알 수 있다.
따라서 __environ 를 알아내고 그걸 leak 하면 스택 주소가 leak 된다.
이 글은 옵시디언을 이용해서 작성되었습니다.
728x90
반응형
'TOOR' 카테고리의 다른 글
[TOOR] 19.1 Stack Pivot (0) | 2023.12.06 |
---|---|
[TOOR] 24.2 cpp_smart_pointer_1 write up (0) | 2023.11.17 |
[TOOR] 24.1. UAF (0) | 2023.11.17 |
[TOOR] 23. Heap chunk 구조 (2) | 2023.10.17 |
[TOOR] 22. FSOP (2) | 2023.10.17 |