2010 05 Bramki SMS i darmowe wiadomości

background image

26

HAKIN9

ATAK

5/2010

N

adal jednak jednym z
najpopularniejszych sposobów
wymiany informacji jest SMS (ang.

Short Message Service). Wiąże się to jednak
z poniesieniem pewnych kosztów, głównie u
posiadaczy kart typu prepaid. Dzięki coraz
tańszym połączeniom internetowym możemy
zredukować swoje wydatki prawie do zera.

Małe koszty, duże możliwości

Konkurencja wśród sprzedawców mobilnego
Internetu z roku na rok staje się coraz większa.
Wpływa to pozytywnie na wysokość opłat za
przesyłanie danych. Cennik zmienia się w
szybkim tempie. Operatorzy oferują nam nowe
pakiety, umożliwiające przeglądanie większej
ilości stron za mniejsze pieniądze.

Co nam daje tak tani Internet? Więcej

rozmów na ulubionym komunikatorze, więcej
czasu na wybranym portalu społecznościowym,
więcej przeczytanych wiadomości w serwisie
informacyjnym i w końcu więcej SMS-ów
wysłanych praktycznie bezpłatnie. Policzmy
na przykładzie sieci Heyah, w której za 100 kB
zapłacimy 2 gr (patrz ramka W Sieci), jaki byłby
koszt przesłania takiej ilości danych, jaką posiada
typowy SMS. Jedna wiadomość to domyślnie
160 znaków zakodowanych za pomocą 7 bitów
(b), co daje nam 1120 b. Stawka za 100 kB
(819200 b) wynosi 2 gr. Łatwo możemy policzyć,
że jedna wiadomość wysłana przez Internet
kosztowałaby nas ok. 0,0027 gr. Do tego należy

KONRAD WITASZCZYK

Z ARTYKUŁU

DOWIESZ SIĘ

ile transferu zużywa Twój

telefon przez wysyłanie SMS-

ów,

jak działają systemy autoryzacji,

jak interpretować wyniki

sniffera.

CO POWINIENEŚ

WIEDZIEĆ

powinieneś posiadać

podstawową wiedzę o

programowaniu,

powinieneś wiedzieć, jak są

przesyłane dane protokołem

HTTP.

dodać ewentualny transfer dodatkowych danych
potrzebnych do wysłania wiadomości. Nie są to
jednak duże liczby, więc rezultat i tak robi wrażenie.

Bramki SMS

Istnieje wiele stron internetowych umożliwiających
wysyłanie wiadomości na telefon komórkowy.
Jednak używanie ich bezpośrednio za pomocą
telefonu nie jest dobrym rozwiązaniem z powodu
licznych reklam lub po prostu bogatej oprawy
samej strony. Każdy, kto posiada podstawową
wiedzę o programowaniu może napisać własny
skrypt, który będzie jedynie odbierać dane od
użytkownika i sam przesyłać je na odpowiedni
adres. Uwolni nas to od zbędnych kosztów.

Piszemy własną bramkę

Zajmiemy się teraz pisaniem wcześniej
wspomnianego skryptu. Pozostaniemy nadal
przy przykładzie Heyah, czyli skorzystamy z
bramki udostępnionej dla członków darmowego
Klubu Heyah (patrz ramka W Sieci). Pierwsze,
co musimy zrobić to zastanowić się, co ma
wykonać nasz program, aby wysłać wiadomość.
Na początku musi przejść przez system
autoryzacji. Następnie w celu identyfikacji oraz
podtrzymania sesji, pobierze ciasteczka (ang.
cookies). Ostatnim krokiem jest wysłanie numeru
telefonu i treści wiadomości w odpowiedni
sposób. Teraz należy zdobyć potrzebne
informacje na temat działania wybranego
portalu. W tym celu wykorzystamy dobrze znany

Stopień trudności

Bramki SMS

i darmowe

wiadomości

Internet daje nam wielkie możliwości w zakresie komunikacji.

Dziś prawie każdy może skorzystać z Sieci, posługując się

swoim telefonem komórkowym...

background image

27

HAKIN9

BRAMKI SMS I DARMOWE WIADOMOŚCI

5/2010

