02.SROP(Sigreturn-oriented programming) - x64
01.SROP(Sigreturn-oriented programming) - x86
SROP(Sigreturn-oriented programming) SROP는 sigreturn 시스템 콜을 이용하여 레지스터에 원하는 값을 저장할 수 있다. 해당 기법을 이용하여 원하는 시스템 함수를 호출할 수 있다. Signal signal은 프로세스에..
racc8n.kr
다음과 같이 프로그램을 실행 후 "Ctrl + C"를 눌러서 Interrupt 신호를 발생시킨다.
다음과 같이 0번째 Frame에서 Stack에 저장된 각 각의 레지스터 값을 확인 할 수 있다.
다음과 같이 1번째 Frame의 내용을 보면 __restore_rt() 함수에서 rt_sigreturn() 시스템 함수를 호출한다.
다음과 같이 signal에 대한 처리가 끝난 후에 Frame 0의 Stack에 저장된 값이 레지스터에 저장된 것을 확인 할 수 있다.
다음과 같이 Overflow를 확인할 수 있다.
Return address - buf 변수의 시작 주소 = 72
즉, 72개 이상의 문자를 입력함으로써 Return address 영역을 덮어 쓸 수 있다.
Exploit 순서
sigreturn()함수를 이용해 레지스터에 필요한 값을 저장
확인해야 할 정보 목록
"/bin/sh"명령가 저장된 영역
Gadgets
int 0x80
다음과 같이 libc 파일에서 필요한 가젯을 찾을 수 있다.
빌드된 x64 파일의 리눅스 커널 버전이 3.3 이하일 경우 아래와 같이 vsyscall 영역에서 "syscall & return" 명령어를 찾을 수 있다.
하지만 해당 Gadget을 이용하여 시스템 함수를 호출하면 Error가 발생한다.
purpose | segment |
Kernel Code | 0x10 |
Kernel Data/Stack | 0x18 |
User Code | 0x33 |
User Data/Stack | 0x2b |
RET : https://www.lazenca.net/display/TEC/02.SROP%28Sigreturn-oriented+programming%29+-+x64
02.SROP(Sigreturn-oriented programming) - x64 - TechNote - Lazenca.0x0
Excuse the ads! We need some help to keep our site up. List SROP(Sigreturn-oriented programming) SROP는 sigreturn 시스템 콜을 이용하여 레지스터에 원하는 값을 저장할 수 있습니다.해당 기법을 이용하여 원하는 시스템
www.lazenca.net
01.SROP(Sigreturn-oriented programming) - x86 (0) | 2020.07.02 |
---|
댓글 영역