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题的时候很痛苦,你只能眼睁睁看着其他人领先你