[ASCIS 2022] - UP COMMING
Information Gathering
Đối với một challenge bất kỳ nào, thì bước đầu tiên của mình là đi thu thập các thông tin liên quan về nó. Chẳng hạn version program language, hidden path, …
Khi có những thông tin cần thiết, mình bắt đầu detect lỗ hổng của nó và tiến hành khai thác.
Bắt đầu vào challenge này, đập vào mắt mình là một textbox input để nhập địa chỉ email.
Ở form này, mình nhập được địa chỉ email, sigle quote, <script>, ...
tuy nhiên không có bất kỳ response nào có ích ngoài thông báo Form submission successful!
.
Có lẽ mình sẽ bỏ qua việc khai thác từ chỗ input này. Nên mình sẽ đi scan các hidden path bằng công cụ dirsearch
.
Sau khi scan xong, có 3 path mà mình sẽ phải xem qua.
- /about
- /contact
- /file
Với đường dẫn /file
, khi truy cập vào thì trang web yêu cầu một cái file parameter như hình bên dưới.
Thêm file parameter
vào và thêm payload để test lỗi Path Traversal. Và cái kết là có bug Path Traversal.
Tuy nhiên, lỗi này chỉ dừng lại tại đây. Vì không thể khai thác thêm được thông tin nào liên quan tới việc lấy Flag cả :(
Tiếp theo đến đường dẫn /contact
, khi truy cập vào đường dẫn này thì sẽ hiện ra form để điền thông tin mình vào. Với form như này thì maybe có thể là XSS. Tuy nhiên mình đã thử đều không được. Next qua path khác thôi =))
Cuối cùng mình thử với đường dẫn /about
, với đường dẫn này thì mình thấy có chỗ nhập vào keyword để search. Và có một table show data ra ở đó.
Mình nhập vào single quote '
để test SQLi. Và cái kết là xuất hiện lỗi 500. Nghĩa là khi mình inject vào chỗ search này một ký tự '
thì sẽ làm cho Query select trong SQL bị sai syntax thì server sẽ trả về lỗi 500.
Nếu mình nhập vào hai dấu sigle quote ''
thì server sẽ không có lỗi và đồng thời không có data được show ra.
Từ những thông tin nắm được đó, mình kết luận chỗ search này dính lỗi SQLi.
Exploit
Để khai thác được SQLi, thì đầu tiên xem SQL được dùng trong trang web này là loại nào (MySQL, Ms SQL, Oracle, Postgre, SQLite, …).
Dựa vào Syntax của SQL (concat string và commnet), mình confirm trang web này dùng SQLite.
- Xác định số cột của Query trước. Bằng cách dùng
order by <vị trí cột>
.
Nhìn vào bảng data thì mình cũng có thể xác định được 5 cột, tuy nhiên để cho chắc thì mình thử sort vị trí cột thứ 6 thì kết quả là Http Status 500.
1 |
|
Check version của SQL để 100% là SQLite =))
1 |
|
Tiếp theo, mình tìm các table trong database schema. (Trong SQLite thì database schema là sqlite_master
).
Rõ ràng mình có thể thấy table fl4g
trong sqlite_master
.
Nhìn vào Query hình trên, có thể thấy table fl4g có 2 cột id
và flag
.
Cuối cùng là select flag
từ trong table fl4g ra thôi.