Uncategorized

Ai cũng có lúc mắc sai lầm #3

Tl;dr: Chiếm quyền admin một trang nội bộ của một mạng xã hội bằng social engineering.


Mình là người rất thích đồ công nghệ, máy tính, màn hình, điện thoại,… các thứ. Nhưng mà sau một thời gian “chạy đua” sắm đồ công nghệ, mình nhận ra mình đang làm chuyện vô nghĩa, tốn tiền vô ích. Một cái điện thoại mới, máy tính mới chỉ làm ta vui vài ngày, rồi lại chán. Đồ công nghệ mạnh thật đấy, nhưng đôi lúc nhu cầu ta không đến mức đó, chỉ cần vừa đủ. Nghĩ được như thế rồi nhưng mình vẫn không bỏ thói quen lướt các trang tin công nghệ khoảng 10-15 phút mỗi ngày, lướt không phải để mua mà chỉ để đọc thêm tin tức, biết thêm nay có chip gì, hãng A có công nghệ gì mới, hãng B có tai nghe gì hay,…

Một ngày đẹp trời, vẫn như thói quen đọc tin tức hàng ngày trên một trang mạng xã hội của Việt Nam, mình bắt gặp một video khá thú vị, video giới thiệu một bộ sản phẩm của hãng L, nghe bảo giá lên tới $5000. Mình cũng đang dùng đồ của hãng này, nên click vào xem review. Xem khoảng chừng gần 02 phút thì mình phát hiện một thứ có vẻ hay ho. Đây là screenshot lúc đó:

Tinh ý thì bạn sẽ thấy anh này đang dùng ứng dụng nhắn tin T ở bên trái, và có vẻ anh ấy dùng Saved messages để take note: gửi file, gửi preview, gửi bookmark link…; còn bên phải là một trang web. URL trong thanh chat khá rõ, nên mình pause video lại rồi gõ URL đó thử vào browser. Đây là giao diện trang web sau khi mình gõ vào và nhấn Enter:

Chắc nhiều người cũng đồng ý với mình rằng bất kỳ việc gì, nếu ta làm đủ nhiều thì ta sẽ hình thành được một cái “sense” nhất định. Mình làm trong ngành này cũng được vài năm, bắt đầu từ việc tò mò về password, nên may mắn có “sense” “đánh hơi” được password khá tốt. Mình đoán cái dòng dưới URL là password, khá chắc chắn.

Nhưng để login được thì còn cần email. Đây là lúc social engineering phát huy tác dụng. Mình theo dõi diễn đàn/mạng xã hội này đủ lâu để có thể biết được quy cách đặt email của họ. Thay vì dùng họ tên thì họ dùng nickname, may mắn là mình cũng theo dõi đủ lâu để biết được nickname của một số admin, moderator. “Thử và sai” – may mắn mình đúng ngay lần đầu thử:

Mình có tìm hiểu sơ qua thì biết được ứng dụng Metabase này là một ứng dụng dạng BI (Business Intelligence), cho phép chia sẻ data và analytics trong tổ chức. Người dùng có thể “Ask a question” – Metabase có một thứ gọi là question builder – dựa trên các câu truy vấn dựng sẵn. Hoặc người dùng cũng có thể tự truy vấn SQL bằng SQL editor. Tài khoản mình vào được, may mắn là tài khoản admin, có quyền cao nhất. Từ đó mình có toàn quyền truy vấn vào cơ sở dữ liệu (nội bộ) của diễn đàn/mạng xã hội này.

Để chứng minh impact thì mình có chụp tấm hình này gửi cho admin của diễn đàn:

Sau khi nhận được report nhanh của mình thì admin cũng nhanh chóng đổi password, rà soát lại server, và tất cả những gì mình nhận được sau khi report là một câu cám ơn:

