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
题目给出了源码
/
接受action参数。如果没有就默认为index
file=dirname+/template/+action+.png
然后用pug进行渲染。可以理解为执行这个文件
/file_upload
定义了只能由127.0.0.1访问。并且是remoteaddress不能伪造
那么得找一个SSRF的点
文件上传。
filepath=/uploads/+mimetype+/
而mimetype可控。那么我们可以跨目录
dir_file=dirname+filepath+filename
那么我们可以构造任意路径文件写入
/core
接受一个q参数。然后对其进行黑名单检测
然后对q输入的值进行请求。。
当时知道这个点可以SSRF。但是不会构造数据包。。
给了一个流量包和网址。
分析流量包。
有三个URL
bash.org
builts-23-04xxxxxxxxxxxxxxxx&port=8888
n-gate.com
要求以admin登陆。将HTML中的is_admin改为1也不行。
并且cookie中存在一个rack.session和user
仿佛是加密过后的数据
这题。先去github上。把源码下下来。
先随便用个号登陆。存在一个add note和下载功能。成为admin得到flag。着重看下下载功能。