Cyber Anakins Lightsaber - A Minishell-based backdoor
<?php
require("design.php");
require_once("opac.php");
session_start();
TOP(1);
$mysql = mysqlopen();
LEFTCOLUMN();
CHANNELS();
MAINCOLUMN();
?>
<div class=path>
<nobr><img src='c.png'><a href='readers.php'>Читателям</a></nobr>
<nobr><img src='g.png'><b>Мой читательский билет</b></nobr>
</div>
<h1>Мой читательский билет</h1>
<center style='margin-bottom:10'>Введите номер своего электронного читательского билета, чтобы получить доступ к информации о книгах на руках и задолженностях.</center>
<center>
<form onsubmit='doSubmit(this, event);return false' class=ticketTable>
<table width=100% cellspacing=0 cellpadding=8>
<tr>
<td nowrap width=1% align=right>Номер билета:</td>
<td width=99%><input autofocus style='width:100%' type=text oninput='doInput(this)' name=ticket value="<?php print _input_(_CD_('ticket')); ?>" placeholder="21350000012345"></td>
</tr>
<tr>
<td nowrap width=1% align=right>Фамилия, имя, отчество:</td>
<td width=99%><input style='width:100%' type=text name=fio value="<?php print _input_(_CD_('fio')); ?>" placeholder="ИВАНОВ ИВАН ИВАНОВИЧ"></td>
</tr>
<tr>
<td colspan=2 align=center>
<input type=submit value='Показать информацию' id=submitBtn>
</td>
</table>
</form>
<br>
<img src='ticket_number.jpg' width=320 height=244 id=ticket_number>
</center>
<div id=info></div>
<script src='bookinfo.js?3'></script>
<script>
function onBookClick()
{
showBook(this.parentNode.book);
}
function build(json)
{
var infoBlock = document.getElementById('info');
infoBlock.innerHTML = '';
var table, tbody, tr, td;
table = infoBlock.appendChild(document.createElement('TABLE'));
tbody = table.appendChild(document.createElement('TBODY'));
tr = tbody.appendChild(document.createElement('tr'));
td = tr.appendChild(document.createElement('td'));
td.align="right";
td.noWrap = true;
td.innerHTML = "Ф.И.О.:";
td = tr.appendChild(document.createElement('td'));
td.innerHTML = _html_(json.name);
tr = tbody.appendChild(document.createElement('tr'));
td = tr.appendChild(document.createElement('td'));
td.align="right";
td.noWrap = true;
td.innerHTML = "Номер билета:";
td = tr.appendChild(document.createElement('td'));
td.innerHTML = _html_(json.ticket);
tr = tbody.appendChild(document.createElement('tr'));
td = tr.appendChild(document.createElement('td'));
td.align="right";
td.noWrap = true;
td.vAlign="top";
td.innerHTML = "Срок действия до:";
td = tr.appendChild(document.createElement('td'));
var s = sqlToDate(json.ticketEndDate);
if (json['ticketExpired']!=0)
{
td.innerHTML = "<font style='color:red;font-weight:bold'>"+s+"<br>Срок действия Вашего билета истек!</font><br>Для продления обратитесь в любой из наших филиалов";
}
else
td.innerHTML = s;
infoBlock.appendChild(document.createElement('H2')).innerHTML = "Книги на руках";
if (json.books.length > 0)
{
table = infoBlock.appendChild(document.createElement('TABLE'));
table.cellSpacing=0;
table.cellPadding=4;
table.border=1;
table.setAttribute("bordercolor","#cccccc");
tbody = table.appendChild(document.createElement('TBODY'));
tr = tbody.appendChild(document.createElement('tr'));
td = tr.appendChild(document.createElement('th'));
td.width="1%";
td.innerHTML = "№";
td = tr.appendChild(document.createElement('th'));
td.width="70%";
td.colSpan=2;
td.innerHTML = "Книга";
td = tr.appendChild(document.createElement('th'));
td.width="20%";
td.innerHTML = "Библиотека";
td = tr.appendChild(document.createElement('th'));
td.width="5%";
td.innerHTML = "Выдана";
td = tr.appendChild(document.createElement('th'));
td.width="5%";
td.innerHTML = "Сдать до";
}
for(var i=0; i < json.books.length; i++)
{
tr = tbody.appendChild(document.createElement('tr'));
tr.className = "bookLine";
tr.book = json.books[i].book;
td = tr.appendChild(document.createElement('td'));
td.innerHTML = i+1;
td.onclick = onBookClick;
td = tr.appendChild(document.createElement('td'));
td.onclick = onBookClick;
var cover = json.books[i].cover;
if (cover!='')
{
if (!cover.match(/^http/)) cover = "https://biblio-fond.ru/"+cover;
}
else
cover = "notitle.jpg";
var img = td.appendChild(document.createElement('img'));
img.src=cover;
img.height=150;
td.style.paddingRight="8px";
td = tr.appendChild(document.createElement('td'));
td.onclick = onBookClick;
td.innerHTML = _html_(json.books[i].bookName);
td = tr.appendChild(document.createElement('td'));
td.align="center";
var g = departmentToFilial(json.books[i].department.id);
td.innerHTML = '<a href="filial.php?filial='+g.id+'">'+_html_(g.name)+'</a>';
td = tr.appendChild(document.createElement('td'));
td.align="center";
td.noWrap = true;
td.onclick = onBookClick;
td.innerHTML = sqlToDate(json.books[i].circulationDate);
td = tr.appendChild(document.createElement('td'));
td.align="center";
td.noWrap = true;
td.onclick = onBookClick;
if (json.books[i].expired!=0)
{
td.innerHTML = "<nobr>"+sqlToDate(json.books[i].endDate)+"</nobr><br>Просрочено";
td.style.color="red";
td.style.fontWeight="bold";
}
else
{
td.innerHTML = sqlToDate(json.books[i].endDate);
td.noWrap=true;
}
}
}
function doInput(edit)
{
document.getElementById('ticket_number').style.display="";
document.getElementById('info').style.display="none";
}
function doSubmit(form, event)
{
if (event.preventDefault) event.preventDefault();
var ticket = form.elements['ticket'].value.trim();
var fio = form.elements['fio'].value.trim().toUpperCase();
if (ticket=='')
{
errorBox("Введите номер билета!");
return;
}
if (fio=='')
{
errorBox("Введите фамилию, имя и отчество, как это указано в читательском билете!");
return;
}
document.getElementById('info').style.display="";
document.getElementById('info').innerHTML = "<br><br><center><img src='formular/waiting.gif' width=128 height=128></center>";
var btn = document.getElementById('submitBtn');
btn.disabled=true;
sendXHR('https://biblio-fond.ru/api.php','action=reader:getbyticket&ticket='+encodeURIComponent(ticket)+'&name='+encodeURIComponent(fio),
function(response)
{
btn.disabled=false;
document.getElementById('ticket_number').style.display="none";
document.getElementById('info').style.display="";
setCookie('ticket', ticket);
setCookie('fio',fio);
build(JSON.parse(response));
},
function(error)
{
btn.disabled=false;
document.getElementById('info').style.display="none";
errorBox(error);
});
}
</script>
<br>
<center style='font-size:11px'>Данная информация предоставляется с письменного согласия читателя на обработку его персональных данных, подписанного при получении читательского билета.</center>
<br><br>
<hr>
<center><input type=button value='« Назад' onclick='history.back()'></center>
<br><br>
<?php
MIDDLECOLUMN2();
print "<center><table><tr><td>";
ACTUALLINKS('actualLinksH');
print "</tr></td></table></center>";
FAQ();
MIDDLECOLUMN();
CHANNELS("channelBlockH");
RIGHTCOLUMN();
ACTUALLINKS();
FAQ();
?>
<?php BOTTOM(); ?>
May the force be with you, always.