bug-bounty

One request, one kill

Một thời gian trước đây mình có đọc được một write-up của anh @ngalog, một cao thủ bug bounty, hay target vào Uber, Gitlab,… Anh ấy nói rằng trung bình một ngày anh ấy đọc khoảng 15 nghìn request để có thể tìm được bug. Nghe mà choáng. Trước giờ số request cao nhất của mình chỉ vào khoảng 3 nghìn, tuy nhiên đã có một số lớn request đến từ detectportal.firefox.com rồi.

Nhưng mà nói đi cũng phải nói lại, đôi lúc để hack một website không cần nhiều request đến vậy. Mình đã gặp ít nhất là 2 cases, mỗi case mình chỉ cần 1 request là đã có thể compromise được server. Tất nhiên đó chỉ là may mắn, bởi vì để có được 2 cases thành công, ai biết được mình đã thất bại trong bao nhiêu case khác? Hì hì, nhưng mà, mình có đọc được ở đâu đó, chắc là trong đống truyện tiên hiệp huyền huyễn, rằng “may mắn cũng là một loại thực lực”. Thôi thì cứ tin như vậy đi, cho cuộc đời nó tươi đẹp, nhỉ 😀

Các case mình chia sẻ dưới đây có thể được phân loại vào dạng “Information Leakage”. Có nhiều loại leakage, và impact của các loại này cũng khác nhau. Có loại thì sẽ dẫn đến compromise cả server, có loại chỉ show ra sensitive information nhưng không ảnh hưởng nhiều đến hệ thống. Tuy nhiên nhìn chung, information leakage là một loại lỗi cần tránh. Hacker hoàn toàn có thể hack cả server, chỉ cần dựa vào những thông tin tưởng chừng như vô hại này.

Một ngày đẹp trời, khoảng gần hai năm trước, trên twitter xuất hiện một tweet khá hay. Uhm, Laravel à. Ngay lập tức mình nhớ đến một website “quen biết” cũng dùng Laravel. Thử một request đến https://thatwebsite.com/.env, kết quả trả về làm mình thật bất ngờ…

Với những credential này, tại thời điểm đó mình có thể login vào một hệ quản trị của server, và chạy được command. Không có gì phức tạp, nhỉ. Đương nhiên, vì không có gì phức tạp nên cũng không có bounty :'(

Case thứ hai là một case bug bounty mình đã gặp cách đây khoảng nửa năm. Khi biết target chạy WordPress thì suy nghĩ đầu tiên trong đầu mình là: thôi RIP rồi, WordPress thì làm ăn gì được đây 🙁 Tuy nhiên lúc đó, không hiểu ma xui quỷ khiến thế nào, mình ngứa tay chọc thử https://domain.com/.git

Mà truy cập vào được folder .git nghĩa là bạn có thể download toàn bộ source code của website, bằng cách dùng hai command dưới đây:

$ wget --mirror -I .git https://domain.com/.git/
$ git checkout -- .

Kết quả là…

Đương nhiên, site chạy WordPress thì mình cũng nên đọc wp-config.php cho đúng quy trình:

Thôi đến đây thì nên submit thôi 😀 Happy hacking!

Test tool và cái kết

Khai trương blog mới bằng một case mình mới gặp gần đây. Case này thì khá là đơn giản (nếu không muốn nói là rất dễ, ai cũng làm được, không hề có kỹ thuật gì cao siêu, rất cơ bản). Mấu chốt để mình có thể tìm được bug này theo mình là “đúng thời điểm”.

Lúc trước viết write-up nhiều, nên được các lãnh đạo ưu ái cho làm writer trên blog tradahacking.vn. May sao số view vừa đủ để được tặng một vé dự Trà đá Hacking #8, vé tận mấy trăm nghìn. Bỏ thì tiếc, mà đi thì không biết đào đâu ra tiền mà đi (nói mọi người không tin, chứ đến tận lúc viết bài trong tài khoản mình còn không tới nổi 100k, đứa nào nói điêu làm :dog: sủa gâu gâu).

