这题得从github上下源码。
进入web。有两个功能。一个是判断文件类型。一个是文件上传。配合源码。分析一下
文件上传:
Ezpop
<?php
//flag is in flag.php
//And Crack It!
class Modifier {
protected $var;
public function append($value){
include($value);
}
public function __invoke(){
$this->append($this->var);
}
}
class Show{
public $source;
public $str;
public function __construct($file='index.php'){
$this->source = $file;
echo 'Welcome to '.$this->source."<br>";
}
public function __toString(){
return $this->str->source;
}
public function __wakeup(){
if(preg_match("/gopher|http|file|ftp|https|dict|\.\./i", $this->source)) {
echo "hacker";
$this->source = "index.php";
}
}
}
class Test{
public $p;
public function __construct(){
$this->p = array();
}
public function __get($key){
$function = $this->p;
return $function();
}
}
if(isset($_GET['pop'])){
@unserialize($_GET['pop']);
}
else{
$a=new Show;
highlight_file(__FILE__);
}
注一下
好像是攻防世界的原题。。
注册一个"||updatexml(1,(version()),1)#
登陆后。修改密码会报错。报错注入拿flag。用()绕过空格
"||updatexml(1,concat(0x7e,(select(flag)from(flag)),0x7e),1)#
题目给出了源码。有两个功能。一个是upload。一个是show
upload呢。是输入一个URL。然后会访问URL/avatar.gif然后保存到本地
show呢。是读取这个gif文件。
首先就一个登陆和注册。貌似没注入。
进去以后URL如下http://00f9d39c-5972-4a18-9744-2d59c6264341.node3.buuoj.cn/index.php?file=download
。。感觉是SSTI
输入{1+1}
返回{1+1}
输入{{1+1}}
直接报错。
这就有点迷了。接触过的SSTI都是构造payload不同。也没遇到过报错这种情况
看writeup后。发现还能通过{%%}
这种方式去注入
这是一种盲注。通过{% if 1 %}1{% endif %}
可以看到。虽然没回显。但是payload确实正常执行