代码审计-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)
0 条评论