Nói chung thì mình cũng không đòi hỏi gì cả, mình vẫn report từ thiện như vầy rất nhiều lần, có đôi khi lời cám ơn còn không được nhận. Mình tin là ở hiền gặp lành, cứ làm việc tốt, mình thấy vui là được. Hi vọng có bạn đọc nào đọc được bài này, và cũng bắt đầu “report từ thiện” giống mình – nếu có vô tình thấy được lỗi – để giúp thêm được một cá nhân/tổ chức nào đó tự bảo vệ được mình trong cái thế giới internet càng ngày càng loạn lạc này. Nếu có bug bounty program thì tốt, không thì thôi, gửi cho họ một cái email báo lỗi đàng hoàng, chắc họ cũng không bỏ qua.


Nếu các bạn nghĩ bài viết này có ích thì có thể mời mình một ly cà phê, hoặc tạo thêm động lực viết bài cho mình bằng cách giúp mình duy trì blog qua PayPal hoặc MoMo. Chân thành cám ơn lòng tốt của mọi người.

Happy hacking!

Ai cũng có lúc mắc sai lầm #2

Tl;dr: như tiêu đề =]]]]


Post gần nhất của mình có mấy bạn vô comment bảo là chia sẻ thêm về skill recon. Thực ra mình không giỏi recon cho lắm, mà nói thẳng ra là chẳng giỏi gì cả. Hên hên tìm được mấy lỗi vớ vẩn, có một bài là search GitHub làm hoài rồi viết blog xạo xạo chơi vậy thôi, chứ biết hack biết recon gì đâu.

Hơi lan man tí, từ lúc chuyển qua “làm” developer, mình biết thêm nhiều thứ mà có lẽ nếu chỉ làm consultant/pentester thì mình khó mà có cơ hội biết được. Ví dụ như việc trên đời này có một thứ gọi là Selenium. Công cụ này thì chắc đa số bạn đọc blog mình đang làm việc trong mảng security không biết, còn các bạn developer/tester thì lại rành. Nhắc đến Selenium là nhắc đến automation, vì thường Selenium được sử dụng để automate các thao tác với trình duyệt, giả lập lại các tương tác trên trình duyệt như một người dùng thực sự, từ open link, input data,…. Thử tưởng tượng nhập tay vài trăm cái account hay mở vài nghìn cái link bằng tay, chắc chẳng ai dám đi làm tester. Thay vì manual như vậy, tester viết test script, có Selenium tương tác với trình duyệt hộ, tiện.

Nhưng mà nói chung là trên đời này tool nào cũng vậy, có xịn đến đâu cũng cần có người vận hành. Muốn Selenium chạy được thì cần test script, test script muốn chạy đúng cần có data, data thì do người viết (tester) cung cấp. Mà đã là con người thì ai cũng có lúc mắc sai lầm. Developer hay tester cũng như nhau, cứ push code lên GitHub mà để public thì cũng có ngày bị xiên.

Tìm những thứ này không khó, quan trọng là tìm đúng keyword. Cứ đè hàm sendKeys() của Selenium và field txtPassword hoặc password mà gõ thì thế nào cũng ra.

Thường thường, đa số những kết quả tìm được không có ý nghĩa gì lắm, tuy nhiên cũng có lần mình vào được một dashboard quản lý SMS brandname.

Cá nhân mình nghĩ mấy thể loại tấn công SMS brandname rồi phishing gì đó coi vậy mà hiệu quả phết, bằng chứng là ngày nào lên Facebook cũng thấy có người bị lừa mất tiền, dù ngày nào cũng thấy mấy ngân hàng nhắn tin cảnh báo lừa đảo.


Một sai lầm phổ biến khác của developer là quên không tắt debug, hoặc không tắt các development tools khi release. Lỗi này tưởng chừng đơn giản, nhưng nhiều khi lại dẫn đến những hệ quả cực kỳ nghiêm trọng. Case dưới đây là một ví dụ. Developer không tắt symfony profiler, một development tool cho phép xem nội dung các request. Chỉ cần thêm /_profiler/ vào sau domain là xong (nhớ add vào wordlist nha =]]):

