Local file inclusion is a vulnerability that allows the attacker to read files that are stored locally through the web application.This happens because the code of the application does not properly sanitize the include() function.So if an application is vulnerable to LFI this means that an attacker can harvest information about the web server.Below you can see an example of PHP code that is vulnerable to LFI.

In this article we will use the mutillidae as the target application in order to exploit the local file inclusion flaw through Burp Suite.As we can see and from the next screenshot the user can select the file name and he can view the contents of this just by pressing the view file button.

So what we will do is that we will try to capture and manipulate the HTTP request with Burp in order to read system files.

As we can see from the above request,the web application is reading the files through the textfile variable.So we will try to modify that in order to read a system directory like /etc/passwd.In order to achieve that we have to go out of the web directory by using directory traversal.

We will forward the request and now we can check the response on the web application as the next image is showing:

We have successfully read the contents of the /etc/passwd file.Now with the same process we can dump and other system files.Some of the paths that we might want to try are the following:
- /etc/group
- /etc/hosts
- /etc/motd
- /etc/issue
- /etc/mysql/my.cnf
- /proc/self/environ
- /proc/version
- /proc/cmdline








Conclusion
As we saw the exploitation of this vulnerability doesn’t require any particular skill but just knowledge of well-known directories for different platforms.An attacker can discover a large amount of information for his target through LFI just by reading files.It is an old vulnerability which cannot be seen very often in modern web applications.
There’s more to LFI than just reading files. What about following up the post with how to gain a shell?
Good suggestion infinity432!I will update the post!
This is a brilliant article, I really like the code example that clearly demonstrates exactly where local file inclusion vulnerabilities occur. I am glad I read this because I have always used a lot of variable assignments in my code, especially taking values from the $_GET array, and now I will not do this anymore.
Do you have any advice for PHP programmers on how to set variables from user input without causing LFI vulnerabilities?
@Command-PHP-Progammer :
Maybe you should read the OWASP Guidelines. They give a brief explanation in the documentation.
$file = $_GET[‘page’];
And how exactly is this vulnerable to LFI?
@Frenki It is vulnerable because PHP is reading from a file that is stored on the local machine and then it displays it on the web page.This means that you can request for other files that are stored locally (for example /etc/passwd) to be displayed on the web application.
I am fairly sure you need at least an include() or require() ( or _once() parts), or file_get_contents (read only) to include or read anything.
$file = $_GET[‘page’];
will only assign value of GET[‘page’] to $file variable. Am I missing something?