Browse Source

enhanced edit mode, new sef-defined field, empty passphrase check

master v1.2
Rolf Brugger 14 years ago
parent
commit
75d040a8d1
  1. 13
      doc/index.html
  2. BIN
      img/add.png
  3. 161
      index.php
  4. 15
      sv.css
  5. 10
      vault/simplevault.txt

13
doc/index.html

@ -15,18 +15,20 @@
<ul>
<li>Store passwords and other secret information on a web based tool</li>
<li>High level of security if installed on the local network. Good level of security if installed on a shared host on the internet.</li>
<li>Each stored item has just it's own pass phrase. There is no global pass phrase and also no user account management.</li>
<li>Each stored item has just it's own passphrase. There is no global passphrase and also no user account management.</li>
<li>Very easy to use - very easy to install - very easy to understand!</li>
<li>No database is needed. All secret data is stored in a single text file, which is easy to back up and copy without security risk.</li>
</ul>
<h3>Try it online</h3>
<p>An <a href="http://rolfb.ch/svdemo/index.php">online demo</a> is available. (Please don't misuse the demo. The vault is regularly purged.)</p>
<h3>Why is SimpleVault free?</h3>
<p>SimpleVault can be downloaded and used for free and it's source code is available under the <a href="http://www.gnu.org/copyleft/gpl.html">GPLv3 license</a>. I give it away for free mainly because I'm intensively using other open source products and I want to give back something useful to the community.</p>
<h2>Installation and Configuration</h2>
<p>Prerequisites are: PHP4 or PHP5 with the mcrypt library.</p>
<p><a href='http://sourceforge.net/project/showfiles.php?group_id=205981'>Download</a> and unpack the SimpleVault package to the directory <tt>&lt;install-dir&gt;</tt>. By default, <tt>&lt;install-dir&gt;/vault/simplevault.txt</tt> is used as the vault file where all encrypted and unencrypted data is stored. This file should be readable and writeable by the web server. A different vault file can be configured in <tt>index.php</tt> in the variables <tt>$vaultdir</tt> and <tt>$vaultfile</tt>.</p>
<p>That's it. Go to <tt>&lt;your-host&gt;/&lt;install-dir&gt;/index.php</tt> and start creating entries.</p>
<p>In the default installation, the vault file contains 2 categories and 4 entries for demonstration purposes. All entries are encrypted with the pass phrase <i>toto</i>. You can delete the entries interactively, or by emptying the vault file.</p>
<p>In the default installation, the vault file contains 2 categories and 4 entries for demonstration purposes. All entries are encrypted with the passphrase <i>toto</i>. You can delete the entries interactively, or by emptying the vault file.</p>
<p>If you have problems please ask your questions in the <a href='http://sourceforge.net/forum/?group_id=205981'>support forum</a>.</p>
@ -37,7 +39,7 @@
<p><img src="screen-start.png" class='screenshot'/></p></li>
<li>Start with creating a new item: Define at least the category and a title for the new item. Notice that only the fields in the red box will be encrypted. Finally, set a <a href="http://www.lockdown.co.uk/?pg=password_guide">good password</a> and hit the create button.
<p><img src="screen-create.png" class='screenshot'/></p>
<p>When the item has been created, a short message is displayed. The create dialog doesn't ask you to type in the pass phrase twice. Therefore, in order to make sure that you typed in the correct pass phrase, it is recommended to decrypt your new item right after it has been created.</p>
<p>When the item has been created, a short message is displayed. The create dialog doesn't ask you to type in the passphrase twice. Therefore, in order to make sure that you typed in the correct passphrase, it is recommended to decrypt your new item right after it has been created.</p>
<p><img src="screen-itemcreated.png" class='screenshot'/></p>
</li>
<li>If you have created an item with a new category, the category is automatically created and it will be shown in the top navigation bar. In the example below it's the category <i>Home Servers</i>
@ -163,6 +165,7 @@ There are probably more risks or leaks. Please report them in the <a href='http:
<li>(reserved)</li>
<li>Encrypted secret data block</li>
</ol>
The fields <i>Category - Title - Subtitle</i> combined together build a unique key for an entry.
</li>
<li>the secret data block is a iso 8859-1 string which has been encrypted and html encoded. The string contains the following 10 single line fields which are separated by new line caracters (the 11th field is a multi-line field). Hence, it contains at least 10 new line characters:
<ol>
@ -174,8 +177,8 @@ There are probably more risks or leaks. Please report them in the <a href='http:
<li>(reserved)</li>
<li>(reserved)</li>
<li>(reserved)</li>
<li>(reserved)</li>
<li>(reserved)</li>
<li>self-defined title</li>
<li>self-defined content</li>
<li>notes, which is a multi-line text field</li>
</ol>
</li>

BIN
img/add.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

161
index.php

@ -2,6 +2,19 @@
<head>
<title>SimpleVault Password Manager</title>
<link href='sv.css' rel='stylesheet' type='text/css' media='screen' />
<script type="text/javascript">
function check_pf()
{
if (document.editentry.pf.value == ""){
return confirm("You have set an empty passphrase. Do you want to continue?");
}
else{
return true;
}
}
</script>
</head>
<body onLoad="document.forms.enterpf.pf.focus()">
<?php
@ -11,11 +24,13 @@
# index.php
# Simple Vault: online password manager
#
# Author: Rolf Brugger
# Email: rolf.brugger@schweiz.org
# Date: September 2007
# Version: 1.0 Sep 07: initial release
# 1.1 Oct 07: edit entires
# Author: Rolf Brugger
# Email: rolf.brugger@schweiz.org
#
# Versions:
# 1.2 Nov 07: editing entires improved
# 1.1 Oct 07: edit entires
# 1.0 Sep 07: initial release
#
################################################################
@ -31,14 +46,15 @@ $cipher = 'rijndael-256';
// date format string as used by php function 'date'
//$dateformat = 'm.d.y G:i'; // "09.19.07 15:44"
//$dateformat = 'M jS Y g:ia'; // "Sep 19th 2007 3:44pm"
$dateformat = 'd-M-Y G:i'; // "09-Sep-2007 15:44"
//$dateformat = 'd-M-Y G:i'; // "09-Sep-2007 15:44"
$dateformat = 'd-M-Y'; // "09-Sep-2007"
// ----------------------------------------------------------------------------------------
// *** Constants - Do not change for an already existing vault!
// *** Constants - Do not change!
// ----------------------------------------------------------------------------------------
$preamble = "svpwdmanag";
$nbfields = 10;
@ -76,24 +92,38 @@ print "</form>";
// *** Actions
if(isset($_POST['entrysave'])){
if(isset($_POST['mode']) and $_POST['mode']=="modify"){
// we were editing an existing entry. Delete original entry before saving the modified entry.
$i = entry_index($vlt, $_POST['defcat'], $_POST['deft1'], $_POST['deft2']);
if ($i >= 0){
delete_entry($vlt, $i, $cats);
}
}
if(isset($_POST['t1']) and strlen($_POST['t1'])>0){
// *** create new entry
if (!isset($_POST['cat']) or strlen($_POST['cat'])<1){ $_POST['cat']=$_POST['catdl']; $_REQUEST['cat']=$_POST['catdl']; } // take category from dropdown list? category in text field has precedence.
$encpart = svencrypt($_POST['pf'], $preamble, $_POST['newp1'], $_POST['newp2'], $_POST['newp3'], $_POST['newnote']);
$newentry = $_POST['cat']."\t".$_POST['t1']."\t".$_POST['t2']."\t".time()."\t\t\t\t\t\t".$encpart;
if(entry_index($vlt, $_POST['cat'], $_POST['t1'], $_POST['t2']) <0){
// *** create new entry
$encpart = svencrypt($_POST['pf'], $preamble, $_POST['newp1'], $_POST['newp2'], $_POST['newp3'], $_POST['newp8'], $_POST['newp9'], $_POST['newnote']);
$newentry = $_POST['cat']."\t".$_POST['t1']."\t".$_POST['t2']."\t".time()."\t\t\t\t\t\t".$encpart;
// append it to the vault file
array_push($vlt, $newentry);
sort($vlt);
while($vlt[0]==""){array_shift($vlt);};
// append it to the vault file
array_push($vlt, $newentry);
sort($vlt);
while($vlt[0]==""){array_shift($vlt);};
file_put_contents("$vaultdir/$vaultfile", implode("\n", $vlt));
$cats = categories($vlt);
print "<p><span class='info'>New entry ".$_POST['t1']."/".$_POST['t2']." added.</span></p>";
file_put_contents("$vaultdir/$vaultfile", implode("\n", $vlt));
$cats = categories($vlt);
print "<p><span class='info'>Entry ".$_POST['t1']."/".$_POST['t2']." saved.</span></p>";
}
else{
print "<p><span class='warning'>Could not save entry: an entry with this category and title already exists.</span></p>";
}
}
else{
print "<p><span class='warning'>Could not create a new entry: no category or title set.</span></p>";
print "<p><span class='warning'>Could not save entry: no category or title set.</span></p>";
}
}
@ -119,13 +149,9 @@ if(isset($decrmode)) {
if (isset($_POST['entrydecrypt']) or isset($_POST['entrydelete']) or isset($_POST['entryedit'])){
// find and decrypt it
$pattern = $_POST['cat']."\t".$_POST['t1']."\t".$_POST['t2'];
$i = 0;
while ($i < count($vlt) and strpos( $vlt[$i], $pattern)!==0){
$i++;
}
$i = entry_index($vlt, $_POST['cat'], $_POST['t1'], $_POST['t2']);
if ($i < count($vlt)){
if ($i >= 0){
$recfields = explode ("\t", $vlt[$i], $nbfields);
$decfields = svdecrypt($_POST['pf'], $recfields[$nbfields-1]);
if ($decfields[0] == $preamble){
@ -140,10 +166,8 @@ if(isset($decrmode)) {
print "<p><span class='info'>Entry ".$_POST['t1']."/".$_POST['t2']." deleted!</span> &nbsp; <a href='".basename($_SERVER["PHP_SELF"])."'>Ok</a></p>";
}
elseif ($decrmode == "edit"){
// passphrase is ok, delete entry with index $i
delete_entry($vlt, $i, $cats);
print "<p><span class='info'>Entry ".$_POST['t1']."/".$_POST['t2']." deleted! Save a new entry.</span></p>";
entry_form($_POST['cat'], $_POST['t1'], $_POST['t2'], $decfields);
// passphrase is ok, fill in form default values
entry_form($_POST['cat'], $_POST['t1'], $_POST['t2'], $decfields, "modify");
}
else{
print "<p><span class='warning'>Error: wrong mode.</span></p>";
@ -151,7 +175,7 @@ if(isset($decrmode)) {
}
else{
// decryption failed
print "<p><span class='warning'>Wrong pass phrase!</span></p>";
print "<p><span class='warning'>Wrong passphrase!</span></p>";
decrypt_form($_POST['cat'], $_POST['t1'], $_POST['t2'], $decrmode);
}
}
@ -169,7 +193,7 @@ if(isset($decrmode)) {
// *** Show form to create a new entry
elseif(isset($_GET['new'])){
print "<h1>Create a New Entry</h1>";
entry_form($_GET['cat'], "", "", array());
entry_form($_GET['cat'], "", "", array(), "");
}
@ -195,24 +219,27 @@ elseif(isset($_GET['cat']) or isset($_GET['all']) or isset($_POST['filter'])){
}
print "</table>";
print "<p><a href='?new=1&cat=".$_GET['cat']."'>create new entry</a></p>";
print "<p><a href='?new=1&cat=".$_GET['cat']."'><img src='img/add.png' border='0' title='add new entry' /> create new entry</a></p>";
}
else{
print "<p><a href='?new=1'>create new entry</a></p>";
print "<p><a href='?new=1'><img src='img/add.png' border='0' title='add new entry' /> create new entry</a></p>";
}
# if no parameters are set (home page) we discretely print a disclaimer/footer
if(count($_GET)==0 and count($_POST)==0){
print "<div class='footer'><span>Password manager powered by <a href='http://simplevault.sourceforge.net'>SimpleVault</a></span></div>";
}
/* -------------------------------------------------------------------------- */
/* -------------------------------------------------------------------------- */
function svencrypt($pf, $p0, $p1, $p2, $p3, $note)
function svencrypt($pf, $p0, $p1, $p2, $p3, $p8, $p9, $note)
// concatenates p0..note and encrypts it with $pf
{
global $cipher;
$data = strip_tags($p0)."\n".strip_tags($p1)."\n".strip_tags($p2)."\n".strip_tags($p3)."\n\n\n\n\n\n\n".strip_tags($note);
$data = strip_tags($p0)."\n".strip_tags($p1)."\n".strip_tags($p2)."\n".strip_tags($p3)."\n\n\n\n\n".strip_tags($p8)."\n".strip_tags($p9)."\n".strip_tags($note);
/* Open module, and create IV */
$td = mcrypt_module_open($cipher, '', 'ecb', '');
@ -256,14 +283,14 @@ function svdecrypt($pf, $data)
mcrypt_module_close($td);
}
$p_t = rtrim($p_t);
return explode ("\n", rtrim($p_t, "\0"), $nbencfields);
return explode ("\n", rtrim($p_t, "\0"), $nbencfields+1);
}
/* -------------------------------------------------------------------------- */
/* -------------------------------------------------------------------------- */
function delete_entry(&$vlt, $i, &$cats)
// delete entry with index $i. The vault ($vlt) and category ($cats) arrays are updated. The vault array is saved to the file.
// Delete entry with index $i. The vault ($vlt) and category ($cats) arrays are updated. The vault array is saved to the file.
{
global $vaultdir, $vaultfile;
@ -272,18 +299,46 @@ function delete_entry(&$vlt, $i, &$cats)
$cats = categories($vlt);
}
/* -------------------------------------------------------------------------- */
function entry_index($vlt, $cat, $tit1, $tit2)
// Returns the index of the entry specified by category-title1-title2.
// If no matching entry was found, -1 is returned.
{
$pattern = "$cat\t$tit1\t$tit2";
$i = 0;
while ($i < count($vlt) and strpos( $vlt[$i], $pattern)!==0){
$i++;
}
if ($i < count($vlt)){
return $i;
}
else{
return -1;
}
}
/* -------------------------------------------------------------------------- */
/* *** Forms *** */
/* -------------------------------------------------------------------------- */
function entry_form($defcat, $deft1, $deft2, $encfields)
function entry_form($defcat, $deft1, $deft2, $encfields, $mode)
// Prints form to create a new entry or edit an existing entry
// All function parameters are optional. They are used as default values in the form.
//
// $defcat, $deft1, $deft2 and $mode are also written to hidden fields. This is
// useful if an existing entry is edited. In this case the original entry has to
// be deleted before the modified entry is stored
{
global $cats, $nbencfields;
$myfname = basename($_SERVER["PHP_SELF"]);
print "<form action='$myfname' method='post'>";
print "<form action='$myfname' method='post' name='editentry' onSubmit='return check_pf()'>";
print "<input name='defcat' type='hidden' value='$defcat'/>";
print "<input name='deft1' type='hidden' value='$deft1'/>";
print "<input name='deft2' type='hidden' value='$deft2'/>";
print "<input name='mode' type='hidden' value='$mode'/>";
print "<table class='entry'>";
print "<tr><td>Category:</td><td>";
@ -304,17 +359,22 @@ function entry_form($defcat, $deft1, $deft2, $encfields)
print "<p>encrypted:<br/>";
print "<table class='encrbox'>";
print "<tr><td>Login:</td><td>";
print "<input name='newp1' type='text' value='".$encfields[1]."' size='20' maxlength='200'/>";
print "</td></tr>";
print "<tr><td>URL:</td><td>";
print "<input name='newp2' type='text' value='".$encfields[2]."' size='20' maxlength='200'/>";
print "</td></tr>";
print "<tr><td>Login:</td><td>";
print "<input name='newp1' type='text' value='".$encfields[1]."' size='20' maxlength='200'/>";
print "</td></tr>";
print "<tr><td>Password:</td><td>";
print "<input name='newp3' type='text' value='".$encfields[3]."' size='20' maxlength='200'/>";
print "</td></tr>";
print "<tr><td>"; // self-defined...
print "<input name='newp8' type='text' value='".$encfields[8]."' size='6' maxlength='30'/>";
print ":</td><td>";
print "<input name='newp9' type='text' value='".$encfields[9]."' size='20' maxlength='200'/>";
print "</td></tr>";
print "<tr><td>Note:</td><td>";
print "<textarea name='newnote' cols='40' rows='6'>".$encfields[$nbencfields-1]."</textarea>";
print "<textarea name='newnote' cols='40' rows='6'>".$encfields[$nbencfields]."</textarea>";
print "</td></tr>";
print "</table>";
print "</p>";
@ -366,10 +426,13 @@ function show_entry_body($decfields)
global $nbencfields;
print "<p>decrypted:<br/>";
print "<table class='encrbox'>";
print "<tr><td>Login:</td><td>".$decfields[1]."</td></tr>";
print "<tr><td>URL:</td><td>" .print_url($decfields[2])."</td></tr>";
print "<tr><td>Password:</td><td>".$decfields[3]."</td></tr>";
print "<tr><td>Note:</td><td><pre>".$decfields[$nbencfields-1]."</pre></td></tr>";
print "<tr><td>URL:</td><td>" .print_url($decfields[2])."</td></tr>";
print "<tr><td>Login:</td><td>" .$decfields[1]."</td></tr>";
print "<tr><td>Password:</td><td>" .$decfields[3]."</td></tr>";
if(strlen($decfields[8]) > 0){
print "<tr><td>".$decfields[8].":</td><td>" .$decfields[9]."</td></tr>";
}
print "<tr><td>Note:</td><td><pre>".$decfields[$nbencfields]."</pre></td></tr>";
print "</table>";
print "</p>";
}
@ -395,8 +458,8 @@ function categories ($vault)
function print_url ($string)
// checks, if the string is a URL. If yes, a html link is returned. Otherwise the $sting is returned.
{
$pos = strpos($string, "http://");
if ($pos===false or $pos>0){
$pos = strpos($string, "://");
if ($pos===false){
return $string;
}
else{

15
sv.css

@ -68,6 +68,21 @@ div.topbar input#inpfield{
font-size: 90%
}
div.footer{
border-top: solid 1px silver;
padding-top: 4px;
color: #999;
font-size: 90%;
margin-top: 15px;
}
div.footer a{
color: #99f;
}
div.footer img{
border: 0px;
}

10
vault/simplevault.txt

@ -1,15 +1,19 @@
BbVista Blackboard devnet 1190719875 %C57%BD%DDF%CF%A9%5BK%40%23%F8%ED%1Ct%1C%3F%F6%8C%82%E936%88%9F%B3%9D%A8c%92%FA%5D6%9D%26%9E%5BzY%DD%AE%E9%4098Z6%14%FD%1E%11XT%01SA%1A%86%DEx%0C2%BDh
BbVista calanda host 1190241235 %1C%5B%8A%84%27%8C%AD%FCR%B4%A5%E2%EF%85%60%60%BD%AD%12%B7%81%F3A%3C%BF%0B%5E%F5b%CB%7F%A4
BbVista calanda host 1195432473 %3F%8D%94%C1-%FA%BB%81%19%D6%EC%90r%BE4%B5%D5%B7%D7%00RQ%C1%1FD%E18%B4s%81G%7Dq%FB%E4%2F%D1%B1%DE%AA%90%ED%85%26d%83%CB%A9j%7D%D6%EC-%E9ZA%A8%5CL%94j%F2A%99%B1%2Be%7C%CA%1Ft%96%D7%0An%23%02%40%CF%EB%3C%23%AD%E2%CE%02%03%B8%F4%8C%8A%A4A%F1fs
BbVista calanda oracle 1190241401 G%CFH%EE%85%A2%FA%8A%80N%C1%D8M%12%A6Yk%CA%BEc%C8%BF%8E%DB%D1%D3%16%F8o%AD%95%11%10Al%17%8Ei%D4%8E%29%B8%97%D0%7E%F3%88o_h%0C%C8%AA%21%00V%C3%F2%22%5B%1A%2C%18%BF
BbVista falknis host 1190241453 %8A_%EA%F1%81b%E8%82%CE%17%0EN%1F%2C%D2%0B%BAz%DB%E4%14%2B3%D1%B4M6%C2%15M%88%F1f%B8%A2s1%3E4%91fsu%A3%0D%14%C8%85Y%B6%C9%8E%D6e%0E%AC5%DC%CE%94d%13%7E%9C
BbVista test3 test3 1193836123 %FA%B1%EC%15%CF%EF%0B%BEI%09i%F4%C5%BC%E8%F4q%F9V%B9%DDfS%C0%C9%E3_H%DF%1B%D9%00
BbVista q q 1195431612 %03%8Bc%A2+N%2C%7B%93%D2%A7e%0Dm%3Ef%A8v%22%0A%2F%C9%1B%B7%94%C3%91%CB%B5%B8.%A5%E3%1F%AF%C1%3E%9A%8F27%EB%D6%3E%60%C8%E2%AA%F1%AC%F8%B28P%82%F3%23%2C%03Q%60L%AD%F5
BbVista t t 1195431518 %88%29%18%CA3%0E%C0%1F1%97uE%D7L%F1%E8%27%D1%A7%E5%94%FC%3D%A1%3A%7DN%AB%1C%F5%9A%12%9A%A2%22N%28+%C9H%8CR%A9%CC%B2%23%0B%CA%18%B4%B7%8Fn%7E%DEf%18%C7%A8F%12P%0Cn
BbVista test2 test2 1195431304 %A7%8B%97%B5B%8B%B9%5B%FA%93%93%28%B1%E2%95%C1%9CzqD%E4%FD%A3%DEK%E3O%21%CA%DC%90%C2%DA%94%03%7Cf%0D%8A%BC%98c+u%D0%E6u7%99%D5%0B%98%00%82%27%9D%0C%EAv%3C%C9%7D%8B%28%85%9B%A2%23%9Aa%2A%8B%82X%F3S+%0F%5E%2B%AC%FC%DA%8A%A0%00%A7%CD%FD%FA%001%2B%EFg4
Home Servers Thor mysql user for PHP 1191191230 %C2%24%7F%9CQ%B0T%C3%CE%C1%D0%A3%86%C6%2F%8C%AE%98%C8%19%AF%E1Y%0E%0E%2A%A0%B5%F2%3B%86Kf%B8%A2s1%3E4%91fsu%A3%0D%14%C8%85Y%B6%C9%8E%D6e%0E%AC5%DC%CE%94d%13%7E%9C
Home Servers host jupiter mysql user for PHP 1191191342 q%D8%01%95%D5Q%97%B2z%09%04%E6%9E%DFw%91%AD%26z%BE%5E%891%0D%FA%5E%B1%C4%87S%D5%D0%E7%0C%8A%F1%D3%EB%25%AC1%24%FA+%10%98YO%0E%C6%93%3B%02%B6%C2%AAJ%EDq%C37%90r%F2
LOR andro mysql user 1190198619 i%A0%BB%88%7C%1C9%D6%C1%95%BBc%3B%F0%A6%0B%29%04%E9%E8%F6W%C8%E6%C2%D0%25J%9DL%7D%D7%BC%89%3D%21%D0%10%A2%09%AFlCb%C8p%A1%26w%C5T%D5%5D%5B%21I%FFC%5EH%FB%EF3C
LOR andro mysql user 1193843153 i%A0%BB%88%7C%1C9%D6%C1%95%BBc%3B%F0%A6%0B%29%04%E9%E8%F6W%C8%E6%C2%D0%25J%9DL%7D%D7%BC%89%3D%21%D0%10%A2%09%AFlCb%C8p%A1%26w%C5T%D5%5D%5B%21I%FFC%5EH%FB%EF3C
LOR andro other host 1190198974 %88%F84%A3%AB%DA%F8%92%E3TL%25%F2%A0f3%12%A5Pm%C3%87H%7FW6%AA%7C%9CX%F1%2Af%B8%A2s1%3E4%91fsu%A3%0D%14%C8%85Y%B6%C9%8E%D6e%0E%AC5%DC%CE%94d%13%7E%9C
LOR peler apache 1190209649 %E5%86p%2A%8D%9A%24%E5%96%9By%24l%2F%8F%BA%3B%80%3C%AD%CC%3EzH%EF%7BQ%AF1%2C%D8V
LOR peler host 1190209440 %8E%16%03%AF%A6%0A%F3%1D%E6%A1z%7E%8A%B4%CA%E7%AF%EB++t%12%3B%D8%13%CD%D0%E2%5B%ED%D4%D6%10Al%17%8Ei%D4%8E%29%B8%97%D0%7E%F3%88o_h%0C%C8%AA%21%00V%C3%F2%22%5B%1A%2C%18%BF
LOR peler host 1190209496 %8E%16%03%AF%A6%0A%F3%1D%E6%A1z%7E%8A%B4%CA%E7%AF%EB++t%12%3B%D8%13%CD%D0%E2%5B%ED%D4%D6%10Al%17%8Ei%D4%8E%29%B8%97%D0%7E%F3%88o_h%0C%C8%AA%21%00V%C3%F2%22%5B%1A%2C%18%BF
LOR peler mysql root 1190209602 %E5%86p%2A%8D%9A%24%E5%96%9By%24l%2F%8F%BA%3B%80%3C%AD%CC%3EzH%EF%7BQ%AF1%2C%D8V
LOR test test 1195426020 %BA%C0%ABd%94%CC+%AEVlo%19%A3A%91%60z%A2%AE%07%1A%0D%C4%DAd%5D%7D%40HG8%BC
LOR test2 test2 1195426472 %1D%DC9%E0%0Dd%2Bx%C8%29%14%AD%02%D9%FA%87%D4%A2%1E%B1%B2%2A%3D%40%E5%3C%E8%BA%06%9An%9Bb%AF%B3%D1B%3E%C2%AB%22%93%E7%E8%D5%A4nk%AEv%F9%FB%5D%1A%C4it%3C%04i4w%BB%83%99%D5c%15%EB%DC%D8_%9BF%F32%C7%5C%E3%FC%99%A7%03%D0%AF%9B%EB%1FbDC%85%D3%19jg
Public Hosts lena root 1190408301 %9A%94%F8s%3E%B1%C9%BD%27%8Cz_%9FZ%26H%15%EBG%CE%C3%DC%D1%AE%0D%86%16%95%BE%E5n%0B
Public Hosts new pub new pub 1190585220 %1B%90+6%CF%F12%DC%17%16%2B%F0UD%F0%92%DBtAC%B9%B9%15%AE%CF%E7%0D%C8%CA%FAs%85%02%2F%DA%A9%CAq%81R%87H%16qu%A6%3Dn%84%19w%C9%25OR%1B%EAb%8FI%BE%BB%2B%AC