Tất cả những gì attacker cần làm khi đã đến đây rồi chỉ là… chờ đợi. Như trong hình, request login có status 302 kia khả năng cao sẽ có username và password của user/admin. Click vào token tương ứng với request kia để xem:

Rõ ràng, có username và password từ trên trời rơi xuống thế này thì ngu gì mà không login chứ =]]]]

Hay như trường hợp bật debug này (sẵn thêm luôn /debug/ vô wordlist nữa nha =]]):

Ca này còn nguy hiểm hơn, khi attacker có thể bắt được request có chứa các HTTP headers quan trọng, như Authorization hay Token,… và dùng các thông tin có được để có thể truy cập trái phép vào các tài khoản người dùng khác. Thêm nữa, ứng dụng đang dùng Yii 2 version cũ, nghe đâu là có RCE (link), còn có exploit được không thì mình không biết, hihi.


Mình viết blog cho vui, tuỳ hứng lắm, có hứng thì viết, có bug hay thì viết, không có thì thôi, nên không đảm bảo được tần suất ra bài. Mong bạn đọc thông cảm, và nếu có thể thì tiếp thêm động lực cho mình qua PayPal hoặc MoMo cho mình để tăng tần suất ra bài mới nhé =]]]]

Happy hacking!

Ai cũng có lúc mắc sai lầm #1

Để blog lâu quá không có bài mới, thấy cũng kì kì. Thôi nay đang rảnh, cố viết lại một bài ngắn ngắn vậy :))

Gần đây mình không viết được gì nhiều, chủ yếu là do công việc của mình không còn liên quan quá nhiều đến việc tìm lỗi bảo mật trong ứng dụng web như trước nữa. Thay vào đó, mình học lại lập trình, tập code bằng nhiều ngôn ngữ khác nhau (trước đây biết code mỗi Python). Cái gì cũng có cái vui, cái lợi và cái “chưa lợi” của nó. Code nhiều thì lên tay, nhưng phải hi sinh việc update kiến thức mới, lỗi mới, mà không update mấy cái đó thì rõ ràng là không chạy đua công nghệ được với các idol rồi :)) nên là mấy idol có nghía qua bài này hay blog này thì cũng đừng chửi “trình kém mà cứ thích viết tào lao” nhé :))

Đi code mới nhận thấy rằng đôi khi để “xúc” được một hệ thống, một ứng dụng chẳng cần những kỹ thuật gì cao siêu, lắm lúc chỉ cần một sai sót nhỏ xíu là đủ để “lên đường”.

Một trong những sai lầm mà mình thấy rất thường xuyên đó là dev đem source code lên GitHub nhưng để public, ai cũng đọc được. Thường thường mấy pha như vậy chẳng cần đọc code, cứ kiếm file config hoặc mấy file dump sql mà đọc, thế nào cũng có username và password xịn, cầm login thôi, đọc code chi cho mệt.

Một lỗi nữa cũng hay gặp, là dev “tiện tay” bỏ luôn tài liệu hướng dẫn sử dụng hệ thống lên GitHub luôn. Mà file hướng dẫn sử dụng thì thế nào cũng có link demo, username và password sẵn trong file. Có hướng dẫn thì cứ vậy mà dùng thôi, ngại quá :))

Cũng có trường hợp sau khi ngó nghiêng thử code thì nhận ra code có bug :)) SQLi đồ thì hiếm gặp, chứ mấy thể loại như này thì nhiều lắm:

...
$file = $_GET['file'];
$alias = $_GET["alias"];
require "home/controllers/$file.php";
...

Case này thực ra mình không biết cách nào đọc được /etc/passwd blahblah, nhưng, lại là may mắn, mình biết chỗ để đọc được “hướng dẫn sử dụng” =]]

Search những thông tin nhạy cảm này trên GitHub cũng không có gì là khó. Quan trọng là tìm đúng pattern để search, ví dụ đơn giản như “tên tổ chức” + “password”, “tên tổ chức” + “https”,… Nói gì thì nói, human mistake vẫn là cái khó phòng tránh nhất, vì ai mà chẳng mắc lỗi 😀

