일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 시스템 해킹
- load of sqlinjection
- 해킹툴
- CTF
- 해킹
- 스캐닝
- smb
- Samba
- 해킹도구
- 암호해독
- SQLINJECTION
- sql
- 침투테스트
- root권한
- SQL Injection
- web hacking
- 내부침투
- 모의해킹
- Hacking
- 취약점
- Metasploit
- Kioptrix
- 스캔
- Los
- 취약점분석
- 칼리리눅스
- 권한상승
- 메타스플로잇
- 포트스캔
- 취약점 스캔
- Today
- Total
감자 텃밭
[시스템] Memory-leak 메모리 누수 본문
우리가 주로 익스플로잇을 하기위해 "leak"한다. 라는말을 들어봤을 것이다.
우선 Memort-leak 즉 leak라 부르는 행위는
메모리의 주소값을 유출시키는 행위이다.
특정한 메모리의 주소를 유출시킬 수 있으며, 인접한 영역의 메모리도 유출시킬 수 있다.
특정 주소의 실제 메모리주소를 알아내어 원하고자 하는 함수의 주소를 얻기위해 사용되며
보통 실제 주소를 얻었을 경우 해당 주소의 offset을 빼서
libc_base 주소를 구해 해당 libc_base 주소에 원하는 함수의 offset주소를 더해
원하고자 하는 함수의 실제 주소를 얻게 된다.
두 가지의 방법이 존재하며.
1. Buffer Overflow를 이용하여, 변수들 사이의 값을 NULL값을 덮어씌워 인접 메모리를 유출시키는 방법
2. Return-to-Libc 기법을 통해 특정 주소의 값을 유출 시키는 방법.
1번의 방식은 프로그램을 실행시키면 출력함수들은 NULL값을 만날때 까지 출력시킨다.
EX) printf()함수는 null값을 만날때까지 출력
즉 특정 변수의 null값을 다른 값으로 덮어 인접한 메모리의 값 까지 출력시키도록 할 수 있다.
하지만 strcpy, fgets, scanf등의 입력함수는 입력이 종료되면 자동으로 null값을 삽입하기에
read, recv등의 함수를 사용할때 사용한다.
2번은 가장 많이 사용하는 방법이다.
2번을 통해 leak를 사용하는 방법은.
출력함수, ex)write() 함수등을 사용하여 원하는 함수의 got값을 출력시킨다.
아래 사진들은 ROP기법을 통해 메모리를 leak하여 메모리 주소값을 츄울시키는 사진이다.
puts()함수를 이용하여 puts()함수의 got값을 출력시킨다.
그 후 출력시킨 puts함수의 실제주소(got)의 값에서 offset값을 빼 libc_base주소를 구하고
원하는 값의 offset를 더 해 원하는 실제 주소를 얻을 수 있으며,
이렇게 원하고자하는 함수들의 실제 주소를 유출시킬 수 있다.
이렇게 Memory leak는 정말 많은 기법에서 사용되는 방법이다. 정말 유용하고 exploit에 큰 역할을 한다.
참고자료
https://9oat.tistory.com/4
※ 내용이 이상하거나 문제가 있을경우, 또는 설명에 부족한 내용이 있으시면 알려 주시면 감사합니다.
'System > System Theory Information' 카테고리의 다른 글
[시스템] 바인드 쉘[Bind Shell], 리버스 쉘[Reverse Shell] (1) | 2021.12.09 |
---|---|
[시스템] Gadget 가젯 (0) | 2021.11.22 |
[시스템] libc-Database (0) | 2021.11.21 |
[시스템] 리틀 에디안 방식 (0) | 2021.11.20 |
[시스템] PLT 와 GOT [초급] (1) | 2021.11.19 |