[Writeup] WEB ROUND1 MATESCTF2018

CAPTURE THE FLAG LEAGUE
20:50 07/10/2018

Cảnh báo: Bài viết này có văn phong phóng khoáng, có chứa một số từ ngữ teen code, nếu bạn không quen teen code hãy làm quen trước khi đọc, và quay lại sau nhé . 

 

From kzy with love <3

Cuối tuần định về quê bung lụa xong mới phát hiện ra có CTF, thôi thì không ai rủ đi đâu thì mình chơi CTF với team hoy.

Web1: Are you farmer?

Thật ra bài này đầu tiên mình giải theo Unintended solution, chi tiết mình có đề cập phía dưới. Sau khi hết giờ mình bắt đầu đọc bài này và nghiên cứu.

Bước đầu nhìn vào bài web1 là 1 khung đăng nhập, mình thử các password mặc định và một vài payload sql injection đơn giản, è và tìm được admin/1’ or 1=1-- -(captcha khá là khó chịu~~ thử vài chục phát mới vào được). 

Rồi mình chui vào được trang đăng nhập của admin !!!!

rồi sao nữa @@

Tác giả bài này khá có tâm khi nói cho chúng ta biết flag nằm ở đâu? Password admin là flag.

Tới đây thì tiếp tục dùng blind sql để lấy password về thôi.

Nhưng đời không như bài thơ @@. Lúc ban đầu mình thử payload đơn giản đã muốn sảng với trang này luôn, giờ mà blind tay sao nổi !?

Captcha? How to test fast? Không lẽ test bằng tay cào từ từ ????

Thường thì tới đây mình sẽ dùng sqlmap để quét, nhưng có vẻ là không được rồi,

Lúc này mình mới để ý captcha. Nó khá là rõ và có thể sẽ được các thư viện phân tích ảnh đọc được.

Rất may là dạng này mình đã từng có kinh nghiệm xử lý rồi, mình dùng thư viện tesseract của google để đọc captcha. Ai đã từng làm nhận diện chữ số captcha thì ắt hẳn biết thằng này =]]. Các bạn có thể đọc thêm tại: https://github.com/tesseract-ocr/tesseract

Có ý tưởng rồi thì bắt tay vào code thôi

Và mình tìm được:

dbs: web1

table_name: us3r

column: usernam3/password

Tới đây mình mới để ý tác giả có hint column cho chúng ta, phòng khi chúng ta tự làm tay @

Còn 1 bước nữa, có vẻ như BTC chặn không cho select usernam3/password nên bước cuối cùng mình phải chỉnh lại câu query của mình cho password xuống thành điều kiện where và bruteforce theo string.printable

Và rồi mình có flag …

matesctf{ByP4ss_C4ptcha_with_ocr_easy}

Tham khảo cách giải có thể xem tại: https://github.com/kzyo0t/ctf/blob/master/blind.py

Còn 1 cách nữa, btc nói là đây là món quà BTC dành cho ai tìm ra nó. Bài web3 sẽ có 1 đoạn source dính sql injection, và tất nhiên không có captcha, thế thì cào về xem thôi, ồ wth web1 ???

Eazy flag.

Web2: Geo Location Service

Web2 là 1 bài về command injection, nhưng có lọc 1 số ký tự, và rồi mình phát hiện được cấu trúc của đoạn xử lý …..

Nó sẽ lấy dữ liệu từ output ra và in 30 ký tự phía sau chữ Geo Location Service.

Nếu output không có dạng như trên thì sẽ xuất thông báo

còn nếu input gặp ký tự không hợp lệ sẽ xuất ra thông báo.

Ở đây tác giả còn hint cho chúng ta bằng cách nếu nhập ip public đang sử dụng thì sẽ có hàm in ra vị trí flag cho chúng ta

được vị trí của flag rồi , tới đây mình kiếm cách để in flag ra thôi =]], mình tách ra in 2 lần mới hết được flag, vì bài này giới hạn chỉ in được 30 ký tự.

Payload: 115.74.187.200 | echo "GeoIP Country Edition:" $(cat /home/web2/flag.txt)

                  115.74.187.200 | echo "GeoIP Country Edition:" $(rev /home/web2/flag.txt)

Flag:matesctf{Fl4sk_S3ssi0n_is_unsaf3_huh?}

Qua 2 bài web mình làm được, mình đánh giá là các challenge được BTC bố trí các trap + hint khá nhiều và cũng như mỗi bước làm đều cần phải có kinh nghiệm mới làm nhanh được, chứ không phải bỏ payload nào cũng chạy được. Hi vọng sẽ được làm nhiều bài giống vậy nữa !!! 

---Happy hacking <3