P/s: Khi mình viết bài này thì Github đã cho dùng private repository free rồi (cho cả team). GitHub cũng có thuật toán để cảnh báo người dùng khi trong source code có chứa những thông tin nhạy cảm luôn. Mong là developers nên tận dụng, lỡ có đưa source code lên thì nhớ để private repository, vậy là đủ, dư sức bảo vệ source code mình khỏi bị nhòm ngó bởi những vị khách không mời 😀

Happy coding, happy hacking!

New blog, new post

Hi, long time no see.

Bài post kỹ thuật gần nhất của mình trên blog cũ đã được gần 2 năm tuổi. Điều đó nghĩa là lâu nay mình chẳng có gì để viết, đúng hơn là không có được một bài chia sẻ nào về chuyên môn, chỉ toàn là chém gió với thị phi. Phần vì lười, phần vì… dốt. Thật hổ thẹn, nhất là khi thấy các đàn em càng ngày càng giỏi, còn mình thì dậm chân tại chỗ, thậm chí còn thụt lùi… Cuộc sống mà, khó khăn đủ đường. Bạn không thể vừa đi làm, vừa làm việc bạn thích, vừa đi làm bug bounty bên ngoài kiếm thêm thu nhập, vừa chơi CTF, vừa có thời gian chơi game, có thời gian đi xem phim với bạn gái,… trong một ngày được. Thế nên, đành phải hy sinh một vài thứ. Mà hy sinh vài thứ thì đồng nghĩa với việc quỹ thời gian được dành ra để viết lách, chia sẻ, vốn đã ít ỏi nay… biến mất luôn.

Mình cũng không rõ blog này là blog thứ bao nhiêu của mình nữa rồi, haha. Hy vọng nó sẽ là cái cuối. Mình sẽ cố gắng duy trì cái blog này lâu nhất có thể. Thêm nữa, blog này mình sẽ viết hoàn toàn bằng tiếng Việt.

Mục tiêu mình làm blog này, như đã nói ở trên, là để chia sẻ kỹ thuật, đặc biệt là các write-up của mình từ khi mình mới bắt đầu làm bug bounty. Thật ra thì trình mình cũng có hạn (nếu không muốn nói là kém), làm bug bounty trước giờ chỉ là cho vui, lấy tí fame, bounty cũng không có nhiều. Mình chưa hề có ý định làm fulltime bug bounty, hay sống bằng nghề này. Tuy nhiên, mình muốn góp một chút ít công sức của mình để các bạn đi sau không bị bỡ ngỡ như mình lúc đầu.

Kinh nghiệm bản thân cho thấy, lúc mới bắt đầu làm bug bounty, đa phần các bạn… không biết làm gì. Target public thì nhiều, nhưng đã bị bao nhiêu researcher khác “quậy” nát rồi. Target private thì không được join, vì profile trắng trơn ai mà mời. Rồi thì, tiền thưởng có bao nhiêu mấy anh trong private program lượm hết, public program đa số chỉ là VDP (Vulnerability Disclosure Program), không có tiền. Làm program không có tiền thì vừa chán, vừa chẳng có động lực gì. Thêm nữa, nhiều khi skill các bạn chưa đủ, cũng không có kinh nghiệm, nên rất dễ bị nản. Nói chứ đến bây giờ mình vẫn còn thấy nản mà :((

Bên cạnh đó, khi làm blog này em cũng mong được sự giúp đỡ của các anh đã có nhiều thành công trong nghề, các anh có những profile bug bounty khủng, đã gặp những case hay… mong các anh, nếu có thể được, thì bằng kinh nghiệm của mình, các anh có thể giúp tụi em phần nào bớt đi được những khó khăn hay sai lầm mà các anh đã gặp, hoặc chia sẻ cho tụi em những kỹ thuật hay, những tips, tricks hữu dụng trong việc pentest hằng ngày hoặc khi làm bug bounty. Rất biết ơn các anh.

Thôi nói vậy đủ rồi, bắt đầu hack dạo thôi!