[BJDCTF2020]Cookie is so stable

进入环境后看到有hint,点击之后查看源代码

提示我们cookie有线索

flag页面是:

需要输入一个username,或许这道题目是cookie伪造,随便输入一个username

输入的结果显示在了页面上,很容易能想到注入,抓包

cookie里面有我们最开始输入的username

可以猜到后端的代码应该是类似于 这样的

Hello %s

  将用户cookie里面传过来的user字符串通过模板渲染在页面上,处理不当的话就会导致模板注入

因为既然是通过模板渲染,我们也可以按照模板引擎的语法来输入,然后让模板把我们的恶意输入成功渲染

可以看到存在确实存在模板注入,然后题目环境对应的模板,上payload任意命令执行就行了

{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("cat /flag")}};

  

好像还必须在burpsuite里面才可以

关于SSTI模板注入的详解可以看:https://www.k0rz3n.com/2018/11/12/%E4%B8%80%E7%AF%87%E6%96%87%E7%AB%A0%E5%B8%A6%E4%BD%A0%E7%90%86%E8%A7%A3%E6%BC%8F%E6%B4%9E%E4%B9%8BSSTI%E6%BC%8F%E6%B4%9E/

[GWCTF 2019]枯燥的抽奖

给出了10位字母,一共20位,每一位是大小写字母+数字,即36个可能的字符,暴力猜后十位肯定没戏,看源代码

里面暴露了存在check.php,访问,发现了抽奖程序的源代码

<?php
#这不是抽奖程序的源代码!不许看!
header("Content-Type: text/html;charset=utf-8");
session_start();
if(!isset($_SESSION['seed'])){
$_SESSION['seed']=rand(0,999999999);
} mt_srand($_SESSION['seed']);
$str_long1 = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$str='';
$len1=20;
for ( $i = 0; $i < $len1; $i++ ){
$str.=substr($str_long1, mt_rand(0, strlen($str_long1) - 1), 1);
}
$str_show = substr($str, 0, 10);
echo "<p id='p1'>".$str_show."</p>"; if(isset($_POST['num'])){
if($_POST['num']===$str){x
echo "<p id=flag>抽奖,就是那么枯燥且无味,给你flag{xxxxxxxxx}</p>";
}
else{
echo "<p id=flag>没抽中哦,再试试吧</p>";
}
}
show_source("check.php");

  而当mt_srand使用同一个seed时,生成的随机数是可以爆破出seed种子的,使用到的工具是:https://www.openwall.com/php_mt_seed/

根据check.php源代码得到满足php_mt_seed工具要求的参数,搬运其他师傅的逆向python代码:

str1='abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
str2='BW3hV5WMFP'
str3 = str1[::-1]
length = len(str2)
res=''
for i in range(len(str2)):
for j in range(len(str1)):
if str2[i] == str1[j]:
res+=str(j)+' '+str(j)+' '+'0'+' '+str(len(str1)-1)+' '
break
print res

  str2就是显示出来的十位字符串,需要自己修改为自己看到的

得到

在Ubuntu下使用工具php_mt_seed,因为是第一次下载,还需要make一下

然后运行:

$ ./php_mt_seed 37 37 0 61 58 58 0 61 29 29 0 61 7 7 0 61 57 57 0 61 31 31 0 61 58 58 0 61 48 48 0 61 41 41 0 61 51 51 0 61

  获取随机种子,虚拟机漫长的等待。。

吃了个饭回来看随机种子为: 794200984,对应的PHP版本是PHP 7.1.0+

将check.php的代码改为:

<?php
#这不是抽奖程序的源代码!不许看!
header("Content-Type: text/html;charset=utf-8"); mt_srand(794200984);
$str_long1 = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$str='';
$len1=20;
for ( $i = 0; $i < $len1; $i++ ){
$str.=substr($str_long1, mt_rand(0, strlen($str_long1) - 1), 1);
}
echo $str;

  在对应版本的PHP下运行就可以输出20位的字符串了,但是phpstudy没有这么高版本的PHP,如果使用低版本的php运行,得到的字符串时错误的,去找了找PHP的在线运行工具:https://code.y444.cn/php

可选php7.1,运行之后拿到字符串,猜对数字

填入获得flag

参考链接:

https://kit4y.github.io/2019/12/03/wei-sui-ji-shu/

https://www.cnblogs.com/wangtanzhi/p/12288687.html

https://www.cnblogs.com/20175211lyz/p/12198535.html

https://www.kingkk.com/2018/02/php%E7%9A%84%E4%BC%AA%E9%9A%8F%E6%9C%BA%E6%95%B0/

