> For the complete documentation index, see [llms.txt](https://shangs.gitbook.io/shine/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://shangs.gitbook.io/shine/write-up-ctf/tsug0d-mawc/numbermakeup.md).

# NumberMakeup

Medium

<figure><img src="https://893723753-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCEugX4l1Pmpz8WohSnTR%2Fuploads%2FtQOb7uzknAGo65BM2BKA%2Fimage.png?alt=media&amp;token=743328d7-81e0-4fab-a752-ca942ea6d95f" alt=""><figcaption></figcaption></figure>

## 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.

<figure><img src="https://893723753-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCEugX4l1Pmpz8WohSnTR%2Fuploads%2F2DqTJYXOXagoGSFAemwB%2Fimage.png?alt=media&amp;token=ffe8fe41-90de-46aa-9456-f3649f4d168c" alt=""><figcaption></figcaption></figure>

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.

<figure><img src="https://893723753-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCEugX4l1Pmpz8WohSnTR%2Fuploads%2FWeECSSXd8zjhkwn8rcxR%2Fimage.png?alt=media&amp;token=ae68fbbd-6579-40fd-b84b-b9f677fdf790" alt=""><figcaption></figcaption></figure>

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.

<figure><img src="https://893723753-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCEugX4l1Pmpz8WohSnTR%2Fuploads%2F2TnLoTRANJU75wr9QOwl%2Fimage.png?alt=media&amp;token=9ec838d7-0dfb-4514-b5a2-e8519c8ae136" alt=""><figcaption></figcaption></figure>

## 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()`.&#x20;

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:&#x20;

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

{% hint style="info" %}
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
{% endhint %}

Bây giờ bypass thì sẽ chuyển `globalEval` và `alert(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

<figure><img src="https://893723753-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCEugX4l1Pmpz8WohSnTR%2Fuploads%2FfJeCSodhl83rhWp7OcBp%2Fimage.png?alt=media&amp;token=13fcf43b-bc26-4d03-a59d-6c59b4300416" alt=""><figcaption></figcaption></figure>

`Done`
