# [HTB] Diogenes' Rage Writeup ## Giới thiệu Một lab NodeJS khá hay và đây cũng từng là vấn đề trước đây mình gặp phải lúc đang làm dev. Vì từng ngu một vài lần như vậy nên nói chung là cũng hiểu rõ cơ chế lỗi này, hehe. ![](https://hackmd.io/_uploads/BkVUezJRn.png) Tất nhiên khi bắt tay vào thì cũng phải vọc tính năng và đọc source code thôi. ## Đối tượng và mục tiêu 1. Mục tiêu 1. Nhận được flag khi ta mua được item C8 2. Đối tượng đáng ngờ 1. PP của nunjucks ([link](https://security.snyk.io/vuln/SNYK-JS-NUNJUCKS-1079083)) 2. LOC 27, 55 file index.js trong routes (nghi là lỗi về bất đồng bộ)![](https://hackmd.io/_uploads/B14wlMyCh.png) Còn lại thì mình chưa thấy vấn đề nào khác ## Thực hiện Lượn một vòng với 2a thì không thể dùng được vì file index không nhận bất kì biến nào để render ra. Nên mình sẽ tập trung vào LOC 27 và 55 file index.js. Tại sao lại là 2 LOC này, vì theo kinh nghiệm của mình thì service nào nắm data thì sẽ xử lí logic để tránh trường hợp double spending, nhưng với code này thì SQL là nơi nắm data mà xử lí logic tăng hoặc giảm tiền lại nằm ở NodeJS, vậy nên có khả năng nếu trong lúc bất đồng bộ để chờ SQL xử lí thì phía Node lại coi như logic đúng và gửi request thanh toán tiếp. Vậy nên ta cần bruteforce để kiểm tra về vấn đề này. ![](https://hackmd.io/_uploads/HyeugM1C2.png) đúng như mình thử thì lần bruteforce này mình được 9$, vậy mình đổi cookie mới để tạo acc khác mình cứ thử đi thử lại nhiều lần khác nhau xem để xem có hơn 14$ không ![](https://hackmd.io/_uploads/HJ3Ogf1An.png) Sau n lần thử thì cuối cùng mình cũng thử thành công và bây giờ mua hàng thôi ![](https://hackmd.io/_uploads/BJ8KefyC3.png) Tadaaaaaa