PHP代码审计(Session反序列化 + Create_function漏洞)

1.某团队内部题目

首先先审计一下,会接收content和name参数,分别对应文件内容、文件名,存储在/tmp文件夹下
此外每次访问会对服务器存储的session和访问者的session进行对比
当session存在就获得访问flag的权限

百度一下,一般的php session存储在/tmp文件夹下,且有三种存储方式,这里是最常见的php存储引擎(php<5.5.4)

session命名规则:

sess_sessionid(PHPSESSID)

其中文件内容经过序列化:

键名 | 序列化后的结果
例如:name | s:6:"spoock"

构造我们自己的session,但当传参content时会拼接它默认的字符串,会被当成键名,因此直接用null的序列化表示来分隔就OK(|N)

因此最终payload如下:

2.某内部题2

首先我们要POST一个key值,其次传参act和arg,但是act会有一个匹配,但是并不严格,只是对首尾有匹配

需要注意的:
extract()函数漏洞: 这里以POST方法获得变量会导入当前符号表中,如果存在则覆盖

看见$act($arg,''),可以联想到create_function('$name','echo 123')

函数原型:create_function(string $args, string $code)

在PHP高版本中这个函数被废弃了

这个函数类似于这个结构:
function name($name){
    echo $name;
}

因此我们能够传参闭合,payload如下:

3.题3

没啥过滤,管道符也没过滤干净

[Sign]做不出ctf题的时候很痛苦,你只能眼睁睁看着其他人领先你
原文地址:https://www.cnblogs.com/echoDetected/p/14530433.html