[网鼎杯 2020 朱雀组]phpweb1

news/2024/5/19 22:48:03 标签: php, ctf

提示

  1. call_user_func()函数
  2. 先通过php内置函数来进行代码审计
  3. 绕过system(##不止一种方法)

拿到题目养成一个好的习惯先抓个包

从抓到的包以及它首页的报错来看,这里死活会post传输两个参数func以及p

func传输函数,而p则是传输参数的内容

这里直接尝试system读取文件列表

从返回页面来看,对func做了防护的测试一下哪些可以用

####这里其实可以通过一个php的特性绕过直接执行命令,但是还是先按着作者的想法来做

随便输了几个函数,他这里就报出了call_user_func()

call_user_func()这里似乎是利用的这个函数然后执行用户输入的然后去调用内部函数

#####本文最后做了简单的讲解

首先应该通过php内置函数来尝试读取index.php页面

这里可以使用highlight_file()高亮显示页面或者file_get_contents()来读取文件

####这里注意,此页面每五秒会刷新一次

这里过滤的还是很完整,基本上所有的命令执行函数都过滤干净了了

这里我的思路是通过反序列化传入参数绕过网站对func的防护,通过反序列化后执行system函数

先随便去找个在线php做一个序列化出来

首先我们知道了他接收参数的变量是func和p那么序列化也得一样,类也得一样(class Test)

这里url编码了一下应为怕有些编码不识别

php"><?php
class Test {
	var $p = "ls /";
	var $func = "system";
}

echo urlencode(serialize(new Test()));
?>

到这一步就可以进行的命令执行了

O%3A4%3A%22Test%22%3A2%3A%7Bs%3A1%3A%22p%22%3Bs%3A4%3A%22ls+%2F%22%3Bs%3A4%3A%22func%22%3Bs%3A6%3A%22system%22%3B%7D

这里直接去找了根目录找flag但是没有

尝试使用find去找

找到flag位置直接去读取

/tmp/flagoefiu4r93

####注意,服务器运行的很慢,使用find函数需要等待服务器查找一会儿

获得flag

现在来说第二种方法

php里反斜杠\会被认定为特殊字符,如果在system中加上反斜杠例如\system就会绕过验证

通过此方法也可以成功获得shell来获取flag

关于call_user_cunc()

call_user_func函数类似于一种特别的调用函数的方法,它可以调用php内部函数也可以调用用户自定定义的函数

例如:

<?php
function barber($type)
{
echo "You wanted a $type haircut, no problem\n";
}
call_user_func('barber', "mushroom");
call_user_func('barber', "shave");
?>

以上示例会输出:

You wanted a mushroom haircut, no problem
You wanted a shave haircut, no problem

其余更详细内容可自行去参考php官方内容


http://www.niftyadmin.cn/n/5252920.html

相关文章

2023年11月10日 Go生态洞察:十四年Go的成长之路

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

linux中xarray与maple结构简析

xarray 简述 xarray是radixtree的一种实现&#xff0c;它部分使用了rcu机制来代替radixtree的加锁。 node结构 node的基本结构&#xff1a; struct xa_node {unsigned char shift; // 表示index取地址的高多少bit作下层的slot indexunsigned char offset; // node在上层结…

uView框架的安装与Git管理

参考链接&#xff1a;Http请求 | uView - 多平台快速开发的UI框架 - uni-app UI框架 安装 打开我们项目的cmd进行下载&#xff1a; yarn add uview-ui 首先我们要确定&#xff0c;未下载前的文件目录以及下载后&#xff0c;是多了个文件目录node_modules 下载完成之后我们就…

C现代方法(第27章)笔记——C99对数学计算的新增支持

文章目录 第27章 C99对数学计算的新增支持27.1 <stdint.h>: 整数类型(C99)27.1.1 <stdint.h>类型27.1.2 对指定宽度整数类型的限制27.1.3 对其他整数类型的限制27.1.4 用于整型常量的宏 27.2 <inttype.h>: 整数类型的格式转换(C99)27.2.1 用于格式指定符的宏…

windows 11 家庭版怎样安装docker

这里写自定义目录标题 一、安装wsl1、开启硬件虚拟化2、安装wsl3.升级WSL到WSL24、下载安装linux分支5、测试运行6、出现如下问题7、迁移到非系统盘8、文件资源管理器9、配置网络10、更新和升级 一、安装wsl 1、开启硬件虚拟化 检查是否开启Hyper-V, 适用于Linux的Windows子系…

芯片量产导入知识

什么是芯片量产 从芯片功能设计到生产制造、测试等环节&#xff0c;每一个环节都至关重要。 对于保障大规模发货后芯片指标表现的一致性&#xff0c;以及产品应用生命周期内的稳定性和可靠性&#xff0c;需要考虑多种因素。以下是一些相关的观点&#xff1a; 可量产性设计&am…

MySQl int(1)、int(20) 的区别到底在哪里

MySQl int(1)、int(20) 的区别到底在哪里 常思一二&#xff0c;便得自然… int(1)数据类型介绍 在MySQL中&#xff0c;INT(1) 是一种定义整数类型的数据字段&#xff0c;其中的数字表示显示宽度而不是存储范围。具体说&#xff0c;INT(1) 中的数字 1 表示显示宽度&#xff0…

Python ipaddress模块介绍

目录 创建 Address/Network/Interface 对象 关于IP版本的说明 IP主机地址 定义网络 主机接口 审查 Address/Network/Interface 对象 Network 作为 Address 列表 比较运算 将IP地址与其他模块一起使用 实例创建失败时获取更多详细信息 概述 本文档旨在简要介绍 ipaddr…