일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 메타스플로잇
- CTF
- 스캔
- 침투테스트
- 시스템 해킹
- web hacking
- 해킹
- smb
- 칼리리눅스
- 해킹툴
- 취약점분석
- SQLINJECTION
- 취약점
- Samba
- SQL Injection
- Hacking
- 포트스캔
- 해킹도구
- 암호해독
- 권한상승
- root권한
- 스캐닝
- 모의해킹
- 취약점 스캔
- load of sqlinjection
- Metasploit
- sql
- Los
- Kioptrix
- 내부침투
- Today
- Total
감자 텃밭
[시스템] Return-to-Shellcode 본문
Return-to-Shellcode 기법은
프로그램이 종료되면 돌아갈 주소가 담긴 RET 영역에 Shell Code가 저장된 주소값을 악의적으로
저장하게하여 프로그램이 종료 되면 RET가 정상적으로 돌아갈 위치로 이동하는 것이 아닌
Shell Code가 저장되 주소로 이동하게 되는방식이다.
해당 기법을 이해하기 위해서는 함수 에필로그 과정을 이해하고 있어야 한다.
에필로그 과정 즉 RET 과정에서 우리는 프로그램의 흐름을 제어할 수 있게 된다.
예를 들어 특정 버퍼의 크기가 64Byte일 경우 해당 버퍼에 NOP명령어("\90")등의 더미값과 쉘코드를 넣어둔다
그 후 입력함수에서 Buffer Overflow가 일어나게 되면 RET영역까지 접근할 수 있을것이다.
RET영역까지 접근했을 경우 RET영역에 해당 쉘코드를 저장한 버퍼의 주소를 악의적으로 저장하게된다
그럼 해당 프로그램이 종료되게 되면 RET 영역에 존재하는 주소를 참조하여
쉘코드가 저장되어있는 버퍼의 위치로 이동하게 될 것이며, 쉘코드를 만나게 되면 쉘코드가 실행되게 된다.
위 사진과 같이 RET에는 프로그램이 종료되면 돌아갈 주소가 정상적으로 저장되어 있다
하지만 Shell Code가 저장되어 있는 영역으로 악의적으로 변경하게되면 아래의 사진과 같은 형태가 된다.
이런식으로 동작하게 된다.
간단한 원리는 위와 같으며 해당 기법을 이해하기 위해서는 Memory권한에 대한 어느정도의 이해가 필요하다.
권한에 대한 간단한 설명은 아래와 같다.
- read (r) : 메모리 영역의 값을 읽을 수 있음
- write (w) : 메모리 영역에 값을 저장할 수 있음
- exute (x) : 메모리 영역에서 코드를 실행 할 수 있음.
해당 기법의 경우 메모리 보호기법 중 하나인 DEP보호기법이 걸려있게 되면 메모리 영역에서
실행권한을 잃게된다. 즉 해당 기법을 사용하기 위해서는 exute (x) 권한이 있는 영역에 Shell Code가 저장되어 있거나,
해당 기법이 적용되어 있지 않아야 사용할 수 있다.
해당 기법이 ASLR이 걸려 있을 경우 더미값을 사용한 NOP sled기법과 함께 사용할 수 있다.
참고 자료
https://www.lazenca.net/display/TEC/02.Return+to+Shellcode
※ 내용이 이상하거나 문제가 있을경우, 또는 설명에 부족한 내용이 있으시면 알려 주시면 감사합니다.
'System > System Hacking Techniques' 카테고리의 다른 글
[시스템] GOT Overwrite (2) | 2021.11.22 |
---|---|
[시스템] RTL-Chaining (0) | 2021.11.21 |
[시스템] Return-to-Libc (RTL) (0) | 2021.11.20 |
[시스템] NOP sled 기법 (0) | 2021.11.20 |
Return-to-csu 기법 정리 (5) | 2021.11.15 |