Intro to File Upload Attacks
Uploading user files has become a key feature for most modern web
applications to allow the extensibility of web applications with user
information. A social media website allows the upload of user profile
images and other social media, while a corporate website may allow users
to upload PDFs and other documents for corporate use. However, as web application developers enable this feature, they also
take the risk of allowing end-users to store their potentially malicious
data on the web application's back-end server. If the user input and
uploaded files are not correctly filtered and validated, attackers may
be able to exploit the file upload feature to perform malicious
activities, like executing arbitrary commands on the back-end server to
take control over it. The most common reason behind file upload vulnerabilities is weak file
validation and verification, which may not be well secured to prevent
unwanted file types or could be missing altogether. The worst possible kind of file upload vulnerability is an unauthenticated arbitrary file upload
vulnerability. With this type of vulnerability, a web application
allows any unauthenticated user to upload any file type, making it one
step away from allowing any user to execute code on the back-end server. a file upload vulnerability is not only caused by writing insecure
functions but is also often caused by the use of outdated libraries that
may be vulnerable to these attacks.
Basic Exploitation
does not have any form of validation filters
on the uploaded files, allowing the upload of any file type by default. With these types of vulnerable web apps, we may directly upload our web
shell or reverse shell script to the web application, and then by just
visiting the uploaded script, we can interact with our web shell or send
the reverse shell. some time the we application specify the extension and the content type and some time The web application does not mention anything about what file types are allowed, and we can drag and drop any file we want. Identifying Web Framework
We need to upload a malicious script to test whether we can upload any
file type to the back-end server and test whether we can use this to
exploit the back-end server. Many kinds of scripts can help us exploit
web applications through arbitrary file upload, most commonly a Web Shell
script and a Reverse Shell
script. A Web Shell provides us with an easy method to interact with the
back-end server by accepting shell commands and printing their output
back to us within the web browser. This is usually relatively simple, as we can often see the web page
extension in the URLs, which may reveal the programming language that
runs the web application. One easy method to determine what language runs the web application is to visit the /index.ext
page, where we would swap out ext
with various common web extensions, like php
, asp
, aspx
, among others, to see whether any of them exist. we can use a tool like Burp Intruder for fuzzing the file extension using a Web Extensions wordlist, Several other techniques may help identify the technologies running the web application, like using the Wappalyzer extension, which is available for all major browsers. As we can see, not only did the extension tell us that the web application runs on PHP
,
but it also identified the type and version of the web server, the
back-end operating system, and other technologies in use. These
extensions are essential in a web penetration tester's arsenal.
We may also run web scanners to identify the web framework, like Burp/ZAP scanners or other Web Vulnerability Assessment tools. Now that we have identified the web framework running the web
application and its programming language, we can test whether we can
upload a file with the same extension. As an initial test to identify
whether we can upload arbitrary PHP
files. and For .NET
web applications, we can pass the cmd
parameter with request('cmd')
to the eval()
function. if it's take arbitrary files it's means it's vulnerable to shell upload. so for exploit through uloading shell We can find many excellent web shells online that provide useful
features, like directory traversal or file transfer. One good option for
PHP
is phpbash, which provides a terminal-like, semi-interactive web shell. and for php reverse shell pentestmonkey PHP reverse shell is excellent. similarly you can create your custom shell.
0 Comments
Thanks For your comment