[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.

Email input

Ở 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!.

Notificatioin

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.

Hidden Path

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.

File parameter require

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.

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 =))

No Bug Here

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 ở đó.

/about

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.

500 Error

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.

200 OK

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.

Select 5 cột

1
/about?search=xxx' order by 6--

500 Error

Check version của SQL để 100% là SQLite =))

1
/about?search=xxx' union select sqlite_version,2,3,4,5--

SQLite Version

Tiếp theo, mình tìm các table trong database schema. (Trong SQLite thì database schemasqlite_master).

Rõ ràng mình có thể thấy table fl4g trong sqlite_master.

Table fl4g

SQL

Nhìn vào Query hình trên, có thể thấy table fl4g có 2 cột idflag.

Cuối cùng là select flag từ trong table fl4g ra thôi.

Flag

References

  1. https://github.com/dovankha/PayloadsAllTheThings/blob/master/SQL%20Injection/SQLite%20Injection.md
  2. https://portswigger.net/web-security/sql-injection/cheat-sheet

[ASCIS 2022] - UP COMMING
https://dovankha.github.io/2022/10/17/upcomming/
Author
Khado
Posted on
October 17, 2022
Licensed under