梳理思路

打开网站,发现很简单,只有flag在哪里的字样。

查看源码,常用后台目录,robots.txt,都未发现有任何东西。

扫描

直接拉进扫描器一扫,发现

思考可能是git源码泄露,可能可以恢复源码。github上有很多优秀的git恢复工具。在这里推荐两款:Git Extract 和githack。都支持differ更改后的文件,这点很重要,有些ctf比赛题会更改文件,如果你的git恢复工具不带的话,只能获取未修改前的数据,无法获取完整源码

使用Git Extract,获取了源码:

<?php include "flag.php"; echo "flag在哪里呢?<br>"; if(isset($_GET['exp'])){ if (!preg_match('/data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i', $_GET['exp'])) { if(';' === preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'])) { if (!preg_match('/et|na|info|dec|bin|hex|oct|pi|log/i', $_GET['exp'])) { // echo $_GET['exp']; @eval($_GET['exp']); } else{ die("还差一点哦!"); } } else{ die("再好好想想!"); } } else{ die("还想读flag,臭弟弟!"); } } // highlight_file(__FILE__); ?>

代码审计

发现这句代码

if(';' === preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp']))

很经典的正则匹配无参数RCE,大概解释一下就是:

(?R)?表示引用当前表达式一次或多次。即可以变成\w+(\w+((?R)?)),\w+(\w+(\w+((?R)?))),等等在(?R)?中无限套娃的情况。

所以只能让参数=一个函数,或函数包含函数的情况

方法网上也总结了很多,我在这就不再讲原理,稍微梳理一下:

RCE:

  • http头传参(session)
  • GET/POST传参

读取文件:

  • 函数读取

但本题又过滤了很多字符串,导致无法使用,所以只讲第一种方法

解题

  1. http头传参(session)

总结思路

  • 因为打开网址后发现没什么东西,首先思考有无后台,扫描器可否扫描出来
  • 代码审计,要知道那一句话是无参数RCE,只能使用套娃类函数
  • session_id可以获取会话id,通过此方法达到传参的目的(此方法在其他题目上是否也可以运用还在尝试)

知识点

  • 信息泄露
  • 代码审计(无参数RCE)

刷题[GXYCTF2019]禁止套娃的更多相关文章

  1. [GXYCTF2019]禁止套娃 1 &无参数RCE

    [GXYCTF2019]禁止套娃 1 啥都没有那只能上扫描器来一探究竟了. 扫完没有啥结果,但网上找了一下说是git泄露,但是我这里显示了403. <?php include "fla ...

  2. 0xctf[No parameters readfile](魔改版[GXYCTF2019]禁止套娃)

    阅读本文前建议先阅读本站中的另一篇文章:[GXYCTF2019]禁止套娃 重要参考链接:http://www.heetian.com/info/827 Leon师傅魔改了[GXYCTF2019]禁止套 ...

  3. [BJDCTF 2nd]old-hack && [GXYCTF2019]禁止套娃

    [BJDCTF 2nd]old-hack 页面很有意思 同时也告诉了我们是THINKPHP5,我们只需要寻找THINKPHP5的漏洞就可以了. https://www.codercto.com/a/5 ...

  4. [GXYCTF2019]禁止套娃(无参RCE)

    [GXYCTF2019]禁止套娃 1.扫描目录 扫描之后发现git泄漏 使用githack读取泄漏文件 <?php include "flag.php"; echo &quo ...

  5. [GXYCTF2019]禁止套娃

    0x00 知识点 无参数RCE eval($_GET['exp']); 参考链接: https://skysec.top/2019/03/29/PHP-Parametric-Function-RCE/ ...

  6. 刷题[GXYCTF2019]BabySQli

    解题思路 只有一个登陆框,查看源码,链接到search.php后发现注释中有这样一段内容 MMZFM422K5HDASKDN5TVU3SKOZRFGQRRMMZFM6KJJBSG6WSYJJWESSC ...

  7. ubuntu下vim配置(刷题和比赛两套)

    1. 平时刷题练习使用 "mswin.vim 插件提供windows下的编辑快捷键功能 source $VIMRUNTIME/mswin.vim behave mswin set nu se ...

  8. ZJOI2019一轮停课刷题记录

    Preface 菜鸡HL终于狗来了他的省选停课,这次的时间很长,暂定停到一试结束,不过有机会二试的话还是可以搞到4月了 这段时间的学习就变得量大而且杂了,一般以刷薄弱的知识点和补一些新的奇怪技巧为主. ...

  9. NOIp2018停课刷题记录

    Preface 老叶说了高中停课但是初中不停的消息后我就为争取民主献出一份力量 其实就是和老师申请了下让我们HW的三个人听课结果真停了 那么还是珍惜这次机会好好提升下自己吧不然就\(AFO\)了 Li ...

随机推荐

  1. webstorm激活码2020--定期更新

    2020年8月22日更新 一般错误关闭软件重填即可,key is invalid 错误需要恢复破解或者重装,才能使用 V8AF5QDT5R-eyJsaWNlbnNlSWQiOiJWOEFGNVFEVD ...

  2. C++数的表示

    二进制B 八进制O 十进制D 十六进制H / 0x十六进制 十进制数转换成R进制数:整数部分除基取余,上右下左:小数部分乘基取整,上左下右.   浮点数的阶用一种称为移码的编码表示方法,方便对阶.阶的 ...

  3. ACM study day3

    今天练了二分和快速幂,题目挺难的,挑几个我做上的说一下吧. 先给出几个二分和快速幂的模板函数: 二分 void BS(int m) { int x=,y=a[m-]-a[]; while(y-x> ...

  4. 区块链入门到实战(27)之以太坊(Ethereum) – 智能合约开发

    智能合约的优点 与传统合同相比,智能合约有一些显著优点: 不需要中间人 费用低 代码就是规则 区块链网络中有多个备份,不用担心丢失 避免人工错误 无需信任,就可履行协议 匿名履行协议 以太坊(Ethe ...

  5. Node.js的基础知识点

    一,语言 和 环境(平台) 之间的关系 1,浏览器环境 中的 Javascript 浏览器中 Javascript 的组成部分 ECMAScript核心 + DOM + BOM 2,Node环境 中的 ...

  6. secureCRT中sftp的使用

    securecrt 按下ALT+P就开启新的会话 进行ftp操作.输入:help命令,显示该FTP提供所有的命令pwd: 查询linux主机所在目录(也就是远程主机目录)lpwd: 查询本地目录(一般 ...

  7. Android开发之数据存储——SharedPreferences基础知识详解,饿补学会基本知识,开发者必会它的用法。

    一.数据存储选项:Data Storage --Storage Options[重点] 1.Shared Preferences Store private primitive data in key ...

  8. Unity中利用柏林噪声(perlinnoise)制作摇摆效果

    perlinnoise是unity中Mathf下的一个函数,需要两个float参数x和y进行采样,返回一个0-1的float型. 项目里经常要随机摇摆某些东西,比如摄像机,某个随机运动的目标等等,都可 ...

  9. IMGUI

    https://github.com/zwcloud/ImGui https://github.com/ocornut/imgui https://usingcpp.wordpress.com/201 ...

  10. OpenJ_Bailian - 2995-登山(两遍最长上升子序列+枚举顶点)

    五一到了,PKU-ACM队组织大家去登山观光,队员们发现山上一个有N个景点,并且决定按照顺序来浏览这些景点,即每次所浏览景点的编号都要大于前一个浏览景点的编号.同时队员们还有另一个登山习惯,就是不连续 ...