sniffer Wireshark (patrz ramka W Sieci).
Załóżmy, że posiadamy konto i jesteśmy
gotowi do zalogowania się. Włączamy
wybrany program do analizy pakietów i
przechodzimy przez cały proces wysyłania
wiadomości. Dobrym wyborem okazał się
portal heyahklub.pl, ponieważ umożliwia
nam ustawienie nadawcy na własny
numer. Dodatkowo sprawdzimy, co trzeba
zrobić, aby ta operacja była możliwa.

Przyjrzyjmy się wynikom pracy sniffera.

Lista interesujących wpisów uzyskana po
skanowaniu została przedstawiona na
Rysunku 1. Pierwszym z nich jest:

POST /sso/authserver/server HTTP/1.1
Host: sso.era.pl

Wraz z nim zostały wysłane następujące
dane:

request=login1&rid=<rid>&sso-server=au
thserver&user=<nazwa_użytkown
ika>&password=<hasło>&x=0&y=0

Widzimy, że poprzez to zapytanie,
zostaliśmy zalogowani. Następnie wykonało
się kilka przekierowań, które ostatecznie
doprowadziły nas do: /hk/portal/
privatePortal.do
. Teraz warto zobaczyć, jakie
ciasteczka zostały nam zwrócone:

Cookie:

JSESSIONID=sJ2pLDTNXGZT0T20rv

P7Jrv4Q95Y3NPxWFWJ2BGywmMTJbX0vGhL!-
955922799;

Przyjrzyjmy się fragmentom danych, które
zostały przekazane podczas wysyłania
wiadomości z numerem wirtualnym.
Zapytanie dotyczyło ścieżki: /hk/msg/
user/heyah/sms.do
. Jego rezultaty zostały
przedstawione w Listingu 1.

Widać tutaj, że przy budowie bramki

wykorzystano framework Apache Struts
(patrz ramka W Sieci). Wymaga on podania
w celu autoryzacji tokenu przekazanego w
zmiennej

org.apache.struts.taglib.h

tml.TOKEN

.

Analizując dalej pakiety, możemy

zauważyć, że w celu wysłania wiadomości
z naszym prywatnym numerem, należy
wartość

bottom.sender

zmienić z

virtual

na

msisdn

(nazwa pochodzi od

Mobile Subscriber ISDN – numer abonenta
sieci komórkowej).

Zajmiemy się przenoszeniem

zdobytych informacji na kod skryptu.
Przykład podany przeze mnie będzie
napisany w języku Ruby, z wykorzystaniem
biblioteki net/http oraz cgi. Ponieważ
nasz skrypt musi być dostępny poprzez
połączenie z serwerem HTTP, numer
telefonu i treść wiadomości będą wysyłane
metodą

GET

lub

POST

(załóżmy, że nazwę

użytkownika i hasło wpisujemy na stałe do
skryptu):

phone = cgi.params["p"].to_s
text = cgi.params["t"].to_s

Dodatkowo dla bezpieczeństwa
wprowadzimy klucz w celu autoryzacji:

key = cgi.params["k"].to_s

Teraz, aby skrypt został wykonany, trzeba
będzie przejść pod następujący adres (w
przypadku metody

GET

):

http://host/nazwa_skryptu?p=numer_telef
onu&t=treść%20wiadomości&k=ustalony
_klucz

Następny krok to logowanie.

Zauważyliśmy wcześniej, że do jego
wykonania oprócz podania loginu i hasła
należy przekazać

rid

. Łatwo znaleźć tę

wartość analizując formularz logowania
pod ścieżką: /hk/portal/privatePortal.do.
Po otworzeniu tej strony, zostajemy
przekierowani na:
http://sso.era.pl/sso/authserver/

Listing 1.

Dane przekazane na adres http://heyahklub.pl/hk/msg/user/heyah/

sms.do podczas wysyłania wiadomości

--aAbB0R6Tbf
Content-Disposition: form-data; name="tab"
top
--aAbB0R6Tbf
Content-Disposition: form-data; name="send.x"
send
--aAbB0R6Tbf
Content-Disposition: form-data; name="send"
send
--aAbB0R6Tbf
Content-Disposition: form-data; name="top.phoneReceiver"
<numer_telefonu>
--aAbB0R6Tbf
Content-Disposition: form-data; name="top.text"
<tresc_wiadomosci>
--aAbB0R6Tbf
Content-Disposition: form-data; name="org.apache.struts.taglib.html.TOKEN"
0b02d1ba32e4302010cdcf668f5aee5d
--aAbB0R6Tbf
Content-Disposition: form-data; name="bottom.sender"
virtual

