일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- SWEA
- Javascript
- C언어
- 백준
- HTML
- 파이썬
- c++
- hackerrank
- 기계학습
- 숙명여자대학교 정보보안동아리
- 웹페이지 만들기
- CSS
- Sookmyung Information Security Study
- 머신러닝
- 숙명여자대학교 정보보안 동아리
- 풀이
- siss
- 드림핵
- Python
- PHP 웹페이지 만들기
- c
- BOJ
- 생활코딩
- 자료구조 복습
- WarGame
- BOJ Python
- hackctf
- The Loard of BOF
- XSS Game
- lob
- Today
- Total
목록Return to Shellcode (2)
혜랑's STORY
# checksec을 통해 보호기법 및 파일 유형 체크하기 확인해 본 결과 ret2sc는 32 bit 파일이고, 보호기법이 없다. 따라서 앞서 정리한 Return to Shellcode를 사용해 프로그램의 흐름을 변경할 수 있을 것 같다. # IDA를 통해 Pseudo code 확인하기 read(0, &name, 0x32u) : read 함수로 사용자로부터 50 바이트를 입력받는다. gets(&s) : gets() 함수로 s변수에 입력받은 문자열을 저장 -> 길이에 제한 없음. 버퍼오버플로우 취약점 발생 -> name 변수에 shellcode를 저장하고 gets 함수로 payload를 전달해 return address에 name의 주소를 저장하면 RET 명령어로 해당 주소로 리턴하여 쉘코드를 실행할 수 ..
#Return to Shellcode Return to Shellcode란 Return address 영역에 Shellcode가 저장된 주소로 변경해, Shellcode를 호출하는 방식이다. CALL & RET instruction CALL 명령어는 Return address(CALL 명령어 다음 명령어의 위치(주소값))를 Stack에 저장하고, 피연산자 주소로 이동한다. RET 명령어는 POP 명령어를 이용해 RSP 레지스터가 가리키는 Stack영역에 저장된 값을 RIP(EIP)에 저장 후, 해당 주소로 이동한다. -> Stack 영역에 저장된 Return address 값을 변경할 수 있다면 프로그램의 흐름을 변경할 수 있다. 1. Proof of concept 코드를 통해 CALL, RET 명령어에..