LordGPT
Last updated
Last updated
Bài này cho mình một URL và 3 hint được publish lần lượt trong thời gian diễn ra giải
Khi truy cập URL ta được một trang web như sau
Tính năng duy nhất mà ta có thể sử dụng bây giờ là login với tài khoản Microsoft, tuy nhiên khi thử login với tài khoản bất kỳ mình được thông báo lỗi
Từ đây ta có được 2 thông tin
Với "tenant" là dãy GUID đó thì ta không thể login
Web có dùng đến Azure AD
Vậy thay vì để là một dãy GUID ta chỉ cần thay thành common
là có thể login vào :vvvvv
Khi đăng nhập được thì cũng chỉ là giao diện hỏi chatGPT thông thường, mình thử fuzz các kiểu nhưng không có kết quả gì mà chỉ biết được:
Khi hỏi con chatGPT về hint nó bảo You must be Admin to ask any secret question :)))
Ta có thể truy cập và xem profile bằng một dãy ID
Xem đến hint thứ 2 từ challage, khi hỏi What's algorithm using to generate id?
câu trả lời ta nhận được sẽ là SnowFlake
Ta thấy chỉ có phần timestamp là sẽ linh hoạt thay đổi, vậy thì ý tưởng của mình là brute force timestamp để tìm ID của admin và xem thông tin
Đầu tiên mình cần extract Machine ID
và Machine Sequence Number
Từ ID của bản thân, mình lấy được Machine ID = 37
và Sequence Number = 000000000000
Từ đây mình có đoạn script sau để brute ID
Mình biết ngay điểm mình sai, phần MachineID
được tạo thành từ WorkerID
và NodeID
, thông thường sẽ có nhiều Worker và trong mỗi Worker sẽ có nhiều Node để gen ID. Vì thế không chỉ có một giá trị MachineID cố định. Do ở trên mình chỉ lấy 1 giá trị MachineID
để brute nên không thể nào chính xác được
Mình biết được khi đăng nhập thành công, mỗi lần reload trang index thì giá trị initialSeedData
trong trang thay đổi, giá trì này cũng chính là ID gen ra từ các MachineID
, lợi dụng điều này mình biết được tập giá trị MachineID
là [13,37,133,337]
Từ đây mình sửa script thành (để tiết kiệm thời gian thì mình xem wu luôn giá trị timestamp chính xác là lúc nào)
Kết quả cho ra ID của admin là 1738915834099159040
Bài blog đã có giải thích chi tiết về nOAuth, kiểu tấn công này xảy ra khi ta lợi dụng cơ chế OAuth của Microsoft, cộng thêm việc trang web khi implement OAuth sử dụng claim là untrusted data. Từ đó attacker có thể takeover account.
Cụ thể nếu như trang web dùng Azure AD để authen và dùng email làm claim để identify user, attacker với account là attacker@outlook.com
có thể đổi thông tin email trong tài khoản AzureAD thành victim@outlook.com
, khi đó khi đăng nhập vào với mail là attacker@outlook.com
, nhưng ứng dụng khi kiểm tra mail để identify thì lại ra kết quả là victim@outlook.com
. Từ đó attacker take over được victim account
Tuy nhiên còn một điều kiện nữa để viễn cảnh trên xảy ra, đó là trang web có thể merge account từ những vendor khác như Facebook, Google. Hoặc điều kiện thứ 2 là trang web chỉ OAuth qua Microsoft, trong ngữ cảnh của challage thì trường hợp 2 xảy ra, do đó khả thi để exploit nOAuth
Để exploit mình sẽ tạo một account AzureAD và chỉnh mail ở phần contacts information thành mail admin
Lúc này chỉ cần đăng nhập với User principal name
của mình
Flag:
Xem hint đầu tiên của bài, dẫn ta đến đường link . Khi đọc và nghiên cứu thì mình phát hiện dãy số tenant có thể được set 4 kiểu loại giá trị như sau
Snowflake ID là một format ID được tạo và dùng bởi Twitter (), format ID này gồm 3 phần như sau
Tuy nhiên brute mãi không ra, có lẽ mình đã bỏ xót gì đó. Vì quá bất lực nên mình tham khảo wu
Sau khi biết được Email của admin, ta sẽ nhìn qua hint thứ 3 của chall là nOAuth
. Search gg về từ khóa này thì ngay từ link đầu tiên đã cho mình một bài blog chi tiết về cách exploit nOAuth ()