Rank : 94/880
Try harder next time…
Bài này ta thấy trống rỗng không có đường link nào cả nên suy ra giấu trong source gì đó nên chúng ta mở inspect lên coi sao:
Ta có thể thấy nội dung của flag nằm trong attribute của thẻ p
flag:ictf{m4rkdown_parser_fail_1a211b44}
Bài này cho ta 1 form đăng nhập và 1 form đăng kí khi đăng nhập vào thì nó sẽ hiện source như sau:
Có vẻ nếu chúng ta có user_id = 0 thì chúng ta sẽ lấy được flag nhưng file flag.txt truy cập thử xem sao:
Còn 1 cách nữa trong form đăng kí chúng ta có thể set user_id thành 0 đăng kí và lấy flag thôi:
flag:ictf{1ns3cure_direct_object_reference_from_hidden_post_param_i_guess}
Bài này không biết nói sao Chỉ cần đọc code và upload 1 file image theo đúng đề là được :
Ta có câu lệnh python sau:
flag:ictf{7ruly_th3_n3x7_p1c4ss0_753433}
Bài này cho ta 1 trang web random các hình ảnh về cục đá và source code ta có thể truy cập từng bức ảnh bằng cách sau:
Nhìn là ta có thể đoán được ngay nó sẽ dính directory travesal đọc file docker ta sẽ biết file flag.png nằm trong thư mục /:
Vì thế payload của ta sẽ kiểu dạng /?file=../../../../flag.png
Nhưng đoạn code trên đã filter nên chúng ta chỉ còn cách bypass ở đây chúng ta sẽ dùng triple urlencode vì nó đã decode 1 lần trong source và 1 lần ở pt GET rồi:
payload:%25252e%25252e%25252f%25252e%25252e%25252f%25252e%25252e%25252f%25252e%25252e%25252fflag%25252epng
Nhập vào rổi lấy flag thôi:
flag:ictf{tr4nsv3rs1ing_0v3r_r0k5_6a3367}
Bài này cho ta 1 source code và 1 trang web yêu cầu login:
Đọc source ta sẽ thấy nó tạo ra 1 database với bảng user trống rỗng :
Nhưng nếu có row nào trả về được thì ta sẽ lấy được flag:
Vì thế ở đây ta sẽ dùng union để có row trả về:
payload: user = admin , pass = 1" UNION ALL SELECT NULL, NULL,"a
Sau khi nhập vào sẽ có:
Ta chỉ cần đến /flag và lấy cờ thôi:
flag:ictf{sqli_too_powerful_9b36140a}
Bài này cho ta 1 form đăng nhập và đăng kí giống bài trên khi ta login vào sẽ có source code:
Ta thấy điều kiện để lấy flag là user_id là "php" và kiểm tra username của ta có chữ admin ko vì thế khi tạo tài khoản ta tạo là admin1234 gì đó là được.
Còn user_id ta thấy nó được so sánh == nên ta cho nó thành 0 là được bạn nào muốn hiểu thêm thì tìm php type juggling
nhé:
flag:ictf{this_ch4lleng3_creator_1s_really_an_idoriot}
Bài này đề cho ta file binary và file source
Vậy bài này bof cơ bản.
flag:ictf{r3turn_0f_th3_k1ng?}
Bài này cũng cho file binary và file source y chang bài trước.
Lần này đề nói thêm là phải lấy shell. Ở đây khi debug ta nhận thấy rdi tức arguments 1 trỏ vào địa chỉ có thể read-write trước khi ret
-> gọi PTL gets
-> nhập /bin/sh
-> gọi PLT system
Khi chạy code thì ta thấy rằng thay vì thực hiện /bin/sh
mà thực hiện /bin.sh
Ta để ý rằng ord(.) < ord (/)
1 đơn vị. Vậy thì ta thử gửi ord(0)
vì ord(0)-1 = ord(/)
Đổi lại thì ta có được flag.
flag:ictf{ret2libc?_what_libc?}
Bài này cho ta 1 file binary
Dễ dàng nhận thấy có lỗi format string ở hàm printf(format)
Ta thấy rằng trước khi gọi printf
thì trên stack có địa chỉ heap lưu format
chỉ khác địa chỉ lưu flag 1 byte cuối.
Do đó ta overwrite bằng %n
. Nhưng ở đây có lưu ý là gọi từng %c thay vì gọi %6$c
vì nó sẽ update stack trong từng lần gọi %c
thay vì gọi giá trị cũ như %6$c
flag:ictf{ngl_kinda_bored_of_these}