网络安全:文件包含

前言:

继上篇《网络安全:文件上传 + 一句话木马原理 + 菜刀的简单使用》

 

文件包含,这个名词一出来。我们可能第一个想到的就是c语言里面的头文件的包含,include <stdio.h>,include <stdlib.h>等等。

 

我们知道它的作用就是将头文件包含到当前文件中,从而可以使用头文件中的变量,函数等等。网络中的文件包含和它相似略有不同。

 

C语言,包含关键字是include。在php中文件包含函数有四种,分别是:

 

1.include。如果包含文件中出错,报错后程序继续执行。

2.require。如果包含文件出错,报错后程序直接退出。

3.include_once。

4.require_once。这两个函数功能与上相同,附加功能是确保包含文件只被包含一次。

 

和C语言里,我们自定义头文件时写的这个东西差不多:

# ifndef __LIST_HEAD__

# define __LIST_HEAD__

........

........

#endif

 

我们在C里称为标准头文件结构,避免此头文件被多次包含。once和它的功能相同。

 

仍旧以DVWA为例(安全等级还是low):

 

网页中有一条红色警告:The PHP function allow_url_include is not enable.

 

这个函数可以在php配置文件(php.ini)中修改,只有当参数值为on时,才可以对远程文件进行包含。换句话说,如果参数值为on,可以任意包含其他服务器的文件。如果包含文件为本地文件,这个参数不重要。

 

回到网页中去,尝试点击file1.php和file2.php的按钮。

你会发现文件内容被包含了进来,显示在了界面之上。

 

后台查看file1.php内容:

<?php

$page[ 'body' ] .= "
<div class=\"body_padded\">
	<h1>Vulnerability: File Inclusion</h1>
	<div class=\"vulnerable_code_area\">
		<h3>File 1</h3>
		<hr />
		Hello <em>" . dvwaCurrentUser() . "</em><br />
		Your IP address is: <em>{$_SERVER[ 'REMOTE_ADDR' ]}</em><br /><br />
		[<em><a href=\"?page=include.php\">back</a></em>]
	</div>

	<h2>More info</h2>
	<ul>
		<li>" . dvwaExternalLinkUrlGet( 'https://en.wikipedia.org/wiki/Remote_File_Inclusion' ) . "</li>
		<li>" . dvwaExternalLinkUrlGet( 'https://www.owasp.org/index.php/Top_10_2007-A3' ) . "</li>
	</ul>
</div>\n";

?>

 

联系上篇的文件上传,那我能不能把上篇的那个一句话包含进来呢?

 

 

这是我们上次上传的路径,为了便于观察,我们在文件中加了点能输出的内容“something”。

 

修改url参数:page=D:\phpstudy\PHPTutorial\WWW\DVWA-master\hackable\uploads\shell.php

看到些什么东西吗?是的,文件已经被包含了进来。

 

接下来就是对一句话的利用了:

在url中添加shell参数:

 

上篇文章我们结束在了“图片马”上。但是现在,对于图片的显示,已经有了解决办法。

 

把伪装好的图片上传:

 

整页的乱码,这是当然。图片属二进制文件,你用文本方式读取,肯定是乱码。图片太大了,最开始没有考虑这个事情,换一张小的图片:

本地有一张dvwa_email.png,打开cmd:  copy dvwa_email.png/b + shell.php/a 3.png

 

得到一张小一点伪装图片。

 

对其进行包含:

前面一堆乱七八糟看不懂的就是图片数据,不过最后的那个something告诉了我们一句话已经包含了进来。利用一下:

 

url添加shell参数:\3.png&shell=echo("You%20are%20hacked");

 

利用完毕。

 

将马放进图片里,目前给了两种方法:

1.用你喜欢的语言,二进制打开图片,往后添加脚本。

2.使用copy命令。

 

再给一种,重定向。

 

包含:

 

成功显示。

 

当然,如果直接打开图片是错误的:

 

这是因为图片都有自己的“头部”,就像我们包含的3.png:

 

头部信息的错误是不能被正确识别。如果服务器会对图片的头部进行检测。那就像copy一样,echo脚本到一个图片中就好。

 

echo到3.png里:

 

现在再包含3.png:

添加的那部分内容也“裂开来”。

 

一套很酷的操作哈?

发布了53 篇原创文章 · 获赞 80 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_41500251/article/details/100188924