php代码审计工具 讲解php代码审计入门

01.什么是包含漏洞的文件?攻击者利用了包含的特性,而应用本身并没有严格控制文件(包含),最终导致任意的文件包含。(包含文件的内容将被解析为PHP脚本文件,忽略文件扩展名)总之,文件包含不是漏洞,只是对包含的文件失去了控制,导致了文件包含漏洞。本地文件包含称为LFI(本...

01.什么是包含漏洞的文件?

攻击者利用了包含的特性,而应用本身并没有严格控制文件(包含),最终导致任意的文件包含。(包含文件的内容将被解析为PHP脚本文件,忽略文件扩展名)

总之,文件包含不是漏洞,只是对包含的文件失去了控制,导致了文件包含漏洞。

本地文件包含称为LFI(本地文件包含),远程文件包含称为RFI(远程文件包含)。默认情况下,PHP不打开远程文件包含。

02.相关函数

include

:PHP运行到include然后去调用被包含文件执行,如果包含文件不存在则报错,但是会继续往下执行;

require

:PHP在运行前,就先去把被包含文件的内容提取出来然后整合成新的PHP一齐执行,如果包含的文件不存在则报错,不会继续执行;i

nclude_once|require_once

:如果文件已经被包含一次就不会重复包含。

举例,网站根目录下有一个名为 “test.txt” 的文本文件,内容如下:

比如有一个网站叫“test.txt & # 8221的文本文件,包含以下内容:

图1 test.txt

在一张页面中引用这个文件,我使用了include语句,内容如下:

为了在页面中引用这个文件,我使用了include语句,其内容如下:

图2 include.php

使用浏览器访问带有文件包含的页面时,效果如下:

使用浏览器访问包含文件的页面时,效果如下:

图3访问页面

03.漏洞描述

CVE-2018-12613漏洞来自于phpMyAdmin中部分代码的重定向和加载,以及白名单页面的不正确过滤,导致攻击者能够读取服务器下的任意文件。

影响版本:

PhpMyAdmin 4.8.0和4.8.1

代码审计

1.首先,该文件包含位于/index.php文件中的目标参数。

第55-63行:

第55-63行:

图4 index.php

这里声明您想要执行包含文件代码include $ _ REQUEST[‘目标’],需要满足以下五个条件:

$_REQUEST[‘target’] 不为空;$_REQUEST[‘target’] 是字符串;$_REQUEST[‘target’] 开头不是index;$_REQUEST[‘target’] 不在 $target_blacklist 中;Core::checkPageValidity($_REQUEST[‘target’]) 为真。

所以,回过头来看看变量$target_blacklist包含了什么。

在同一文件下50-52行:

在同一文件下,第50-52行:

图5目标_黑名单

此时此刻很清楚,当$ _ REQUEST[‘目标’]不是import.php或export.php,即可以实现文件包含。

其次,接下来找到另一个限制,即
/libraries/classes/core . PHP文件中的checkPageValidity()方法。

位于443-478行处:

在第443-478行:

图6 checkPageValidity方法

分析该方法中包含的几个if判断:

首先$whitelist为空,赋值为self::$goto_whitelist

图7白名单内容

如果$page在白名单中,就会返回true,但是我们的$page带有参数,就要进行一下判断若$page存在$whitelist中的某个值则返回true;

函数的作用是:返回”在$page中?“位置,然后substr()函数截取并返回结果$_page到$page问号前面的部分。如果$_page在白名单中,它将返回true。

最后可以得出,若传入target=db_sql.php%253f/../../test.txt(%253f是?的url二次编码),经过两次解码后(GET传参默认解码一次url)变回?,分割后取出前面的字符串为db_sql.php,会进入最后一个 if 判断返回 true

因为php会改变之前的db_sql.php?作为一个目录,所以您需要添加一个额外的/../退出目录。你可以用& Symbol。

所以只要taget参数的值构造得当,就可以实现绕过其检测,实现文件包含漏洞。

05.漏洞重现

有效载荷:

http://[phpmyadmin_ip]/index.php?target=db_sql.php%253f/../../../../etc/passwd

http://[phpmyadmin _ IP]/index . PHP?target=db_sql.php%253f/../../../../etc/密码

图8漏洞利用

可以看到/etc/passwd文件已经被成功读取,除此之外,还可以利用这个漏洞用sql语句写入木马后的getshell。感兴趣的朋友可以深入研究,发现更多的利用手势。

06.防御措施

1.在建站过程中,将allow_url_include和allow_url_fopen设置为,不需要时关闭;

2.如果需要包含文件,应该限制中包含的文件,白名单方法或设置可以包含目录,比如open _ basedir;

3.严格检查用户输入,以及目录跳线,如..参数中不允许出现/符号;

4.严格检查include类文件的include函数中的参数是否

可由外界控制。

本文来自清杉投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/493217.html

打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
() 0
上一篇 04-07
下一篇 04-07

相关推荐

  • 网页列表设计代码 网页制作经验分享

    有序列表经过前面对表格和形式的学习,再来学习列表是非常简单易懂的。学习是建立知识体系的过程。没有系统的学习再多的知识,也会支离破碎,也很难形成技能或者深度理解。所以,如果你是零基础的初学者,是第一次看我的教程。如果时间允许,请从目录中寻找第一个,循序渐进地

    2023-07-25 09:07:01
    767 0
  • steam错误代码-102解决方案

    改host就可以了 百度“steam118错误修复工具”选第一个3DM下载就可以了。建议你把电脑做成w10系统,不一定苹果电脑就要用苹果系统啊,w10还更好用。你是打开商城或者市场吧网站被污染了,你需要挂加速器,或者百度steam网站被污染,然后找到一个小程序,才能打开网站。1在桌面

    2023-07-23 04:39:01
    662 0
  • eclipse平台简介 java新手代码大全

    Eclipse workspace多平台使用u盘的解决方案(workroom空);在过去的Java编程中,Eclipse占据了绝大多数的位置。我们知道Java是一种跨平台的编程语言,所以我们有可能在不同的平台上编写Java代码。我们在学校机房的一个设备上写好Java代码后,回到宿舍还需要继续写。这时候我们

    2023-07-23 03:20:01
    502 0
  • html居中代码怎么写 网页制作文字居中代码

    这个问题好像是面试必问的!以前会时不时提问,给基本的分题。1.配置盒子的宽度和高度是已知的,位置:绝对;左:50%;top:50%;左边距:-自身宽度的一半;***rgin-top:-自身高度的一半;2.表格单元格布局父显示:表格单元;垂直对齐:居中;子边距:0自动;3.定位+改造;适用于宽度

    2023-07-23 03:11:01
    504 0

评论列表

联系我们

在线咨询: QQ交谈

邮件:admin@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信