热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[BJDCTF2nd]oldhack&&[GXYCTF2019]禁止套娃

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

[BJDCTF 2nd]old-hack

技术分享图片

 

 页面很有意思

同时也告诉了我们是THINKPHP5,我们只需要寻找THINKPHP5的漏洞就可以了。

https://www.codercto.com/a/54587.html

可以看这篇文章,我们使用里面的payload命令执行

技术分享图片

 

 cat /flag一下

技术分享图片

 

 获得flag

 

 


[GXYCTF2019]禁止套娃

技术分享图片

 

 源代码里面没有什么提示,抓包也没有发现什么异常,感觉没什么思路,只能拿出御剑进行爆破,看有没有源代码泄露。

但是御剑扫了之后也没有线索,这里没有想到是.git泄露,参考了其他师傅的博客。

知道是.git泄露了之后,我们使用githack将源代码下载下来

技术分享图片

 

 


include "flag.php";
echo "flag在哪里呢?
";
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__);
?>

  第一个禁止我们使用php伪协议进行读取文件,第二个过滤使用了:


/[^\W]+\((?R)?\)/

  这种正则就是无参数函数的校验,只允许这种格式的函数


a(b(c()));
a();

  而禁止带参数的函数,如下


a(‘123‘);

  所以我们需要使用无参数函数读取flag文件。

同时在第三层过滤中,过滤了一些关键字,这些关键字在很多重要函数中都用到了,过滤之后减少了我们能使用读取flag文件的函数。

 参考一叶飘零师傅的博客:https://skysec.top/2019/03/29/PHP-Parametric-Function-RCE/

因为过滤了et关键字,所以文章中的getenv(),getallheaders(),get_defined_vars()三个函数都不能使用

尝试使用第四种方法session_id()函数

技术分享图片

 

 

因为php默认是不主动使用Session,所以使用 session之前需要通过 session_start() 开启session选项

session_id()用来获取当前PHOSESSID的值,而PHPSESSID允许字母和数字出现,所以我们自己手动设置PHPSESSID为flag.php,用来读取flag.php文件。

在飘零师傅的博客中,虽然用到了hex2bin函数,而在黑名单中禁用了hex关键字,但是由于PHPSESSID中我们设置flag.php是允许的,所以不需要使用hex2bin函数

技术分享图片

 

 

第五种方法是使用dirname() & chdir()等函数来进行任意文件读取

简单来说,我们要拿到flag.php的文件名,然后使用readfile函数将文件内容输出。

首先我们需要知道flag.php在哪个目录下,

我们可以使用getchwd() 函数返回当前工作目录,然后使用scandir()进行目录遍历,但是这里的et将getchwd函数过滤了,我们需要遍历当前目录,就需要获取到代表当前目录的.

这里使用localeconv() 函数

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

技术分享图片

 

 可以看到其函数返回的第一个元素是小数点字符,即 .

接下来是如何取到第一个元素,使用current()函数

技术分享图片

 

 每个数组中都有一个内部的指针指向它的"当前"元素,初始指向插入到数组的第一个元素,所以我们使用current()函数就可以取到数组的第一个元素,这里配合localeconv()函数,就能取到点

技术分享图片

 

 技术分享图片

 

 接下来我们跟飘零师傅的思路一样,使用scandir()函数输出当前文件夹下的文件名。

技术分享图片

 

 看到了flag.php文件,在数组的第四个位置,也是数组的倒数第二个位置

我们使用array_reverse函数将数组反向之后,再使用next函数就可以取到数组中的第二个元素,即:

技术分享图片

 

技术分享图片

 

 可以看到已经获取到了flag.php的文件名,使用readfile进行读取即可

技术分享图片

 

 

参考博客:

https://skysec.top/2019/03/29/PHP-Parametric-Function-RCE/

https://www.suk1.top/2020/02/05/GXY%E5%A5%97%E5%A8%83/


推荐阅读
  • Python 日志记录模块详解
    日志记录机制是软件开发中不可或缺的一部分,它帮助开发者追踪和调试程序运行时的各种异常。Python 提供了内置的 logging 模块,使我们在代码中记录和管理日志信息变得更加方便。本文将详细介绍如何使用 Python 的 logging 模块。 ... [详细]
  • 本文详细探讨了BCTF竞赛中窃密木马题目的解题策略,重点分析了该题目在漏洞挖掘与利用方面的技巧。 ... [详细]
  • 使用Echarts for Weixin 小程序实现中国地图及区域点击事件
    本文介绍了如何使用Echarts for Weixin在微信小程序中构建中国地图,并实现区域点击事件。包括效果展示、条件准备和逻辑实现的具体步骤。 ... [详细]
  • 树莓派4B:安装基础操作系统指南
    本文将详细介绍如何为树莓派4B安装基础操作系统,包括所需材料、镜像下载、镜像烧录以及更换国内源等步骤。 ... [详细]
  • 1#include2#defineM1000103#defineRGregister4#defineinf0x3f3f3f3f5usingnamespacestd;6boolrev ... [详细]
  • SQL Server 存储过程实践任务(第二部分)
    本文档详细介绍了三个SQL Server存储过程的创建与使用方法,包括统计特定类型客房的入住人数、根据房间号查询客房详情以及删除特定类型的客房记录。 ... [详细]
  • 材料光学属性集
    材料光学属性集概述了材料在不同光谱下的光学行为,包括可见光透射率、太阳光透射率等关键参数。 ... [详细]
  • 题目编号:2049 [SDOI2008]Cave Exploration。题目描述了一种动态图操作场景,涉及三种基本操作:断开两个节点间的连接(destroy(a,b))、建立两个节点间的连接(connect(a,b))以及查询两节点是否连通(query(a,b))。所有操作均确保图中无环存在。 ... [详细]
  • 本文详细介绍了进程、线程和协程的概念及其之间的区别与联系。进程是在内存中运行的独立实体,具有独立的地址空间和资源;线程是操作系统调度的基本单位,属于进程内部;协程则是用户态下的轻量级调度单元,性能更高。 ... [详细]
  • 题目描述:计算从起点到终点的最小能量消耗。如果下一个单元格的风向与当前单元格相同,则消耗为0,否则为1。共有8个可能的方向。 ... [详细]
  • AngularJS 控制器详解
    本文通过一个示例详细介绍了 AngularJS 控制器的使用方法,并探讨了控制器之间数据共享的问题。 ... [详细]
  • Android 属性 allowBackup 的安全风险分析
    在 Android API Level 8 及以上版本中,系统提供了一种机制来备份和恢复应用程序数据。通过设置 allowBackup 属性,开发者可以控制是否允许这种备份和恢复功能。然而,这一功能也带来了潜在的安全风险。 ... [详细]
  • Ubuntu 环境下配置 LAMP 服务器
    本文详细介绍了如何在 Ubuntu 系统上安装和配置 LAMP(Linux、Apache、MySQL 和 PHP)服务器。包括 Apache 的安装、PHP 的配置以及 MySQL 数据库的设置,确保读者能够顺利搭建完整的 Web 开发环境。 ... [详细]
  • 在编程实践中,正确管理和释放资源是非常重要的。本文将探讨 Python 中的 'with' 关键字及其背后的上下文管理器机制,以及它们如何帮助我们更安全、高效地管理资源。 ... [详细]
  • 在 Django 模型中,ForeignKey 的 on_delete 参数定义了当关联对象被删除时,当前模型实例的行为。本文详细解释了 on_delete 的各个选项及其具体作用。 ... [详细]
author-avatar
loto1115丨
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有