[BJDCTF2020]Cookie is so stable && [GWCTF 2019]枯燥的抽奖的更多相关文章

  1. 种子爆破&[GWCTF 2019]枯燥的抽奖

    伪随机数的爆破,种子爆破 做到了一道题,就是有个伪随机数爆破的漏洞,当时尽管是看到了这两个敏感的函数,但是先去看其他的了,没有看到什么漏洞,所以我当时是准备直接强行爆破,之后看到使用伪随机数爆破的方式 ...

  2. 刷题记录:[GWCTF 2019]枯燥的抽奖

    目录 刷题记录:[GWCTF 2019]枯燥的抽奖 知识点 php伪随机性 刷题记录:[GWCTF 2019]枯燥的抽奖 题目复现链接:https://buuoj.cn/challenges 参考链接 ...

  3. [GWCTF 2019]枯燥的抽奖

    0x00 知识点 种子爆破 工具 http://www.openwall.com/php_mt_seed 0x01 解题 查看源码进入check.php zOHF0Cxp49 <?php #这不 ...

  4. [BJDCTF2020]Cookie is so stable

    0x00 知识点 Twig模板注入 链接: https://www.k0rz3n.com/2018/11/12/%E4%B8%80%E7%AF%87%E6%96%87%E7%AB%A0%E5%B8%A ...

  5. [BUUCTF]REVERSE——[GWCTF 2019]xxor

    [GWCTF 2019]xxor 附件 步骤: 无壳,64位ida载入 程序很简单,首先让我们输入一个字符串,然后进行中间部分的操作,最后需要满足44行的if判断,看一下sub_400770函数 得到 ...

  6. [BUUCTF]REVERSE——[GWCTF 2019]pyre

    [GWCTF 2019]pyre 附件 步骤: 1.附件是pyc文件,用python打不开,百度后得知用python反编译工具打开,分享一个python反编译在线网站 反编译后是这段代码 #!/usr ...

  7. [GWCTF 2019]re3 wp

    [GWCTF 2019]re3 关键点:AES MD5 动态调试 smc自解密 gdb使用 跟进main函数 发现一个典型smc异或自解密 可以用idc脚本 或者python patch 或者动态调试 ...

  8. [GWCTF 2019]mypassword

    这道题(不只这道题以后也一定)要注意控制台中的信息,给出了login.js代码,会把当前用户的用户名和密码填入表单 注册个账号,登录之后给提示不是注入题 浏览一下网站功能,feedback页面可以提交 ...

  9. 刷题[GWCTF 2019]mypassword

    解题思路 打开网站,登陆框.注册一个用户后再登陆 看样子是注入了,在feedback.php中发现注释 <!-- if(is_array($feedback)){ echo "< ...

随机推荐

  1. jquery DataTable插件使用自定义搜索

    $(function () { $("#pk_status").change(function () { valid = $(this).val(); if(valid){ tab ...

  2. VirtualBox上桥接方式安装CentOS之后借助宿主上网

    VirtualBox上桥接方式安装CentOS之后借助宿主上网: 修改centos文件: 1 vi  /etc/sysconfig/network-scripts/ifcfg-eth0 增加以下几项: ...

  3. Kubernetes+Promethues+Cloud Alert实践分享

    前言 容器集群管理系统 Kubernetes(简称K8s),为容器化的应用提供部署运行.容器编排.负载均衡.服务发现和动态伸缩等一系列完整功能,Prometheus 对 K8s 支持非常棒,能够自动发 ...

  4. kafka消费者offset存储策略

    由于 consumer 在消费过程中可能会出现断电宕机等故障,consumer 恢复后,需要从故 障前的位置的继续消费,所以 consumer 需要实时记录自己消费到了哪个 offset,以便故障恢 ...

  5. Flink Native Kubernetes实战

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  6. Monitor的扩展支持string的超时锁

    对Monitor的使用可以防止lock的时间过长并且可以设置其对应的超时时间达到对预期代码的一个控制,合理的使用timeout可以有助于程序的健壮性.但是对于不同的并发程序可能某些时候我们需要的粒度是 ...

  7. webpack : 无法加载文件 C:\Users\Eileen\AppData\Roaming\npm\webpack.ps1,因为在此系统上禁止运行脚本

    报错内容: webpack : 无法加载文件 C:\Users\Eileen\AppData\Roaming\npm\webpack.ps1,因为在此系统上禁止运行脚本.有关详细信息,请参阅 http ...

  8. 2020阿里Java面试题目大汇总,看看你离阿里还有多远,附答案!

    前言 首先说一下情况,我大概我是从去年12月份开始看书学习,到今年的6月份,一直学到看大家的面经基本上百分之90以上都会,我就在5月份开始投简历,边面试边补充基础知识等.也是有些辛苦.终于是在前不久拿 ...

  9. 关于oracle11g 和sqldeverloper的安装配置

    0友情提示:以下下载地址都是我的百度云分享链接安全无毒请放心下载! 电脑配置 win10 jdk版本1.7 下载oracle11G 版本 下载地址:安装很简单 sqldverloper(oracleD ...

  10. jQuery 第二章 实例方法 DOM操作取赋值相关方法

    取赋值相关方法:  .html() .text() .val() .size() .addClass() .removeClass() .hasClass() .html() html方法干嘛的呢,底 ...