🧬NumberMakeup

Medium

Overview

Đánh giá qua bài này thì yêu cầu chính làm sao để chèn được code JS vào đây hay có thể nói là khác thác được XSS ở trang này.

Nhìn qua thì có chỗ product ở đây chúng ta có thể điền các số bất kỳ và chọn các style CSS mà mình muốn trang.

Chú ý rằng 123 của chúng ta nằm ở trong lệnh document.write

document.write() là một phương thức của đối tượng document trong JavaScript, được sử dụng để viết nội dung vào tài liệu HTML hiện tại.

Phương thức này cho phép thêm nội dung vào trong trang web một cách động, trong quá trình tải hoặc sau khi tải trang. Khi được gọi, document.write() sẽ thêm nội dung được cung cấp vào vị trí mà phương thức được gọi, và thay thế hoặc xóa bỏ nội dung hiện tại nếu có.

Thêm một điều nữa là trang này chỉ cho điền chữ số và một vài ký tự, không cho điền chữ nếu có chữ cái thì sẽ bị block ngay.

Exploit

Ở đây chúng ta sẽ dùng một cách nào đó để có thể exploit được code JS trong này, như đã nói ở trên thì document.write() nó chỉ thêm văn bản, khi đó cần phải gọi một hàm nào đó để có thể Eval code JS

Sau một lúc research thì mình tìm được đoạn code: globalEval().

Trong JavaScript, $ là cách để gọi một hàm nằm trong một mảng hoặc đối tượng. Khi đó chúng sẽ sẽ Eval code như sau:

$['globalEval']('alert(1)') -> exploit thành công, mình sẽ giải thích tại sao nó lại hoạt động:

Trong đoạn mã $['globalEval']('alert(1)'), chúng ta sử dụng ký hiệu [] để truy cập vào phương thức globalEval của đối tượng window (hoặc global nếu đang sử dụng Node.js), tương đương với việc ghi window.globalEval('alert(1)'). Sau đó, chúng ta truyền chuỗi mã JavaScript "alert(1)" vào phương thức globalEval để thực thi mã đó trong phạm vi toàn cục

Bây giờ bypass thì sẽ chuyển globalEvalalert(1) thành Octal. Thêm '|| ở đầu và cuối chuối payload nhằm mục đích đóng chuỗi '' và yêu cầu nó write chuỗi trống '' hoặc đoạn code trên.

'||$'\147\154\157\142\141\154\105\166\141\154'||' -> payload

Done

Last updated