Cyber Anakins Lightsaber - A Minishell-based backdoor
<?php
require("design.php");
session_start();
$monthNames = array("январь","февраль","март","апрель","май","июнь","июль","август","сентябрь","октябрь","ноябрь","декабрь");
$monthNamesV = array("январе","феврале","марте","апреле","мае","июне","июле","августе","сентябре","октябре","ноябре","декабре");
function SortEvents($a, $b)
{
if (count($a['dates'])==0)
{
if (count($b['dates'])==0) return 0;
return 1;
}
if (count($b['dates'])==0) return -1;
if (!preg_match("/(\d+)\.(\d+)\.(\d\d\d\d)/",$a['dates'][0]['date'], $g)) return -1;
if (!preg_match("/(\d+)\:(\d+)/", $a['dates'][0]['since'], $g2)) return -1;
$t1 = mktime(intval($g2[1]),intval($g2[2]),0, intval($g[2]), intval($g[1]), intval($g[3]));
if (!preg_match("/(\d+)\.(\d+)\.(\d\d\d\d)/",$b['dates'][0]['date'], $g)) return -1;
if (!preg_match("/(\d+)\:(\d+)/", $b['dates'][0]['since'], $g2)) return -1;
$t2 = mktime(intval($g2[1]), intval($g2[2]), 0, intval($g[2]), intval($g[1]), intval($g[3]));
if ($t1 > $t2) return 1;
if ($t1 < $t2) return -1;
return 0;
}
function EventsPlane($month, $year, $printRef=true)
{
require("contacts.php");
$planes = array();
$mysql = mysqlopen();
// offline-мероприятия
$result = mysqli_query($mysql, "SELECT `title`,`desc`,`people`,`date`,`duration`,`filial`,`place`,`category` FROM libEvents WHERE MONTH(`date`)=$month AND YEAR(`date`)=$year AND `showDate`<>0 ORDER BY `date` ASC");
if (mysqli_errno($mysql)) die("ERROR: ".mysqli_error($mysql)." at line ".__LINE__." of file ".__FILE__."\n");
while($row = mysqli_fetch_assoc($result))
{
if (preg_match("/(\d+)-(\d+)-(\d+) (\d+):(\d+):\d+/", $row['date'], $g))
{
$date = $g[3] . "." . $g[2] . "." . $g[1];
$since = intval($g[4]) . ":" . $g[5];
$iSince = intval($g[4])*60 + intval($g[5]);
$iTo = $iSince + intval($row['duration']);
$h = intval($iTo / 60);
$m = intval($iTo % 60);
if (strlen($m) < 2) $m = "0$m";
$to = "$h:$m";
$event = array('desc'=>0,
'name'=>$row['title'],
'subname'=>'',
'category'=>$row['category'],
'people'=>$row['people'],
'descText'=>$row['desc'],
'filial'=>$row['filial'],
'place'=>$row['place'],
'dates'=>array(0=>array('date'=>$date, 'since'=>$since, 'to'=>$to)));
array_push($planes, $event);
}
}
mysqli_free_result($result);
// системные мероприятия
$result = mysqli_query($mysql, "SELECT
libProgDescriptions.`name` as `name`,
libProgDescriptions.`subname` as `subname`,
libProgDescriptions.`category` as `category`,
libProgDescriptions.`desc` as `descText`,
libProgDescriptions.`people` as `people`,
libPrograms.`filial` as `filial`,
libPrograms.`weekDay` as `weekDay`,
libPrograms.`since` as `since`,
libPrograms.`to` as `to`,
libPrograms.`desc` as `desc`
FROM
libPrograms, libProgDescriptions
WHERE
libProgDescriptions.`id`=libPrograms.`desc` AND
libPrograms.`filial`<>1
ORDER BY libPrograms.`desc` ASC
");
if (mysqli_errno($mysql)) die("ERROR: ".mysqli_error($mysql)." at line ".__LINE__." of file ".__FILE__."\n");
$event = null;
while($row = mysqli_fetch_assoc($result))
{
$desc = $row['desc'];
if ($event===null || $desc!=$event['desc'])
{
if ($event!==null) array_push($planes, $event);
$event = array('desc'=>$desc,
'name'=>$row['name'],
'subname'=>$row['subname'],
'category'=>$row['category'],
'people'=>$row['people'],
'descText'=>$row['descText'],
'filial'=>$row['filial'],
'place'=>'',
'dates'=>array());
}
$weekDay = intval($row['weekDay']);
$t = mktime(12,0,0, $month, 1, $year);
$tm = localtime($t, true);
$dayDelta = $weekDay - $tm['tm_wday'];
if ($dayDelta < 0) $dayDelta+=7;
$t+=$dayDelta*24*3600;
while(true)
{
$tm = localtime($t, true);
if ($tm['tm_mon']+1 != $month) break;
array_push($event['dates'], array('date'=>date('d.m.Y',$t),
'since'=>preg_replace("/^(\d+):(\d+).*/","$1:$2", $row['since']),
'to'=>preg_replace("/^(\d+):(\d+).*/","$1:$2", $row['to'])));
$t+=7 * 24 * 3600;
}
}
if ($event!==null) array_push($planes, $event);
mysqli_free_result($result);
usort($planes, "SortEvents");
print "<table width=100% cellspacing=0 cellpadding=4 border=1 bordercolor=black>\n";
print "<tr>\n";
print "<th width=1% align=center nowrap>№<br>п/п</th>\n";
print "<th width=30% align=center>Наименование мероприятия</th>\n";
print "<th width=30% align=center>Наименование филиала (полное)<br>(адрес)</th>\n";
print "<th width=1% align=center nowrap>Дата<br>(д.м.г)</th>\n";
print "<th width=1% align=center nowrap>Время<br>(с... до...)</th>\n";
print "<th width=1% align=center nowrap>Категория</th>\n";
print "<th width=1% align=center nowrap>Платно/<br>бесплатно</th>\n";
if (!$printRef) print "<th width=1% align=center>Ожидаемое<br>кол-во<br>посетителей</th>\n";
print "<th width=30% align=center>Краткое содержание мероприятия</th>\n";
print "</tr>\n";
$n = 1;
foreach($planes as &$event)
{
print "<tr>\n";
$cnt = count($event['dates']);
if ($cnt > 1) $rowSpan = " rowspan=$cnt"; else $rowSpan = '';
print "<td valign=top$rowSpan>$n.</td>\n";
if ($event['subname']!='' && $event['subname']!=null)
{
print "<td valign=top$rowSpan>«".$event['name']."» — ".$event['subname']."</td>\n";
}
else
{
print "<td valign=top$rowSpan>".$event['name']."</td>\n";
}
$filial = $event['filial'];
print "<td valign=top align=center$rowSpan>";
if ($printRef) print "<a href='filial.php?filial=$filial'>";
print preg_replace("/(библиотека)\s+№/iu","$1-филиал №",$GLOBALS['filials'][$filial]);
if ($printRef) print "</a>";
if ($event['place']!='' && $event['place']!=null)
{
print "<br>(".$event['place'].")";
}
else
if ($filial!=-1)
{
print "<br>(".$GLOBALS['filialContacts'][$filial]['address'].")";
}
print "</td>\n";
print "<td valign=top align=center>".$event['dates'][0]['date']."</td>\n";
print "<td valign=top align=center nowrap>".$event['dates'][0]['since']."-".$event['dates'][0]['to']."</td>\n";
if ($event['category'] == 0) $event['category']=3;
print "<td valign=top align=center$rowSpan nowrap>".$event['category']."+</td>\n";
print "<td valign=top align=center$rowSpan nowrap>б/п</td>\n";
if (!$printRef) print "<td valign=top align=center nowrap>".$event['people']."</td>\n";
print "<td valign=top $rowSpan>"._html_br_($event['descText'])."</td>\n";
print "</tr>\n";
for($i=1; $i<count($event['dates']); $i++)
{
print "<tr>\n";
print "<td valign=top align=center>".$event['dates'][$i]['date']."</td>\n";
print "<td valign=top align=center>".$event['dates'][$i]['since']."-".$event['dates'][$i]['to']."</td>\n";
if (!$printRef) print "<td valign=top align=center nowrap>".$event['people']."</td>\n";
print "</tr>\n";
}
$n++;
}
print "</table>";
}
if (isset($_GET['openas']))
{
$month = intval(_GET_('month'));
$y = intval($month / 12);
$m = $month % 12 + 1;
if ($_GET['openas']=='word')
{
header("Content-Type: application/msword; charset=UTF-8", true);
print "<html>\n";
print "<head><meta charset=UTF-8></head>\n";
print "<body>\n";
print "<style>table { border-collapse: collapse; }</style>\n";
print "<h1 style='text-align:center'>План культурно-массовых мероприятий офлайн,<br>проводимых в ".$monthNamesV[$m-1]." $y года в МБУК ЦБС г. о. Королёв</h1>\n";
EventsPlane($m, $y, false);
print "</body></html>";
exit(0);
}
if ($_GET['openas']=='excel')
{
header("Content-Type: application/excel; charset=UTF-8", true);
print "<html>\n";
print "<head><meta charset=UTF-8></head>\n";
print "<body>\n";
print "<style>table { border-collapse: collapse; }</style>\n";
EventsPlane($m, $y, false);
print "</body></html>";
exit(0);
}
}
if (isset($_GET['filial']))
{
$filial = intval($_GET['filial']);
if ($filial == 1 || !isset($GLOBALS['filials'][$filial])) die("ERROR: Неверный номер филиала!");
$mysql = mysqlopen();
TOP(-1);
LEFTCOLUMN();
CHANNELS();
MAINCOLUMN();
$canEdit = AdminAuth(RIGHT_EDIT_PROGRAMS, $filial);
if ($canEdit)
{
print "<h1>Перечень системных мероприятий</h1>\n";
print "<p>Данный раздел отображается только для администратора.
Здесь необходимо сформировать описание регулярных мероприятий,
проводимых в библиотеке без привязки ко времени. Расписание этих мероприятих задавается в следующем разделе.</p>\n";
print "<script src='progeditor.js'></script>\n";
print "<br><br><center>[ <a href='#' onclick='newProgDesc($filial)'>Новое системное мероприятие</a> ]</center><br>\n";
print "<ul style='font-size:18px'>\n";
$result = mysqli_query($mysql, "SELECT `id`,`name`,`subname` FROM libProgDescriptions WHERE `filial`=$filial ORDER BY `id` DESC");
if (mysqli_errno($mysql)) die("ERROR: ".mysqli_error($mysql)." at line ".__LINE__." of file ".__FILE__."\n");
while($row = mysqli_fetch_assoc($result))
{
$id = $row['id'];
$name = $row['name'];
if (trim($name) == "") $name = "<Мероприятие без названия>";
print "<li><b><a href=\"progdesc.php?id=$id\">"._html_($name)."</a></b>\n";
print "<nobr>";
print "<img class=editBtn title='Редактировать мероприятие' src='edit.png' onclick='editProgDesc($id, true)'>";
print "<img class=editBtn title='Удалить мероприятие' src='del32x32.png' onclick='delProgDesc($id)'>";
print "</nobr>";
print "<div style='font-size:14px'>"._html_($row['subname'])."</div>";
print "</li>\n";
}
print "</ul><br><br>\n";
}
print "<h1>".$GLOBALS['filials'][$filial].". Программа мероприятий</h1>\n";
print "<h2>Системные мероприятия</h2>\n";
$weekDays = array(1=>"Понедельник",2=>"Вторник",3=>"Среда",4=>"Четверг",5=>"Пятница",6=>"Суббота",0=>"Воскресенье");
?>
<center>
<table>
<tr>
<td>
<?php
foreach($weekDays as $w=>$weekDayName)
{
$start = "<div class=card>\n";
$start.= "<div class=cardWeekDay>$weekDayName";
if ($canEdit) $start.="<img class=editBtn title='Редактировать расписание' src='edit.png' onclick='editProg($filial, $w)'>";
$start.= "</div>\n";
$start.= "<table width=100% cellspacing=0>\n";
if ($canEdit)
{
print $start;
$start = "";
}
$result = mysqli_query($mysql,
"SELECT
libPrograms.`since` as `since`,
libPrograms.`to` as `to`,
libPrograms.`desc` as `desc`,
libProgDescriptions.`name` as `name`,
libProgDescriptions.`subname` as `subname`,
libProgDescriptions.`needRegister` as `needRegister`,
libPrograms.`comment` as `comment`
FROM
libPrograms, libProgDescriptions
WHERE
libPrograms.`filial`=$filial AND
libPrograms.`weekDay`=$w AND
libProgDescriptions.`id`=libPrograms.`desc`
ORDER BY libPrograms.`since` ASC");
if (mysqli_errno($mysql)) die("ERROR: ".mysqli_error($mysql)." at line ".__LINE__." of file ".__FILE__."\n");
while($row = mysqli_fetch_assoc($result))
{
print $start;
$start = '';
$since = preg_replace("/(\d+):(\d+):(\d+)/","$1:$2", $row['since']);
$to = preg_replace("/(\d+):(\d+):(\d+)/","$1:$2", $row['to']);
$desc = $row['desc'];
print "<tr>\n";
print "<td class=timeCol>";
print "<table cellspacing=0 cellpadding=0>";
print " <tr><td class=timeSinceTo>с </td><td class=timeValue>$since</td></tr>\n";
print " <tr><td class=timeSinceTo>до </td><td class=timeValue>$to</td>\n";
print "</table><td>\n";
print "<td class=progCol><a href='progdesc.php?id=$desc' class=prog onclick='showDesc($desc);return false;'>"._html_($row['name'])."</a>";
if ($row['comment']!='' || $row['subname'])
{
print "<div class=subprog>";
print _html_($row['subname']);
if ($row['comment']!='' && $row['subname']!='') print ". ";
print _html_($row['comment']);
}
if ($row['needRegister']==1)
{
print " <span class=subinfo>(По предварительной записи)</span>\n";
}
print "</td>\n";
print "</tr>\n";
}
if ($start == '')
{
print "</table>\n";
print "</div>\n\n\n";
}
}
?>
</td>
</tr>
</table>
</center>
<script>
function showDesc(id)
{
sendXHR('progdesc.php?id='+id+'&embeded=1', null,
function(response)
{
messageBox(response, 'О мероприятии');
},
function(error)
{
errorBox(error);
});
}
</script>
<?php
$firstEvent = true;
$canEdit = false;
if (AdminAuth(RIGHT_EDIT_EVENTS | RIGHT_SUPER_ADMIN)) $canEdit = true;
$sql = "`title`<>'' AND ";
if ($canEdit)
{
FILIALLISTINFO();
print "<script src='eventeditor.js'></script>\n";
$sql='';
$firstEvent = false;
print "<h2>События библиотеки</h2>";
print "<center>[ <a href='#' onclick='newEvent($filial)'>Новое событие</a> ]</center>\n";
}
$result = mysqli_query($mysql,
"SELECT
`id`,
`title`,
`date`,
`poster`,
`desc`,
`filial`,
`category`,
`place`
FROM
libEvents
WHERE
$sql
`filial`=$filial AND
DATEDIFF(NOW(),`date`)<=0
ORDER BY `date` DESC");
if (mysqli_errno($mysql)) die("ERROR: ".mysqli_error($mysql)." at line ".__LINE__." of file ".__FILE__."\n");
while($row = mysqli_fetch_assoc($result))
{
if ($firstEvent)
{
$firstEvent = false;
print "<h2>События филиала</h2>";
if ($canEdit) print "<center>[ <a href='#' onclick='newEvent()'>Новое событие</a> ]</center>\n";
}
$id = $row['id'];
print "<table class=event cellspacing=0 cellpadding=><tr><td>\n";
print "<div class=ellipseBlock data-maxheight=290>\n";
if ($row['poster']!=null && $row['poster']!='')
{
$img = "events/".$row['poster'];
print "<a href='$img' target=_blank><img border=0 align=left class=eventImg src='$img'></a>";
}
$title = $row['title'];
if ($title==null || trim($title)=='') $title="Новое событие";
print "<h2>$title";
if ($canEdit)
{
print "<nobr>";
print "<img class=editBtn title='Редактировать событие' src='edit.png' onclick='editEvent($id)'>";
print "<img class=editBtn title='Удалить событие' src='del32x32.png' onclick='delEvent($id)'>";
print "</nobr>";
}
print "</h2>";
if (preg_match("/(\d+)\-(\d+)-(\d+).*?(\d+):(\d+):\d+/", $row['date'],$g))
{
print "<div class=eventDate>". $g[3]. "." . $g[2] . "." . $g[1] . " <span>начало в</span> " . $g[4] . ":" . $g[5]. "</div>\n";
}
if ($row['filial']!=-1)
print "<div class=eventPlace>Место проведения: <a href='filial.php?filial=".$row['filial']."'>".$GLOBALS['filials'][$row['filial']]."</a></div>\n";
else
if ($row['place']!=null && $row['place']!='')
print "<div class=eventPlace>Место проведения: ".$row['place']."</div>\n";
print "<p>"._para_($row['desc'])."</p>\n";
print "<div class=eventCategory>Категория: ".$row['category']."+</div>\n";
print "</div>\n";
print "<div class=ellipseControl style='display:none' onclick='ellipseClick(this)'>Читать полностью</div>\n";
print "</td></tr></table>\n\n\n";
}
mysqli_free_result($result);
if (!$firstEvent)
{
print "<br><div class=more>[ <a href='events.php'>Архив событий</a> ]</div><br><br>";
}
?>
<hr>
<center style='margin-top:10'><input type=button onclick='history.back()' value='« Назад'></center>
<?php
MIDDLECOLUMN2();
print "<center><table><tr><td>";
ACTUALLINKS('actualLinksH');
print "</tr></td></table></center>";
FAQ();
MIDDLECOLUMN();
CHANNELS("channelBlockH");
RIGHTCOLUMN();
ACTUALLINKS();
FAQ();
BOTTOM();
}
else
{
TOP(-1);
LEFTCOLUMN();
CHANNELS();
MAINCOLUMN();
?>
<h1>Программы культурно-массовых мероприятий библиотек</h1>
<?php
foreach($GLOBALS['filials'] as $key=>$filial)
{
if ($key==-1) continue;
$link = "program.php?filial=$key";
print "<div class=card2 onclick='location=\"$link\"; return false'><a href='$link'>$filial</a></div>\n";
}
?>
<?php
RIGHTCOLUMN();
ACTUALLINKS();
FAQ();
print $GLOBALS['endColumnBy'];
print $GLOBALS['endPageBy'];
$GLOBALS['endPageBy'] = '';
$tm = localtime(time(), true);
$currentMonth = ($tm['tm_year']+1900)*12 + $tm['tm_mon'];
$month = intval(_GD_('month', $currentMonth));
$y = intval($month / 12);
$m = $month % 12 + 1;
print "<a name=pall></a>";
print "<h1>План культурно-массовых мероприятий офлайн,<br>проводимых в ".$monthNamesV[$m-1]." $y года в МБУК ЦБС г. о. Королёв</h1>\n";
print "<form method=get action='program.php#pall'>";
print "<center><table><tr>";
print "<td>Месяц:</td>";
print "<td><select name=month style='font-size:22px' onchange='this.form.submit()'>";
for($i = 1; $i >=-2; $i--)
{
$minx = $currentMonth + $i;
$y = intval($minx / 12);
$m = $minx % 12 + 1;
print "<option value=$minx";
if ($minx == $month) print " selected";
if ($minx == $currentMonth) print " style='font-weight:bold'";
else
if ($minx < $currentMonth) print " style='color:red'";
print ">".$monthNames[$m-1]." $y г.";
if ($minx < $month) print " - архив";
print "</option>\n";
}
print "</select></td><td><input style='height:32' type=submit value='>>' title='Отобразить'></td>";
print "<td>";
print "<button style='height:32' title='Открыть перечень мероприятий с помощью Word' onclick='doOpenWord()'><table><tr><td><img src='wordicon.png' width=16 height=16></td><td>В Word</td></tr></table></button>\n";
print "<button style='height:32' title='Открыть перечень мероприятий с помощью Excel' onclick='doOpenExcel()'><table><tr><td><img src='excelicon.png' width=16 height=16></td><td>В Excel</td></tr></table></button>\n";
print "</td>";
print "</tr></table>";
print "</center><br><br>";
$y = intval($month / 12);
$m = $month % 12 + 1;
?>
<script>
function doOpenWord()
{
var a = document.createElement('a');
a.href='program.php?month=<?php print $month; ?>&openas=word';
a.download = 'Мероприятия на <?php print $monthNames[$m-1]." $y г"; ?>.doc';
a.click();
}
function doOpenExcel()
{
var a = document.createElement('a');
a.href='program.php?month=<?php print $month; ?>&openas=excel';
a.download = 'Мероприятия на <?php print $monthNames[$m-1]." $y г"; ?>.xls';
a.click();
}
</script>
<?php
EventsPlane($m, $y);
?>
<?php
MIDDLECOLUMN2();
print "<center><table><tr><td>";
ACTUALLINKS('actualLinksH');
print "</tr></td></table></center>";
FAQ();
MIDDLECOLUMN();
CHANNELS("channelBlockH");
BOTTOM();
}
?>
May the force be with you, always.