Deprecated
Overview
- Overall difficulty for me: Medium
In this challenge, we can spawn a docker instance:
Find the flag
Home page:
We can press Ctrl + U
to view the source page:
<script src="js/app.js"></script>
The app.js
looks interesting:
function senddata() {
var search = $("#search").val();
var replace = $("#replace").val();
var content = $("#content").val();
if(search == "" || replace == "" || content == "") {
$("#output").text("No input given!");
}
$.ajax({
url: "ajax.php",
data: {
'search':search,
'replace':replace,
'content':content
},
method: 'post'
}).success(function(data) {
$("#output").text(data)
}).fail(function(data) {
$("#output").text("Oops, something went wrong...\n"+data)
})
return false;
}
This JavaScript shows us how the parameters being parsed.
It’s sending a POST request to ajax.php
, and 3 POST parameters: search
, replace
, content
.
Also, we can capture the POST request via developer tool:
Hmm… X-Powered-By: PHP/5.5.9-1ubuntu4.29
. I don’t see any vulnerabilies in this PHP version.
Anyways, when I try to test Local File Inclusion (LFI) vulnerability, something interesting:
Blacklisted keywords!
?
Looks like it’s blacklisted the pass
word.
Then, I was stuck at here for a long time, until I found this Medium blog:
Let’s try this payload!
Oh!! It’s vulnerable to remote code execution!
Let’s execute commands!
Gosh! I hate filtering lul. Looks it’s filtering system
, shell_exec
, exec
.
However, blacklisting always doesn’t covered enough evil words! Like the double backticks ``.
Let’s cat
the flag!
Conclusion
What we’ve learned:
- Remote Code Execution in PHP
preg_replace()