Cyber Anakins Lightsaber - A Minishell-based backdoor
<?php
require("std.php");
function BEGIN($page)
{
?><html>
<head>
<meta charset=UTF-8>
<title>Библиотеки Королёва</title>
<meta name="viewport" content="initial-scale=0.55">
<link rel="stylesheet" href="<?php print $css; ?>?10" type="text/css">
<link rel="icon" href="favicon.ico" type="image/x-icon">
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
<meta name="keywords" content="Библиотека, книги, читать, мероприятия, VR, роботы, Королёв, компьютерные курсы, досуг, кружок, шахматы, мастер-классы">
<meta name="description" content="Официальный сайт Централизованной Библиотечной Системы города Королёв (МБУК ЦБС)">
<style>
body { padding:0 0 0 0; margin: 0 0 0 0; }
.headerCell { background-color:#234177; }
.headerCellDiv { height:150px; position:relative; }
.mainlogo { position:absolute; left:10; top:10 }
.menuLine
{
position:absolute;
left:150px;
top:124px;
overflow:hidden
}
.menuItem, .menuItemSel
{
float:left;
font-size:16px;
font-family:Arial;
padding-left:16;
padding-right:16;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
cursor:pointer;
}
.menuItem a, .menuItemSel a
{
font-size:18px;
color:white;
transition-property: color;
transition-duration: 500ms;
text-decoration:none;
}
.menuItem div, .menuItemSel div
{
background-color:#99ddff;
transform:translate(-50%,0) scale(0,1);
height:2px;
}
.menuItemSel a
{
font-weight:bold;
color:#ffff99;
}
.menuItem:hover a, .menuItemSel:hover a
{
color:#99ddff;
}
.menuItem:hover div, .menuItemSel:hover div
{
transform:translate(0,0) scale(1,1);
transition-property: background-color, transform;
transition-duration: 500ms;
}
.messangerLine
{
position:absolute;
left:170px;
top:4px;
}
.messangerLink
{
float:left;
cursor:pointer;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
cursor:pointer;
font-family:Tahoma;
padding-right:16;
}
.messangerLink a
{
transition-duration: 500ms;
transition-property:color;
color:#99AACC;
font-size:12px;
position:relative;
text-decoration:none;
top:-8px;
}
.messangerLink:hover a
{
color:#99EEFF;
}
.messangerLink img
{
transition-duration: 500ms;
transition-property:filter;
width:24px;
height:24px;
margin-right:8px;
filter: brightness(0) saturate(100%) invert(75%) sepia(35%) saturate(347%) hue-rotate(182deg) brightness(85%) contrast(85%);
}
.messangerLink:hover img
{
filter: brightness(0) saturate(100%) invert(86%) sepia(21%) saturate(1450%) hue-rotate(161deg) brightness(103%) contrast(105%);
}
</style>
</head>
<body>
<table width=100% height=100% cellspacing=0 cellpadding=0>
<tr>
<td height=1% class=headerCell>
<div class=headerCellDiv>
<img align=right style='margin-top:30px; margin-right:10px' id=forVisuallyImpairedBtn src='<?php print _CD_("vi",'0')=='0' ? "forvisuallyimpaired.png" : "normalversion.png"; ?>' width=136 height=74 class=hoverImg style='cursor:pointer' onclick='<?php print _CD_("vi",'0')=='0' ? "switchToVisualImpaired()" : "switchToNormalVersion()"; ?>' title='<?php print _CD_("visuallyimpaired",'0')=='0' ? "Версия для слабовидящих" : "Переключиться на обычную версию"; ?>'>
<img src='mainlogo.png' width=391 height=140 class=mainlogo>
<script>
var blockMenuClick = false;
function menuClick(sender)
{
if (blockMenuClick) return;
blockMenuClick = true;
var a = sender.firstChild;
while(a)
{
if (a.tagName=="A")
{
a.click();
return;
}
}
}
function menuAClick(sender)
{
blockMenuClick = true;
}
</script>
<div class=messangerLine>
<div class=messangerLink onclick='menuClick'><img src='vk-logo.png'><a href='https://vk.com/cbskorolev' target=blank onclick='menuAClick(this)'>ВКонтакте</a></div>
<div class=messangerLink onclick='menuClick'><img src='vk-logo.png'><a href='https://vk.com/chitaemvkoroleve' target=blank onclick='menuAClick(this)'>ВКонтакте "Читаем в королёве"</a></div>
</div>
<div class=menuLine>
<?php
function MenuItem($text, $href,$sel)
{
$cls = $sel ? "menuItemSel":"menuItem";
print "<div class=$cls onclick='menuClick(this)'><a href='$href' onclick='menuAClick(this)'>$text</a><div></div></div>\n";
}
MenuItem("Главная","index.php",$page==0);
MenuItem("Читателям","readers.php", $page==1);
MenuItem("Библиотеки","departments.php", $page==2);
MenuItem("Вопросы и ответы","forum.php", $page==3);
MenuItem("Видеотрансляции","forum.php", $page==4);
?>
</div>
</div>
</td>
</tr>
<?php
}
function MAINBEGIN()
{
?>
<tr>
<td height=99%>
<?php
}
function MAINEND()
{
?>
</td>
</tr>
<?php
}
function BOTTOM()
{
?>
<tr>
<td height=1%>
</td>
</tr>
</body>
</html>
<?php
}
function EVENTBLOCK()
{
?>
<tr>
<td height=1%>
<?php
$banners = array();
$dir = opendir("EventBanners");
while($file = readdir($dir))
{
$f = @fopen("EventBanners/$file/colors.json","r");
if ($f)
{
$json = json_decode(fread($f, 4000));
$json->bg = "EventBanners/$file/bg.jpg";
$banners[] = $json;
fclose($f);
}
}
closedir($dir);
$mysql = mysqlopen();
$news = array();
foreach($GLOBALS['filials'] as $filial=>$filialName)
{
$result = mysqli_query($mysql,
"SELECT
A.`id` as `id`,
A.`title` as `title`,
A.`impotant` as `impotant`,
A.`date` as `date`,
A.`poster` as `poster`,
A.`filial` as `filial`
FROM
libNews as A
WHERE
A.`title`<>'' AND
A.`filial`=$filial AND
DATEDIFF(NOW(),A.`date`) < 15
ORDER BY A.`impotant` DESC, A.`date` DESC
LIMIT 3");
if (mysqli_errno($mysql)) die("ERROR: ".mysqli_error($mysql)." at line ".__LINE__." of file ".__FILE__."\n");
while($row = mysqli_fetch_assoc($result))
{
$row['filialName'] = $GLOBALS['filials'][$row['filial']];
array_push($news, $row);
}
mysqli_free_result($result);
}
function NewsCompareFunc($a,$b)
{
if ($a['impotant'] < $b['impotant']) return 1;
if ($a['impotant'] > $b['impotant']) return -1;
if ($a['date'] < $b['date']) return 1;
if ($a['date'] > $b['date']) return -1;
}
usort($news, "NewsCompareFunc");
for($i=0; $i < count($news); $i++)
{
$news['date']=SQLtoDate($news['date']);
}
?>
<canvas width=100% height=600 id=eventBannerCanvas></canvas>
<script>
eventBannerCanvas = document.getElementById('eventBannerCanvas');
eventBannerCanvas.banners = <?php print json_encode2($banners); ?>;
eventBannerCanvas.news = <?php print json_encode2($news); ?>;
eventBannerCanvas.holdPeriod = 6000;
eventBannerCanvas.transationPeriod = 500;
eventBannerCanvas.stage = 0;
eventBannerCanvas.timer = 0;
eventBannerCanvas.needRedraw = true;
function __on_banner_load()
{
this.loaded = true;
eventBannerCanvas.needRedraw = true;
}
eventBannerCanvas.newsIdToBannerInx = function(newsId)
{
return newsId % this.banners.length;
}
for(var i=0; i < eventBannerCanvas.banners.length; i++)
{
eventBannerCanvas.banners[i].bgImage = new Image();
eventBannerCanvas.banners[i].bgImage.loaded = false;
eventBannerCanvas.banners[i].bgImage.onload = __on_banner_load;
eventBannerCanvas.banners[i].bgImage.src = eventBannerCanvas.banners[i].bg;
}
eventBannerCanvas.onDraw = function()
{
var width = window.innerWidth;
var bannerWidth = width;
if (bannerWidth > 1920) bannerWidth = 1920;
var bannerHeight = bannerWidth * 600 / 1920;
canvas.width = width;
canvas.height = bannerHeight;
var bgcolor = "#dddfc2";
var ctx = canvas.getContext("2d");
var drawBanner = function(newsInx, offset)
{
var bannerInx = this.newsIdToBannerInx(this.news[newsInx].id);
var bgImage = this.banners[bannerInx].bgImage;
if (!bgImage.loaded)
{
ctx.fillStyle=bgcolor;
ctx.fillRect(offset, 0, offset + width, bannerHeight);
}
else
{
var fieldWidth = (width - bannerWidth)/2;
if (fieldWidth > 0)
{
var gradient = ctx.createLinearGradient(offset, 0, offset + fieldWidth, 0);
gradient.addColorStop(0, bgcolor);
gradient.addColorStop(1, this.banners[bannerInx].outrangeColor);
ctx.fillStyle = gradient;
ctx.fillRect(offset, 0, fieldWidth, bannerHeight);
gradient = ctx.createLinearGradient(offset + width - fieldWidth, 0, offset + width, 0);
gradient.addColorStop(0, this.banners[bannerInx].outrangeColor);
gradient.addColorStop(1, bgcolor);
ctx.fillStyle = gradient;
ctx.fillRect(offset + width - fieldWidth, 0, fieldWidth, bannerHeight);
}
ctx.drawImage(bgImage, offset + fieldWidth, 0, fieldWidth, bannerWidth);
var textLeft = offset + fieldWidth + bannerWidth * 0.2;
var textWidth = bannerWidth * 0.7;
if (this.news[newsId].poster && this.news[newsId].poster!='')
{
}
}
}
};
eventBannerCanvas.onTimer = function(dT)
{
};
eventBannerCanvas.newsId = eventBannerCanvas.news[0].id;
eventBannerCanvas.bg = new Image();
eventBannerCanvas.bg.loaded = false;
eventBannerCanvas.bg.onload = __on_banner_load;
eventBannerCanvas.bg.src=eventBannerCanvas.getBgImageSrc(eventBannerCanvas.newsId);
setInterval(function() { eventBannerCanvas.onTimer(20); },20);
</script>
</td>
</tr>
<?php
}
?>
May the force be with you, always.