November 2019

Cú lừa

Cuộc sống đâu lường trước điều gì… Lại tiếp tục chuỗi ngày ngồi cafe tìm bug dạo thôi các bạn ạ… Bug càng ngày càng khó kiếm, cuộc sống thì khó khăn, ngày xưa còn uống cafe size lớn giờ chuyển xuống uống size vừa… hic…

Hôm trước vừa giới thiệu case exposed folder /.git/, dẫn đến việc lộ source code (bạn nào chưa đọc thì có thể đọc ở đây) xong, thì sau đó một thời gian ngắn, mình lại gặp lại một case tương tự. Tuy nhiên, lần này hơi khác, khi mình check đến folder /.git/ của website thì thấy status code 403 – Forbidden.

Kiểu này là có thanh niên nào nhanh tay report mất rồi. Thường thì “gặp 403 ta cho qua”, tuy nhiên trong trường hợp này thì không nên. Bởi vì rất nhiều sysadmin không biết fix lỗi này hoặc fix không triệt để, dẫn đến việc mặc dù bị forbidden nhưng mình vẫn có thể khai thác bằng cách truy cập thẳng vào /index hoặc /config như hình:

Đọc được file index có nghĩa là mình hoàn toàn có thể đọc được source code, đơn giản chỉ cần ném vào gitdumper.

Trường hợp ngon lành, download được source về thì kiếm file nào có sensitive information mà đọc thôi, ví dụ như:

Leak được info này thực ra cũng không làm được gì nhiều, vì IP internal…

Nhưng mà cuộc đời đâu phải chỉ toàn màu hồng… Có những trường hợp không download được, có thể là do folder /.git/ này đã cũ, có download về được thì cũng chỉ được vài file code cũ hoặc file rác. À nói rác vậy thôi chứ cũng không đến nỗi rác lắm… mấy ông sysadmin hay có kiểu fix thôi chứ không đổi password đâu, biết đâu còn ăn may được…

Nhìn cái kiểu đặt password kia thì khả năng cao là password này dùng chung rồi. Cầm đi login thử, không ngờ vào được admin thật…

Mà với WordPress, đã vào được admin thì nghĩa là đã có RCE…

Thật không may, dưới quyền nginx không chỉ có mỗi WordPress mà còn chạy nhiều thứ khác với kha khá critical info… ls một cái rồi viết report cho nhanh, mất công lại duplicate thì khổ.

Hihi, nói RCE nghe đao to búa lớn vậy thôi chứ thực ra root cause vẫn chỉ là weak/reused password. Mà kệ chứ, cứ có bug là đời đỡ buồn hơn một tí rồi. Mai mạnh dạn gọi ly cafe size lớn, happy hacking!

Lạy ông tôi ở bụi này

Mấy hôm nay rảnh rỗi, lại đang bế tắc với mấy program có offer bounty, nên thôi mình nghỉ xả hơi bằng cách chuyển qua tìm bug ở các VDP – Vulnerability Disclosure Program, đúng chuẩn report vì cộng đồng.

Những program VDP thì thường scope không giới hạn, nghĩa là thoải mái tìm subdomain của *.vdp-program.com. Ném vào tool findomain đã giới thiệu từ những post đầu tiên (à nó vừa update version mới thì phải), mình có một danh sách các subdomain. Lần lượt thử các subdomain đã tìm được thì mình tìm thấy một site X.

View-source site X thì thấy có một file js. Haizz, đã lười rồi còn bắt đọc source js, lại còn pack lung tung :'(

Thôi lỡ rồi, Command + F tìm vài keyword như https://, api/, url:,… cho vui, biết đâu có gì hay :no-hope:

Tìm một lúc thì mình thấy có khoảng 3-4 link gọi API, thử truy cập vào một link thì thật bất ngờ…

Ôi lộ cả email/password ra thế này thì… Ơ mà password nhìn thế kia thì kiểu gì cũng encrypted rồi, làm ăn gì được đâu. Đem đi login thử thì y như rằng, tạch. Dễ ăn vậy thì chơi làm gì nữa.

Đến lúc này thì mình nghĩ ra hai cách tấn công. Cách thứ nhất, có salt và password encrypted kia rồi, nhìn thì có vẻ là dùng AES, giờ bằng cách nào đó, có thể là dùng sai crypto, hoặc key yếu,… tìm ra được key rồi decrypt cái password kia ra là xong. Cách này lúc đầu mới nghe thì có vẻ hay, nhưng thực tế… không khả thi. Cách thứ hai là… vứt nó đi, tìm đường khác dễ hơn =]]]]

Tiếp tục thử thêm mấy link gọi API còn lại, lần này thì có vẻ hay ho hơn:

Không hiểu nổi mấy anh dev, mắc cái gì mà để cái resetPasswordToken ở đó không biết nữa, đã vậy lại còn account admin… Phần việc còn lại bây giờ là đi tìm cái link reset password rồi dùng cái token này quất thôi.

Đến đây lại có ba cách tiếp cận. Một là register một cái account, rồi reset password để gởi link về email của mình, thay token bằng token admin. Tuy nhiên tìm mãi mà không thấy nút Register/Sign up ở đâu cả :'( chắc là hệ thống nội bộ nên không cho đăng ký. Hai là fuzz cái URL reset password. Ba là tiếp tục đọc source js để tìm cái link, hoặc ít ra là cái cấu trúc của link reset password. Lỡ đi đường khó rồi thì thôi, chơi tới, mình chọn cách thứ ba. Đọc code một lúc thì thấy code đoạn reset password như thế này:

Ok, đã đầy đủ mọi thông tin cần thiết. Tóm lại, bây giờ những gì cần làm để takeover account admin là:

  • Vào link login, click vào reset password, nhập vào email admin.
  • Check link gọi API lúc nãy để lấy resetPasswordToken của admin.
  • Thực hiện request dưới đây để đổi password:
  • Login vào confirm.

  • Submit report, và không quên trân trọng cám ơn các anh developer đã tài trợ bug này =]]]]

Happy hacking!