diff --git a/owasp-top10-2021-apps/a5/insecure-file-upload/.gitignore b/owasp-top10-2021-apps/a5/insecure-file-upload/.gitignore
new file mode 100644
index 000000000..e69de29bb
diff --git a/owasp-top10-2021-apps/a5/insecure-file-upload/Makefile b/owasp-top10-2021-apps/a5/insecure-file-upload/Makefile
new file mode 100644
index 000000000..f69501466
--- /dev/null
+++ b/owasp-top10-2021-apps/a5/insecure-file-upload/Makefile
@@ -0,0 +1,37 @@
+.SILENT:
+.DEFAULT_GOAL := help
+
+COLOR_RESET = \033[0m
+COLOR_COMMAND = \033[36m
+COLOR_YELLOW = \033[33m
+COLOR_GREEN = \033[32m
+COLOR_RED = \033[31m
+
+PROJECT := INSECURE FILE UPLOAD
+PORT := 8080
+
+## Installs a development environment
+install: compose
+
+## Composes project using docker-compose
+compose: compose-down
+ docker-compose -f deployments/docker-compose.yml up -d --build --force-recreate
+
+## Down project using docker-compose
+compose-down:
+ docker-compose -f deployments/docker-compose.yml down
+
+
+## Prints help message
+help:
+ printf "\n${COLOR_YELLOW}${PROJECT}\n------\n${COLOR_RESET}"
+ awk '/^[a-zA-Z\-\_0-9\.%]+:/ { \
+ helpMessage = match(lastLine, /^## (.*)/); \
+ if (helpMessage) { \
+ helpCommand = substr($$1, 0, index($$1, ":")); \
+ helpMessage = substr(lastLine, RSTART + 3, RLENGTH); \
+ printf "${COLOR_COMMAND}$$ make %s${COLOR_RESET} %s\n", helpCommand, helpMessage; \
+ } \
+ } \
+ { lastLine = $$0 }' $(MAKEFILE_LIST) | sort
+ printf "\n"
\ No newline at end of file
diff --git a/owasp-top10-2021-apps/a5/insecure-file-upload/README.md b/owasp-top10-2021-apps/a5/insecure-file-upload/README.md
new file mode 100644
index 000000000..8d4248fe7
--- /dev/null
+++ b/owasp-top10-2021-apps/a5/insecure-file-upload/README.md
@@ -0,0 +1,124 @@
+
+
+# INSECURE FILE UPLOAD
+
+
+
+
+
+Insecure File Upload is a web laboratory written in PHP, with weak file upload validations.
+A simple app that uploads files to the server’s public folder and displays a list of saved
+files that can be viewed.
+
+This laboratory aims to demonstrate code execution on the server, a security flaw that
+falls under A5 — Security Misconfiguration and A3 — Injection in the OWASP classification.
+
+## Index
+
+- [Definition](#definition)
+- [Setup](#setup)
+- [Attack narrative](#attack-narrative)
+- [Objectives](#secure-this-app)
+- [Solutions](#pr-solutions)
+- [Contributing](#contributing)
+
+## What is Unrestricted File Upload?
+
+Unrestricted File Upload is a class of vulnerability that occurs when a web application accepts
+and stores files from users without performing adequate validation, sanitization, or safe handling.
+When file uploads are not properly checked (for type, content, name, storage location, and execution
+permissions), an attacker can upload a crafted file that the server later interprets or executes —
+for example, a PHP file disguised as an image. This can lead to remote code execution (RCE), local
+file inclusion, information disclosure, or other severe compromises.
+
+## Setup
+
+To start this intentionally **insecure application**, you will need [Docker][docker install] and [Docker Compose][docker compose install]. After forking [secDevLabs](https://github.com/globocom/secDevLabs), you must type the following commands to start:
+
+```sh
+cd secDevLabs/owasp-top10-2021-apps/a5/insecure-file-upload
+```
+
+```sh
+make install
+```
+
+Then simply visit [http://localhost:8080][app]
+
+## Get to know the app :camera_flash:
+
+To properly understand how this application works, you can follow these simple steps:
+
+- Access the URL in your browser
+- Click the Select Image button
+- Choose a PNG image
+- Click the Upload button
+- Then the file list will update, and you can view the image by clicking the link icon
+
+## Attack narrative
+
+Now that you know the purpose of this app, what could possibly go wrong? The following section
+describes how an attacker could identify and eventually find sensitive information about the app
+or it's users. We encourage you to follow these steps and try to reproduce them on your own to
+better understand the attack vector! 😜
+
+### 👀
+
+Upon accessing the page the attacker will see the following interface. They will then try to find a way to break the application.
+A common flaw in applications is the lack of proper validation of user-submitted data. This allows an attacker to take advantage of it.
+
+
+
+
+
+### 🔥
+
+The attacker then decides to see how the application works and, meanwhile, will try to think of a security
+vulnerability during the process. When they select an image and click **Upload**, the file list will refresh
+with the new file, as shown in the image below.
+
+
+
+
+
+Ok! Everything went well. In the file listing, when inspecting the page source code, the attacker notices that the image keeps its original name and was saved in the `/uploads` folder on the server.
+
+