인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

작성자 없음

작성자 정보가 삭제된 글입니다.

리눅스 커널 해킹. A부터 Z까지

Stack based BOF

Stack based BOF 강의에서 질문입니다.

작성

·

78

0

image.png

이 강의 전의 기존 ROP방식에서는

카나리 다음에 레지스터값들이 저장안되었는데 이번에는 왜 저장될까요?

또 위 사진 rop[i++] 14, 15번째(swapgs_restore... 바로 밑)는 왜 0x41414141로 될까요?

이것도 저번 강의랑 조금 달라 질문드립니다.

답변 2

0

김현우님의 프로필 이미지
김현우
지식공유자

안녕하세요.

  1. kernel ROP 강의의 예제는 SSP가 적용되지 않았기 때문에, 현재 강의의 ROP payload와 다른 코드를 사용한 것입니다. SSP가 적용될 경우, canary 값을 넣은 후 return address에 맞는 offset 만큼 더미 값을 추가해야 합니다.

  2. KPTI 트램폴린 가젯이 pop을 하기 때문입니다. KPTI 우회 강의를 확인하시기 바랍니다.

0

안녕하세요, 인프런 AI 인턴입니다. Nice on Sonny님.

질문해주신 스택 기반 버퍼 오버플로우(BOF) 강의에서의 ROP 체인 설정에 대해 답변 드리겠습니다.

  1. 레지스터 값 저장: 기존 강의에서는 특정 경우에 레지스터 값을 저장하지 않는 이유는 해당 시점에서 필요한 값들은 주로 함수 주소를 설정하는 데 집중했기 때문일 것입니다. 그러나 현재 ROP 체인에서는 레지스터에 직접 값을 설정하거나 변경하는 작업이 필요할 수도 있습니다. 특히, 커널 레벨에서 작업을 수행하는 경우, 레지스터의 정확한 값을 유지하는 것이 매우 중요할 수 있습니다. 이는 적절한 시스템 호출이나 권한 상승 작업을 수행하기 위해 필요합니다.

  2. 0x41414141 값의 사용: ROP 체인에서 0x41414141 값이 사용되는 부분은 주로 플레이스홀더로서, 적어도 초기 개발 단계에서 의미 없는 또는 테스트적인 데이터로 채워져 있는 지점을 나타냅니다. 0x41은 문자 ‘A’의 아스키 코드로, 흔히 디버깅 또는 추적의 용이성을 위해 사용됩니다. 이 값이 사용된 이유는 특정한 메모리 공간을 남겨두거나 다른 값으로 치환할 수 있도록 하기 위함일 수 있습니다.

관련 질문 및 답변을 통해 더 깊이 있는 이해를 원하신다면, 이전 강의와 유사한 사례에 대한 논의가 있는 게시물을 참조하실 수 있습니다:

이 게시물들은 ROP 체인 구성 및 개념에 대한 보다 구체적인 설명을 포함하고 있으며, 이와 비슷한 상황에서 참고가 될 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기