환경

Untitled

(가상머신 부팅 스크립트)

//소스코드 컴파일
gcc exploit2.c -o ./exploit2 -lmnl -lnftnl

데이터 분석 과정

Untitled

Untitled

nft_osf_eval 함수에 break point를 걸고 관찰합니다.

Untitled

data leak이 일어나는 sprintf 에서의 디버깅 결과입니다. 초기화되지 않은 data 구조체 변수의 .genre , .version 필드에는 각각 0xffffc90000003b80, 0xffff888006c5d6c8 주소가 들어있고, %s:%s 포멧 스트링에 의해 leak되는 값은 이 주소 안의 값이라는 것을 알 수 있습니다.

Untitled

0xffffc90000003b80 을 보았을 때 0xffffc90000003ba0 주소에 커널 스택 주소, 0xffffc90000003ba8 에 커널 코드 주소가 들어있으므로 각각 SFP, RET임을 예상할 수 있습니다.

Untitled

Untitled

이 함수는 check_preempt_curr 을 호출하고 0xffffc90000003b90 주소에 check_preempt_curr + 55 영역의 주소가 있는 것으로 보아

Untitled

Untitled

0xffffc90000003b80 에 들어있는 값은 함수 resched_curr 의 stack frame안의 값이라는 것을 알 수 있습니다.