代码审计-TP5框架及无框架变量覆盖反序列化

Metinfo-变量覆盖

点击自动审计,可以结合来fortify进行审计

在这里发现疑似变量覆盖漏洞,对于漏洞的筛选,最好是在程序的配置性文件中,应为很多函数执行时,都会调用配置性文件。

变量覆盖漏洞的函数
extract(),parse_str(),import,request,variables(),$$,全局搜索$$时,发现很多选项,优先看配置文件

foreach循环3个元素,然后通过
$$_request解析成$_COOKIE,$_POST,$_GET再进行遍历,片段键的第一个字符不是_,然后将键作为变量名,将值赋给该变量,这就提供了变量覆盖漏洞

common一般都是公共文件,所有文件都会引入该文件配合include,如果在include的引入路径中存在变量就可以利用该漏洞修改该变量,然后可以利用网站中的上传漏洞上传木马,然后getshell

比如原先:
include $filename;我们将$filename覆盖掉,覆盖为我们上传的包含一句话的JPG图片,让图片以PHP的格式执行 搜索文件包含漏洞的关键函数:include,include_once,require,require_once

比如,这里只有变量,但是没有包含变量覆盖漏洞的文件就不行(但是也不一定,应为说不定
module.php包含了common.inc.php,或者它包含的文件包含了common.inc.php等等)

打开
module.php文件查看,发现包含了common.inc.php

由于这个CMS网站没有文件上传的地方,就直接在about目录下创建
1.txt

经过了
module.php

我们的目的是让引入的木马执行,所以尽可能跳过分支判断,这里
$fmodule传入7
- payload:
http://127.0.0.1:8789/about/index.php?fmodule=7&module=1.txt

phpmydmin-无框架-反序列化
攻击环境要求:phpMyAdmin版本:早于2.11.9.5的2.11.x和早于3.1.3.1的3.x;

搜索反序列化关键函数:
serialize(),unserialize(),__construct,__destruct

$_POST['configuration']存在,并且变量action不等于clear,就调用反序列化函数

php魔术方法,反序列化会触发
__wakeup()
- __wakeup() : 使用
unserialize()时触发 - __sleep() : 使用
serialize()时触发 - __destruct() : 对象被销毁时触发
- __call() : 在对象上下文中调用不可访问的方法时触发
- __callStatic() : 在静态上下文中调用不可访问的方法时触发
- __get() : 用于从不可访问的属性读取数据
- __set() : 用于将数据写入不可访问的属性
- __isset() : 在不可访问的属性上调用
isset()或empty()触发 - __unset() : 在不可访问的属性上使用
unset()时触发 - __toString() : 把类当作字符串使用时触发
- __invoke() : 当脚本尝试将对象调用为函数时触发
英文注释是:在加载完session文件后,重新初始化对象,检查配置文件的是否改变,如果必要就重新加载

load方法,根据判断
file_get_contents()是否存在来进行代码执行

getsource是返回目前的配置文件

调用反序列函数,会调用创建对象的类中的
__wakeup(),进而调用代码执行getsource()(注意,这个getsource是对象的方法,要构造getsource就要在对象的类里面构造)

构造payload调用反序列化,要求configuration和action变量,而这两个变量都是post传参的值
- Payload:action=test&configuration=O:10:"PMA_Config":1:{s:6:"source",s:11:"d:/test.txt";}
尝试访问(发现没有回显,构造了个容易看见的payload)

Alipay
Wechat
0 条评论