Chợt nhớ lại mấy target bug bounty ở VN thời gian trước mình có làm, tầm gần nửa năm về trước. Tại sao lúc đó mình chọn những target VN? Dễ thôi, thứ nhất mình là người Việt, nên những target VN mình sẽ dễ dàng hiểu được flow chương trình hơn; thứ hai mình muốn ủng hộ “hàng Việt”, thay vì để đám hacker nước ngoài phá thì thôi để mình làm cho, ít thiệt hại hơn; thứ ba, tại thời điểm đó mình không/chưa đủ trình làm mấy target trên HackerOne hay Bugcrowd các kiểu. Trên đó tiền bounty toàn mấy anh trong private program lượm hết, còn public thì chỉ có đợi định mệnh gọi tên. Cựu đồng nghiệp của mình RCE còn bị duplicate nữa thì hiểu rồi. Nên thôi, ta về ta tắm ao ta, mặc dù tiền ít, nhưng được một cái là ít người tranh giành hơn, may ra còn sót được vài bug low-hanging fruit cho mình lượm.

Thế là mình bắt tay vào thử tìm bug, với tâm thế là không còn gì để mất. Có bug thì mình book vé đi Hà Nội chơi Trà đá Hacking, không thì đành ở nhà hóng các idol từ xa vậy :((

Bởi vì đây là một target cũ, trong một chương trình public bug bounty, mình đã làm khoảng nửa năm rồi, nên mình sẽ skip qua phần subdomain enumeration, cho đỡ tốn thời gian.

Ơ khoan đã! Nửa năm rồi, làm sao biết được không có subdomain mới?

Tình cờ, hai ngày trước, kênh Telegram The Bug Bounty Hunter suggest một tool tìm subdomain mới, với description rất kêu: “The fastest and cross-platform subdomain enumerator, don’t waste your time“. Thôi thì nhân tiện, thử tool mới xem sao.

Clone về, chmod rồi run thử. Tool chạy khá nhanh, và cho kết quả khá nhiều. Lướt xem thì đúng như dự đoán, có một subdomain mới. Truy cập vào thì thấy một trang trắng trơn. Đúng hơn là có vài option cho chọn, nhưng chẳng có gì xuất hiện, hơn nữa còn đòi quyền access location. Với “bản năng” của một người làm web (=]]]]), mình view source, tìm xem có chỗ nào khả nghi không. Lại tình cờ, hôm trước mình vừa đọc một bài viết của một idol bằng tuổi, bài viết bảo rằng muốn tìm bug low-hanging fruit thì nên chăm nhìn vào các file javascript. Mình thì rất tin các idol, nên mình check /js/script.js. Trời không phụ lòng người, mình thấy một endpoint khá thú vị.

OK, access thử vào endpoint xem. Thật bất ngờ, APP_DEBUG đang bật, và…

Username và password rành rành ra thế kia thì lấy submit thôi chứ đợi gì nữa. Soạn một report cực kỳ tâm huyết, đầy đủ các bước từ lúc subdomain enumeration đến khi leak được username/password, rồi nhấn submit. Tắt máy đi ăn.

Ơ khoan đã! Cứ thế mà submit thì nó lại không hay, vì không có impact gì cụ thể cả. Mình tự hỏi với username và password đó không biết mình còn có thể làm gì được nữa không? Thế là như một thói quen, mình ném cái domain này vào nmap. Còn tại sao cái này được gọi là “thói quen” thì… ahihi.

Đây rồi, port 22 đây rồi. Thử ssh vào bằng username và password trên kia thử, biết đâu bất ngờ. Ơ mà bất ngờ thật…

Tới đây thì còn gì để nói nữa đâu hả những người anh em thiện lành :))

À đâu, còn chứ. Chuyện nó cứ thế mà kết thúc thì có gì là hấp dẫn đâu. Cứ tưởng có tiền bù được tiền vé đi Trà đá Hacking, không ngờ… 

Đời không như là mơ các bạn ạ :((