Rysunek 1.

Lista wybranych pakietów przechwyconych przez Wireshark

background image

ATAK

28

HAKIN9 5/2010

BRAMKI SMS I DARMOWE WIADOMOŚCI

29

HAKIN9

5/2010

server?request=login1&rid=<rid>&sso-
server=authserver

Okazało się, że nie musimy nawet

przeglądać zawartości tej strony, lecz
jedynie pobrać szukany ciąg znaków z
nowego adresu:

path = "/hk/portal/privatePortal.do"
http = Net::HTTP.new("www.heyahklub.pl

", 80)

resp = http.get(path, nil)
rid = resp.header["location"].scan

(/rid=(.+?)&/)

Teraz możemy przejść do logowania.
Łączymy się z odpowiednim hostem i
wysyłamy dane metodą POST na właściwy
adres:

path = "/sso/authserver/server"
data = "request=login1&rid=#{rid}&sso-
server=authserver&user=#{user}
&password=#{pass}&x=0&y=0"
http = Net::HTTP.new("sso.era.pl", 80)
resp = http.post(path, data)

Zgodnie z wcześniejszymi ustaleniami, w
celu podtrzymania sesji, musimy pobrać
ciasteczka. Najlepiej to zrobić parsując
nagłówki strony, na którą zostaniemy
przekierowani po ostatnim procesie:

data = resp.header["location"].scan(/

login\?(.+?)$/)

url = URI.parse(resp.header["location"])
path = "#{url.path}?#{data}"
http = Net::HTTP.new(url.host,url.port)
resp = http.get(path, nil)
headers = { "Cookie" =>
resp.header["set-cookie"] }

Jesteśmy zalogowani i gotowi do wysłania
wiadomości. Jedyne, czego nam brakuje
to token, którego musimy użyć. W tym celu
otwieramy stronę, na której jest formularz
do wysyłania wiadomości:

path = "/hk/msg/user/heyah/welcome.do"
http = Net::HTTP.new("www.heyahklub.pl

", 80)

resp = http.post(path, nil, headers)

Listing 2.

Skrypt wysyłający SMS za pomocą bramki Heyah używając numeru

prywatnego

#!/usr/local/bin/ruby

require

'net/http'

require ‘cgi’
user

=

"moja_nazwa"

pass

=

"moje_hasło"

phone

=

cgi.params

[

"p"

]

.to_s

text

=

cgi.params

[

"t"

]

.to_s

key

=

cgi.params

[

"k"

]

.to_s

puts cgi.header

if

key

==

"ustalony_klucz"

path

=

"/hk/portal/privatePortal.do"

http

=

Net

::

HTTP.new

(

"www.heyahklub.pl"

,

80

)

resp

=

http.get

(

path

,

nil

)

rid

=

resp.header

[

"location"

]

.scan

(

/rid=(.+?)&/

)

path

=

"/sso/authserver/server"

data

=

"request

=

login

1

&rid

=

#{rid}&sso-server=authserver&user=#{user}&password=#

{pass}&x=0&y=0"

http

=

Net

::

HTTP.new

(

"sso.era.pl"

,

80

)

resp

=

http.post

(

path

,

data

)

data

=

resp.header

[

"location"

]

.scan

(

/

login\?

(

.

+

?

)

$/

)

url

=

URI.parse

(

resp.header

[

"location"

])

path

=

"

#{url.path}?#{data}"

http

=

Net

::

HTTP.new

(

url.host

,

url.port

)

resp

=

http.get

(

path

,

nil

)

headers

=

{

"Cookie"

=>

resp.header

[

"set-cookie"

]

}

path

=

"/hk/msg/user/heyah/welcome.do"

http

=

Net

::

HTTP.new

(

"www.heyahklub.pl"

,

80

)

resp

=

http.post

(

path

,

nil

,

headers

)

token

=

resp.body.gsub

(

"

\n

"

,

""

)

.scan

(

/<

input type

=

"hidden"

name

=

"org

\.

apache

\

.

struts

\.

taglib

\.

html

\.

TOKEN"

value

=

"(.+?)"

\/>/

)

path

=

"/hk/msg/user/heyah/sms.do"

data

=

"tab

=

bottom&smsOptions.x

=

smsOptions&smsOptions

=

smsOptions&org.apache.stru

ts.taglib.html.TOKEN

=

#{token}&bottom.exact=t"

http

=

Net

::

HTTP.new

(

"www.heyahklub.pl"

,

80

)

resp

=

http.post

(

path

,

data

,

headers

)

token

=

resp.body.gsub

(

"

\n

"

,

""

)

.scan

(

/<

input type

=

"hidden"

name

=

"org

\.

apache

\

.

struts

\.

taglib

\.

html

\.

TOKEN"

value

=

"(.+?)"

>/

)

path

=

"/hk/msg/user/heyah/sms.do"

data

=

"send.x

=

send&send

=

send&top.phoneReceiver

=

#{phone}&top.text=#{text}&org.ap

ache.struts.taglib.html.TOKEN=#{token}&bottom.sender=msisdn"

http

=

Net

::

HTTP.new

(

"www.heyahklub.pl"

,

80

)

resp

=

http.post

(

path

,

data

,

headers

)

puts

"OK"

else

puts

"ERROR"

end

Rysunek 2

. Wygląd przykładowego

formularza HTML w przeglądarce Opera

Mobile

background image

ATAK

28

HAKIN9 5/2010

BRAMKI SMS I DARMOWE WIADOMOŚCI

29

HAKIN9

5/2010

W źródle znajdujemy szukaną wartość i
zapisujemy ją poprzez parsowanie tekstu:

token = resp.body.gsub("\n", "")
.scan(/<input type="hidden"
name="org\.apache\.struts\
.taglib\.html\.TOKEN"
value="(.+?)" \/>/)

Ostatecznie możemy przejść do wysłania
wiadomości:

path = "/hk/msg/user/heyah/sms.do"
data = "send.x=send&send=send&top.pho
neReceiver=#{phone}&top.text=
#{text}&org.apache.struts.tag
lib.html.TOKEN=#{token}&botto
m.sender=virtual"
http = Net::HTTP.new("www.heyahklub.pl

", 80)

resp = http.post(path, data, headers)

Jeśli wszystko poszło dobrze, SMS
powinien dotrzeć na wybrany numer.
Teraz zmodyfikujmy nasz skrypt tak,
abyśmy mogli użyć swojego numeru
telefonu. Podczas analizowania pakietów
zauważyliśmy, że wykonano dodatkowe
zapytanie HTTP. W źródle otwartej strony
można znaleźć nowy token. Jednak, aby
tego dokonać, musimy już posiadać
jego starą wartość i wysłać ją na żądany
adres:

path = "/hk/msg/user/heyah/sms.do"
data = "tab=bottom&smsOptions.x=smsOpt
ions&smsOptions=smsOptions&org
.apache.struts.taglib.html.TO
KEN=#{token}&bottom.exact=t"
http = Net::HTTP.new("www.heyahklub.
pl", 80)
resp = http.post(path, data, headers)

W identyczny sposób, jak to zrobiliśmy
ostatnio, pobieramy nowy token:

token = resp.body.gsub("\n", "")
.scan(/<input type="hidden"
name="org\.apache\.struts\
.taglib\.html\.TOKEN"
value="(.+?)">/)

Naszą modyfikację umieszczamy tuż przed
ostatnim zapytaniem. Cały skrypt został
przedstawiony w Listingu 2.

Formularz w telefonie

Naszym głównym celem było
zminimalizowanie kosztów, co wiąże się
z ilością przesyłanych lub pobieranych
danych. Właśnie dlatego warto jako interfejs
dla skryptu utworzyć prosty formularz
HTML, który umieścimy w pamięci naszego
telefonu. Praktycznie każda przeglądarka
internetowa na urządzenia mobilne
pozwala na otwieranie lokalnych plików. Nie
będziemy się zajmować tym, jak zbudować

taką stronę. Listing 3 przedstawia
przykładową stronę, a Rysunek 2 jej wygląd
w przeglądarce Opera Mobile (patrz ramka
W Sieci). Od tej pory możemy używać
naszego skryptu będąc poza domem,
bez dostępu do sieci bezprzewodowych, a
jedynie z zasięgiem telefonii komórkowej.

Podsumowanie

Należy wspomnieć, że Heyah nie daje
możliwości wysyłania nieograniczonej ilości
SMS-ów przez bramkę. Maksymalnie można
uzyskać 200 darmowych wiadomości na
każdy nowy miesiąc. Jednak ilość takich
bramek internetowych jest olbrzymia. Dla
programisty nie jest problemem dopisanie
własnych modułów obsługujących inne
strony. Mając własny skrypt, który potrafi
sam wybrać odpowiednią bramkę, możemy
wysyłać dużo więcej wiadomości. Oprócz
tego w celu ułatwienia sobie wpisywania
adresata, dobrym wyjściem byłoby
utworzenie książki adresowej załączonej we
wcześniej napisanej stronie HTML.

Pokazane tutaj metody są całkowicie

legalne. Przedstawiają jedynie sposób
użytkowania udostępnionych usług.
Napisanie takiego skryptu nie zajmuje wiele
czasu, ani nie jest trudne do wykonania.
Mimo tego można wiele się nauczyć oraz
zdobyć chociażby minimalne korzyści.
Automatyzuje on jedynie czynności, które
moglibyśmy wykonać osobiście za pomocą
przeglądarki. Trzeba jednak pamiętać, że
wykonanie ich poprzez telefon komórkowy
zwiększyłoby ilość pobranych danych, a tym
samym podniosło koszty.

Listing 3.

Przykład formularza do wysyłania wiadomości

<

!DOCTYPE html PUBLIC

"-//W3C//DTD XHTML 1.0 Transitional//EN"

"http://www.w3.org/

TR/xhtml1/DTD/xhtml1-transitional.dtd"

>

<

html xmlns=

"http://www.w3.org/1999/xhtml"

xml:lang=

"pl"

lang=

"pl"

>

<

head

>

<

meta http-equiv=

"Content-Type"

content=

"text/html; charset=utf-8"

/

>

<

meta name=

"viewport"

content=

"width=device-width, initial-scale=0.50,

minimum-scale=0.50, maximum-scale=1.1"

>

<

title

>

Bramka SMS - Heyah!

<

/title

>

<

style type=

"text/css"

>

body {
margin: 5;
}

<

/style

>

<

/head

>

<

body

>

<

form name=

"sms"

action=

"http://host/nazwa_skryptu"

method=

"post"

>

<

input name=

"p"

type=

"text"

value=

""

size=

"11"

/

><

br

/

>

<

textarea name=

"t"

rows=

"5"

cols=

"40"

><

/textarea

><

br

/

>

<

input type=

"hidden"

name=

"k"

value=

"ustalony_klucz"

/

>

<

input type=

"submit"

value=

"Send!"

/

>

<

/form

>

<

/body

>

<

/html

>

W Sieci

http://heyah.pl/mobilny-internet – oferta

mobilnego Internetu w Heyah,

http://heyahklub.pl/ – Klub Heyah,

bramka SMS,

http://www.wireshark.org/ – sniffer

Wireshark,

http://www.opera.com/mobile/

– przeglądarka Opera Mobile,

http://struts.apache.org/ – framework

Apache Struts.

Konrad Witaszczyk

Autor jest uczniem szkoły średniej. Utrzymuje stałą

współpracę z Uniwersytetem Jagielońskim, pracując

nad aplikacjami sieciowymi Europejskiej Akademii Gier

(http://ega.org.pl/).

Kontakt z autorem: konrad.witaszczyk@ega.org.pl.


Wyszukiwarka

Podobne podstrony:
Uważajcie na SMS y obiecujące darmowe wiadomości tekstowe
2010 05 Kombajn sygnałowy DDS
2010 05 R odp
2010 05 Analizator widma 70MHz część 2
2010 05 04
SERWIS 2010.05.08
L.P.T.O. Cwiczenie 05 - Rezonans napiec i pradow , Wiadomości ogólne
2010 05 Nagrzewnica indukcyjna 1kW
2010 05 Szkoła konstruktorów klasa III
2010 05 R
2010 05 P
2010.05.31 matematyka finansowa
05.2010-05-05
2010-05-17, bezpieczeństwo publiczne
21 Wiek 2010 05 spis tresci
CERTO 2010 05 20 Standardowy
2010 05 Płytki drukowane domowa soldermaska
2010 05 R

więcej podobnych podstron