# [HTB] breaking grad Writeup ## Giới thiệu ![](https://hackmd.io/_uploads/B1zi-GkC2.png) Đây lại là một bài lab được viết bằng Nodejs, kkkk đúng sở trường của mình again Đầu tiên thì mình vẫn lướt sơ trang web và ngồi mò code để list ra những chỗ mình nghĩ là đáng nghi thôi, thường công đoạn này tốn nhiều thời gian nhất, và khi mình đọc đoạn nào không hiểu thì dùng GPT là lẹ nhất :))))))) pentest chưa bao h là dễ thế ## Mục tiêu và đối tượng 1. Mục tiêu 1. Flag nằm ở trên máy và cần RCE để lấy 2. Đối tượng đáng ngờ 1. Hàm merge trong file ObjectHelper.js vì nó loop qua các property của object mà người dùng đưa vào ⇒ có khả năng PP vì chỉ filter đúng một key \_\_proto\_\_ ![](https://hackmd.io/_uploads/BypobGJRn.png) ## Khai thác Với PP thì sẽ có nhiều hướng khai thác khác nhau, từ Class gốc hoặc từ chính object, ở đây thì minh đi từ object đi lên constructor ([link](https://github.com/carlospolop/hacktricks/blob/master/pentesting-web/deserialization/nodejs-proto-prototype-pollution/README.md#:~:text=There%20are%202%20ways%20to%20abuse%20prototype%20pollution%20to%20poison%20EVERY%20JS%20object.)) Như mình đọc ở trong source code và mò được trên mạng thì thấy có thể khai thác từ hàm fork và execSync của child_process (ảnh dưới sử dụng fork và execSync) (link dưới là cách khai thác) ![](https://hackmd.io/_uploads/SJuh-G1A3.png) ([link prototype pollution hacktricks](https://book.hacktricks.xyz/pentesting-web/deserialization/nodejs-proto-prototype-pollution/prototype-pollution-to-rce#fork-exploitation)) Ở đây mình sẽ thử khai thác từ fork xem ![](https://hackmd.io/_uploads/S17aZGJ0h.png) vì theo như source code mình đọc thì field \_\_proto__ bị chặn nên mình sẽ dùng từ constructor sang prototype, mình sẽ xem kết quả ở endpoint debug ![](https://hackmd.io/_uploads/S1iTWzJR2.png) Vậy là mọi thứ đã xong, FLAG là file đó, nói chung lab này khá dễ vì trên ví dụ của hacktricks cũng đã có dạng code na ná như vậy, chỉ cần đổi sang lách cái proto là được. ![](https://hackmd.io/_uploads/SkGRWMy0h.png)