ctf.show_web25,php_mt_seed的下载与使用

前置知识

php_mt_seed是什么?

我们都知道mt_srand(seed)这个函数是用来生成伪随机数的,seed值只要确定,那么生成的随机数也一样。
例如:

<?php
mt_srand(1);
echo intval(mt_rand())
?>

这里我们的seed值是1,然后我们的输出结果是895547922,只要seed值一样,那么我们大家最后的输出结果都是一样的。
那我们的php_mt_seed又是干什么的呢?
当我们得到一个随机数,就可以通过这个工具爆破他的seed值,有点像溯源。
php_mt_seed下载地址
在这里插入图片描述下载完后我们把它拖进kali里面
在工具的地方打开终端
在这里插入图片描述使用前需要make一下,然后再输入./php_mt_seed 随机数
在这里插入图片描述
接下来我们通过ctf.show.web25来说明一下具体应用
打开靶场,是一小段代码审计

error_reporting(0);
include("flag.php");
if(isset($_GET['r'])){
    $r = $_GET['r'];
    mt_srand(hexdec(substr(md5($flag), 0,8))); //这个条件可以不管,没用
    $rand = intval($r)-intval(mt_rand());  //r=0,得到负的第一次随机数
    if((!$rand)){
        if($_COOKIE['token']==(mt_rand()+mt_rand())){   
            echo $flag;    //关键
        }
    }else{
        echo $rand;
    }
}else{
    highlight_file(__FILE__);
    echo system('cat /proc/version');
} 

要想得到flag需要通过cookie传一个token的值,要等于mt_rand()+mt_rand(),这是第二次和第三次随机数的值之和。要得到它,我们需要知道种子seed的值。
这里就可以发挥我们的工具的作用了。首先我们需要知道第一次随机数的值,才可用工具爆破出。
这里我先用get方法传一个r=0
在这里插入图片描述然后转到kali进行爆破
加粗样式这里扫到不同版本的种子,我们根据wappalyzer插件可得知php当前网站使用的php版本
在这里插入图片描述简单编写一个php代码,把token的值算出来

<?php

mt_srand(2363123205);

echo intval(mt_rand()) . "<br>";
echo intval(mt_rand())+ intval(mt_rand());

?>

我们通过hackbar传过去
在这里插入图片描述
传r的值要注意使$rand等于零代码才能往下走,这里的r值就是前面页面返回的随机数。

自此,这题圆满解决!

总结

当我们在做php题时碰到不认识的函数,应及时查找函数的用法或漏洞。学习就是不断积累的过程,php中内置函数很多,不可能全部记得。 在完成者一题后又积累了新的工具php_mt_seed,同时也对mt_srand()函数有了更深的印象。

博主还是小白,也还在不断学习中,通过博客来记录学习方法和过程,以上内容若有错误,欢迎大家留言指出,希望可以和大家共同进步。

  • 16
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值