Siunam's Website

My personal website

Home About Blog Writeups Projects E-Portfolio

Manipulating the WebSocket handshake to exploit vulnerabilities | Dec 19, 2022

Introduction

Welcome to my another writeup! In this Portswigger Labs lab, you’ll learn: Manipulating the WebSocket handshake to exploit vulnerabilities! Without further ado, let’s dive in.

Background

This online shop has a live chat feature implemented using WebSockets.

It has an aggressive but flawed XSS filter.

To solve the lab, use a WebSocket message to trigger an alert() popup in the support agent’s browser.

Exploitation

Home page:

Live chat:

To intercept WebSocket traffics, we can use Burp Suite.

In the previous lab, we found that the message in WebSocket is vulnerable to XSS(Cross-Site Scripting).

Now, let’s try to send a test message:

In here, we can try to send a XSS payload:

<img src=error onerror='alert(document.domain)'>

Hmm… Attack detected… Maybe the web application has a filter that filters XSS payload.

Let’s refresh the page and try again:

Ah… It even blacklisted my IP address!

To bypass that, we can try to use the X-Forwarded-For HTTP header:

We’ve successfully bypassed the IP address blacklist!

In Burp Suite, we can add an option that every requests will add a custom header:

Now, we need to bypass the XSS filter.

**Since the error says Event handler, we can bypass that via this payload:

<img src=1 OnErRoR=alert(document.domain)>

Let’s try that:

Again, it detected the alert().

To bypass that, we can use ` to replace the ():

<img src=1 OnErRoR=alert`document.domain`>

Also, we should change our X-Forwared-For IP address, as it’s blacklisted:

Finally, we can send our XSS payload:

Nice! We’ve successfully triggered it!

What we’ve learned:

  1. Manipulating the WebSocket handshake to exploit vulnerabilities