ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

[GXYCTF2019]禁止套娃 WP

2021-12-21 15:02:40  阅读:243  来源: 互联网

标签:套娃 file GET preg flag exp WP php GXYCTF2019


知识点

  • 目录扫描
  • 关键字绕过
  • 无参RCE

做题经过

看到题目一脸懵,只有一句话:flag在哪里呢?,随便输入flag.php发现没有404,说明flag就在当前目录下,然后就没思路啦。看WP发现要进行目录扫描,使用dirsearch进行目录扫描,由于出现大量429,所以加上-s 2(这个数字视情况可大可小),扫描出git目录,存在git源码泄漏,原理,可以使用GitHack工具还原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__);
?>

阅读源码可知这是RCE漏洞(@eval($_GET['exp']);),通过传入的exp命令执行得到flag;

过滤分析

第一个preg_match()过滤了data://,filter://,phar://,基本不能用伪协议读取flag.
第二个preg_replace()使用了递归正则表达式,即(?R)会被替换为/[a-z,_]+\((?R)?\)/,也就意味着我们只能输入类似a(),b(a())形式的命令,(括号内不能有字符)
这就是无参RCE,这篇文章给出了5种利用技巧,总结如下:

  • getenv()
  • getallheaders()
  • get_defined_vars()
  • session_id()
  • getcwd()&dirname()&chdir()
    通过第三个preg_match()只get被过滤,因此只有session_id()可以利用

利用方法

首先PHP读取文件大致有以下几种方法
1.file_get_contents(),函数把整个文件读入一个字符串中,返回字符串
2.highlight_file(),对文件语法高亮显示
3.show_source(),是 highlight_file() 的别名。
4.fgets(),与c语言类似,从文件指针中读取一行
5.file(),把整个文件读入一个数组中,返回数组
6.readfile(),读入一个文件并写入到输出缓冲
通过以上分析知道只能用highlight_file(),show_source(),file(),readfile()
综上,可先在cookie中设置PHPSESSID=flag.php,再利用session_start()开启session,再利用session_id()得到flag.php,最后使用上述读文件的函数得到flag。

另一种解法

localeconv() 函数返回一包含本地数字及货币格式信息的数组,数组第一项为.,第二项为..,可以用current()得到第一项,于是print_r(scandir(current(localeconv()))便会输出当前目录下所有文件,得到第三项的flag.php可用array_rand()函数,再用array_flip将键值交换,就得到:exp
?exp=print_r(array_rand(array_flip(scandir(current(localeconv())))));

标签:套娃,file,GET,preg,flag,exp,WP,php,GXYCTF2019
来源: https://www.cnblogs.com/crookie111/p/15715323.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有