0x03 – Digiturk WebTV

321 milyon dolar… Digiturk’un, onumuzdeki 4 senenin SuperLig yayin hakki icin odeyecegi meblag. Biraz “fahis” bir fiyat gibi gozukse de, saglanacak gelir 321 milyon dolardan fazla oldugu surece sasirmanin, isyan etmenin, elestirmenin pek bir anlami yok.. Peki nedir bu gelir yollari? Digiturk kutulari ve uyelik paketleri ile reklam gelirleri tabii ki en onemlileri. Bunun yanisira, yurtdisinda yasayan futbol meraklilari icin “Digiturk WebTV” hizmeti de sunuluyor; bu sayede 30$ karsiliginda internetten LigTV ve baska turk kanallarini da izlemek mumkun. Benim gibi, kiralik yasadigi apartmana Digiturk uydusu taktirmanin imkansiz oldugu ulkelerde yasayanlar, ve JustinTV ya da benzeri beles izleme yollarina basvurmak istemeyenler icin bu cozum birebir.. Her ne kadar zaman zaman takilip insani sinir etse de, genel olarak faydali bir servis diyebilirim.

Neyse, Digiturk WebTV’yi (kisaca WebTV diyelim) bilmeyenler icin kisa bir giris paragrafindan sonra simdi asil konuya girebiliriz. Bu yazinin iki amaci var:

  1. WebTV’yi Windows disindaki bir isletim sisteminden (MacOS, Linux gibi) nasil izleyebildigimi gostermek.
  2. Yukaridakini gerceklestirmeye calisirken ortaya cikardigim, ve WebTV’yi bedava izlememi saglayan bir guvenlik acigini paylasmak.

Yazinin sonunda, bu iki amaca yonelik gelistirdigim basit bir Python scriptini de paylasacagim.

Bu yazida yazdiklarimin tamami, Digiturk WebTV’nin yurtdisina acik olan sitesi ve sistemi uzerinde denenmistir. Turkiye’den mac izlemek icin saglanan portalda ayni yontemlerin ise yarayip yaramayacagini bilemiyorum.

Bu yazimin amaci, insanlari IT guvenligi konusunda ornekler vererek bilinclendirmektir. “Digiturk rezalet, bilinciz” vs gibi bir iddiam yok, zira bu tarz aciklara her gun her yerde rastliyoruz. Ayrica Digiturk, bircok sirketin aksine, durumu ciddiye alip kisa bir surede acigi kapatmistir.

 

Windows bagimliligindan kurtulmak

Digiturkwebtv.com’daki Sikca Sorulan Sorular kismina gore sistem gereksinimleri: “İşletim sistemi:Windows 2000, XP,Vista,7. Tarayıcı: Internet Explorer 7.0 yada üzeri”.. Yani Linux ya da MacOS ile izlemek mumkun degil.. Aslinda yine ayni sayfada yazan “Yayın formatı Windows Media 9 formatında olup, Microsoft DRM (Digital Rights Management) sistemi ile güvenli olarak şifrelenmektedir.” ibaresine guvenecek olursak, bunun dogru olmasi lazim.. cunku DRM lisansi sadece Windows ile indirilip kullanilabiliyor. Ancak birazdan goreceginiz gibi, DRM kullanilmamakla birlikte, yayinlari Windows disindan izlemek de gayet mumkun. En azindan ben su anda Apple Macbook’um uzerinde VLC programi ile izleyebiliyorum.

Yapmamiz gereken, WebTV tarafindan stream edilen video’nun direkt linkini elde etmek. Bunu nasil yapacagimiz anlamak icin ise WatchTv2.aspx sayfasinin kaynak koduna goz atmak yeterli. Anasayfadan giris yaptiktan sonra “TV izle” linkine tiklayip WatchTV2.aspx sayfasina gelebilirsiniz. Bu sayfanin sag tarafinda, eger parasini odeyip paket satin almis bir uye iseniz, kanallarin listesi yer aliyor. Kaynak kodda bu bolume bakarsak, bir kanala tiklandigi zaman islemkutu fonksiyonunun bir parametre ile cagrildigini gorebiliriz. Ornegin LigTV icin:

<span  class="c_item" onclick=javascript:islemkutu('817142825')>
   <img src="images/kanal_isim/ligtv_logo.png"></img>
</span>

817142825 parametresi, LigTV kanalinin id’si. ShowTurk 817132544, ATV 817132536, vs…

islemkutu fonksiyonuna bakarsak:

function islemkutu(deger) {
            //http.open('get', 'generatelink.aspx?kanal=' + deger);
            http.open('post', 'adminchannel.aspx', true);
            http.onreadystatechange = cevapFonksiyonu;
            http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
            //http.send(null);
            http.send('kanal=' + deger);
        }

Burada goruyoruz ki, adminchannel.aspx adresine bir POST request yollaniyor. Bu POST request’te ayrica istenilen kanalin id’si de “kanal=id” seklinde yollaniyor. Ornegin ShowTurk icin, “kanal=817132544″ request’ini yollayabiliriz. Bu request’e admin channel.aspx tarafindan gonderilen cevap ise, cevapFonskiyonu‘na besleniyor. cevapFonksiyonunun tek yaptigi da WatchTV2.aspx sayfasinda bulunan “gomulu” (embedded) Media Player ile cevapta gelen linki acmak.

Peki, biz kendimiz adminchannel.aspx‘e, izlemek istedigimiz kanalin id’sini iceren bir POST request yollasak, gelen cevabi da VLC gibi harici bir medya programinda acsak, WebTV’nin sayfasina bagimli kalmadan rahat rahat izlesek olmaz mi? Olur.

Bunu denemek icin telnet programini kullanabiliriz.
> telnet www.digiturkwebtv.com 80 komutuyla baglanti kurulduktan sonra,

POST /adminchannel.aspx HTTP/1.0
Content-type: application/x-www-form-urlencoded
Referer: http://www.digiturkwebtv.com/WatchTv2.aspx
Cookie: ASP.NET_SessionId=[cookie buraya]
Content-length: 15

kanal=817142825

seklinde bir POST request yollanabilir. Burada onemli olan, [cookie buraya] kismina, login olmus bir uyenin gecerli cookie degerini (eubwzv550ljwjk20bljccp55 gibi bir deger) yazmak…

Bu request yollandiktan sonra asagidaki gibi bir cevap gelecektir:

mms://a347.l7614612346.c76146.g.lm.akamaistream.net/D/347/76146/v0001/reflector:12346?auth=da_boaObmcJbXcRc1cjcadQazc5dnagbpd2-blk8sK-jy-FnlECpzsyEH-n2tWkamUp4q6n0q5pVoRoUk8mlpXt4nSn0t3j6mSp6r5

Bu MMS adresini VLC gibi bir programla acip sectiginiz kanali izleyebilirsiniz.

 

Daha basit bir yontem…

Kim ugrasacak telnetle cookie’yle diyorsaniz, bu yaziyi yazarken tesadufen kesfettigim bir baska yontemi de aktarayim. Sikca kullandigim pratik bir Firefox uzantisi olan Tamper Data sayesinde, zahmetsiz bir sekilde MMS adresine ulasmak mumkun. Oncelikle uzantiyi buradan yukleyip, Firefox’u restart edin. Daha sonra digiturwebtv.com’a girip uye girisi yapin. Kanallarin listelendigi sayfaya gelince, Firefox’un “Tools” menusunden “Tamper Data”yi secerek calistirin. Herhangi bir dugmeye basmaniza gerek yok. Simdi WebTV sayfasina donup, izlemek istediginiz kanala tiklayin. Tamper Data’ya donup, Method’u POST, URL’i “http://www.digiturkwebtv.com/adminchannel.aspx” olan satiri bulun (bastiginiz anda cikmasi lazim zaten). Sag tikayip “View Source”u secin.. Acilan kutuda MMS adresi yer alacaktir. Tek yaptigimiz, kanala tiklayarak yolladigimiz POST request’e gelen, ve normalde bize gizli olan cevabi, Tamper Data sayesinde goruntulemek.

 

Hesap paylasimi

Bu asamada akla gelen muzip soru: elde ettigimiz linki arkadaslarimizla paylasip ayni anda izleyebilir miyiz?

WebTV’nin buna karsi aldigi onlem, WatchTV2.aspx sayfasinin kaynak kodunda gorebilecegimiz CheckUser fonksiyonu. Bu fonksiyon, belli araliklarla checkuser.aspx sayfasina POST request gonderiyor. Boylece sunucu, request’in geldigi IP adresine bakip farkli IP’lerden giris yapilip yapilmadigini kontrol edebiliyor. Ancak CheckUser() tarayici tarafindan calistirilan bir script oldugundan, ve biz yukaridaki yontem sayesinde tarayici kullanmadan (ornegin VLC uzerinden) kanal izleyebildigimizden, bu yontem paylasimin onune gecemiyor.

Ote yandan, yaptigim denemeler sonucu, verilen MMS linkinin de IP’ye bagli oldugu kanaatine vardim. Asagida da paylastigim script’imi baska bir sunucu uzerinde calistirip, elde ettigim linki kendi bilgisayarimda calistirmayi denedigimde link gecersiz hatasi aldim. Dolayisiyla, bu anlattigim yontemle alinan adres, ayni evde bulunan, ayni IP ile internete cikan bilgisayar icin gecerli sadece.

Bu sinirlama tabii ki hesap paylasiminin onune gecemiyor, zira ben linki elde ettikten sonra tarayicimi kapatip VLC ile izlemeye devam ederken, baska bir yerde oturan (farkli IP adresiyle internete giren) bir arkadasim ayni hesap bilgileri ile login olup kendine link alip aynen izlemeye baslayabilir.

 

Sonuc?

Su ana kadar yaptiklarimizin sonuclarini soyle ozetleyebiliriz:

  1. WebTV sitesinde yazilanin aksine, DRM kullanilmiyor,
  2. WebTV sitesinde yazilanin aksine, yayinlari izlemek icin Windows isletim sistemi ve Media Player programi sart degil,
  3. Ayni anda birden fazla bilgisayar uzerinden WebTV izlemek mumkun.

Bitti mi? Bitmedi :)

 

Bedava Digiturk

Kendi bilgisayarimda (Macbook) mac izleyebilmek icin yukarida yazdiklarimi denerken bir guvenlik aciginin farkina vardim. Daha onceki yazimda (0x02) da yaptigim gibi, oncelikle Digiturk’e acigi bildirerek kapatilmasini bekledim. Surec soyle gerceklesti:

  • 28 mart 2010: Digiturk Web TV musteri hizmetlerine mail atip, durumu bildirip, IT departmanindan birinin benimle iletisime gecmesini istedim.
  • 29 mart 2010: Digiturk’te calisan tanidik bulup direkt kendisine mail attim.
  • 31 mart 2010: Digiturk’ten yetkililer benimle iletisime gecip acik hakkinda bilgi aldilar.
  • 1 nisan 2010: Acik kapatildi.

Hemen ilgilenip acigi bu kadar cabuk kapattiklari icin kendilerini kutluyorum. Daha onceki yazimda bahsi gecen Isvecli sirketin acigi kapatmasi 2 ay kadar surmustu.

Neyse kendilerine attigim mail’den bir kismini buraya aktariyorum:

“[…] sorun surada ki, bu POST request’ini yapmak ve serverdan gecerli MMS linki almak icin, paket satin almis olmak gerekmiyor, herhangi bir uyelik ile login olmak yeterli. Ornegin benim suresi gecmis olan hesabim [email adresim]. Bu hesapla login oldugumda WatchTv2.aspx sitesinde kanal listesini goremedigim icin normalde izleyememem lazim, ama kanallarin id’sini bildigim icin, login olduktan sonra adminchannel.aspx’e o id ile POST gonderip MMS linki alabiliyorum. […]”

Acik bir “access control” eksikliginden ibaret: adminchannel.aspx, gelen request’in kim tarafindan gonderildigini kontrol etmeden cevap gonderiyor. Bu durumda, siteye kayit formunu kullanarak 2 dakikada uye olmus biri ile, ayda 30 dolar veren bir uye arasinda fark kalmiyor.

Bu acigi kapatmak icin, adminchannel.aspx kodunda, POST requesti yollayan kullanicinin uyelik tipinin (Spor paketi, Aile paketi, paketsiz) kontrol edilmesi ve ona gore cevap verilmesi yeterli.

Bu acigin kapatilmasi belescileri onluyor, ama demin anlattigim, bir kac bilgisayardan ayni anda izleme sorununu cozmuyor. Bu sorunu engellemek icin, adminchannel.aspx kodunda, gecerli bir linkin verildigi IP adresi kayit edilip, tekrar request geldigi taktirde bu IP ile karsilastirilip, farkli IP oldugu taktirde (bir sure?) link verilmeyebilinir. Bu yontem hesap paylasimini engelleyebilir ama baska sorunlari beraberinde getirecektir. Devre arasinda komsuya gidip mac izlemek isteyen kullanicinin bunu yapmaya hakki oldugu halde yapamamasi gibi… Aslinda yapilmasi gereken, streaming hizmeti veren cogu sirketin yaptigi gibi, DRM lisanslari kullanmak. Yillar once ilk acildiginda bu yolu kullanan WebTV, sonra neden vazgecip yeni sisteme gecis yapti bilemiyorum.

 

Script

Digiturk’e guvenlik acigina proof-of-concept gostermek amaciyla yazdigim python scripti, WebTV’ye login olup istedigim kanalin linkini ekranda gosteriyor. Detayli anlatma geregi duymuyorum, ama bir sorunuz olursa cevaplayabilirim. Script “mechanize” modulunu kullaniyor, dolayisiyla scripti calistirabilmek icin mechanize’i bu linkten indirip kurmaniz lazim. Scripti calistirmak icin:

> python digiturk.py kullaniciadi parola

yazmak yeterli. Guvenlik acigi kapatilmadan once, kullaniciadi ve parola olarak girdiginiz hesabin paket satin almis olmasina gerek yoktu, ancak artik bu duzeltilmis durumda. Yine de scripti kullanarak, gecerli hesabiniz ile linux veya macos altinda kolayca yayinlara ulasabilirsiniz.

Scriptte kanallarin id’leri “hard-coded” olarak yazilmistir. Bunlar Digiturk tarafindan degistirildigi taktirde, WebTV’ye normal yoldan login olup, kaynak koduna bakarak kanallarin yeni id’lerini bulabilir ve scripti kendiniz guncelleyebilirsiniz. Ayrica istediginiz kanallari ekleyip cikarabilirsiniz.

Scripti buradan indirebilirisiniz.

Leave a comment ?

69 Comments.

  1. bilen yok mu arkadaslar? android telefonumdan web tv yi kullanabiliyor muyuz?
    uyelgim var. selamlar

  2. usta acigi bulmussun,anlatiyorsun harika,yalniz,digitürkle iletisime gecmisin,sana bi ödül verdilermi acaba,sirf bu isi kendini ispatlamak icinmi yaptin,saygilar.

  3. Alican Lakot

    Bir turlu
    br.open(‘http://www.digiturkwebtv.com/generateurl.aspx’, params)
    Sonuc alamadim, parametre olarak ReleaseID gonderiyorum.

    Hep bos sonuc donuyor, header: Content-Length: 0
    Ne olur bir yardim?

  4. selam hocam bilgiler için tesekkurler.. amacım bedava felam izlemek değil yasal olarak webtv abonsiyim.. TR den izliyorum.. yaa siteden değil VLC ile izlemek istiyorum varmıdır bunu bir yolu nasıl yapmamız gerekior şimdiden tesekkurler

  5. Selamlar, TR’deki webtv’yi bilmiyorum ama yurtdisi sitesi tamamen Silverlight’a gecti, onu da VLC ile izlemek mumkun degil sanirim.. arastirmak lazim :)

  6. adam açık bulmuş kalkıp onuda digiturk ile paylaşmış sanki ona madal ya takacaklarki büyük ihtimalle onuda yapmamışlardır..işin komik tarafı bulduğu açığı bildirmek için hayli çaba sarf etmiş..

  7. tam yavşakmışsın dostum…açığı buldun ne diye söylüyon..işe mi alırlar diye düşündün…

  8. sizin python icin verdiginiz script wndows uzerinde kullandigimda hata veriyor yazilar cok uzun diyor bunu nasil duzeltebilriz yada windows scripti verebilirmisiniz

  9. @sanalcan, yok ise ihtiyacim yoktu, yavsakligim tuttu herhalde :)

  10. ben putty ile post yolladigimda not found http 1.0 hatasi ve wroungcountry hatasi aliyorum sorun ne olabilir acaba

  11. sizin verdiginiz ornek postu kendi cookeme gore duzenledim fakat
    http/1.0 302 found
    location: /wrongcountry.asp
    server: bigIp
    connection:Keep-Alive
    content-leng: 0 hatasi veriyo sorun neden kaynaklaniyor yardimci olabilirseniz sevinrim simdiden tesekkurler

  12. esrever kardes su senin digiturk yetkilisine bu bilgileri iletirsen cok iyi olur mersin gulnar da mehmet akif oner isimli arkadas digi webtv uzerindeki 33 kanalin ip adreslerine kadar ulasmis ve bu yayinlari para ile satmakta ben digi yetkililierine ulasamiyorum sen bildirirsen cok iyi olur haksiz kazanca karsiyim

  13. @purson, yasadisi yayin yapan siteni yazmadan sorsaydin bari.. su anda sana yardim etmemi beklemen kadar sacma bir sey yok.

  14. @isyankar, tesekkur eder iletirdim de, senin siten ne olacak onu da ihbar edeyim mi?

  15. Tamper Data üzeri sistem calismiyor. …/adminchannel.aspx adressi bulunamiyor

    video/mp4 content type sadece slmsm.castup referrere baglaniyor saniye basi…

    Baska bir yöntem mevcutmu?
    Selamlar

  16. 12:55:12.973[400ms][total 400ms] Status: 200[OK]
    POST http://www.digiturkwebtv.com/generateurl.aspx Load Flags[LOAD_BYPASS_CACHE LOAD_BACKGROUND ] Größe des Inhalts[740] Mime Type[text/plain]
    Request Header:
    Host[www.digiturkwebtv.com]
    User-Agent[Mozilla/5.0 (Windows NT 6.1; WOW64; rv:11.0) Gecko/20100101 Firefox/11.0]
    Accept[text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8]
    Accept-Language[de-de,de;q=0.8,en-us;q=0.5,en;q=0.3]
    Accept-Encoding[gzip, deflate]
    Connection[keep-alive]
    Content-Type[application/x-www-form-urlencoded; charset=UTF-8]
    Referer[http://www.digiturkwebtv.com/WatchTv.aspx]
    Content-Length[798]
    Cookie[__utma=197939130.1747560111.1331989575.1332180181.1334572941.3; __utmz=197939130.1332180181.2.2.utmcsr=digiturkplay.com.tr|utmccn=(referral)|utmcmd=referral|utmcct=/Yonlendirme.htm; ASP.NET_SessionId=5aseco45nurzbqmrljpo1oni; __utmb=197939130.7.10.1334572941; __utmc=197939130]
    Pragma[no-cache]
    Cache-Control[no-cache]
    POST-Daten:
    ReleaseID[597974664D764430785235696C7844796E3859306A673D3D]
    undefined[undefined]
    Response Header:
    Cache-Control[private]
    Pragma[no-cache]
    Content-Type[text/plain; charset=utf-8]
    Content-Encoding[gzip]
    Expires[Mon, 16 Apr 2012 10:54:11 GMT]
    Vary[Accept-Encoding]
    Server[Microsoft-IIS/7.5]
    X-AspNet-Version[2.0.50727]
    Date[Mon, 16 Apr 2012 10:55:10 GMT]
    Content-Length[740]

    buradan nereden linki linux icin cikarabilirim? mms türü

    selmalar :evil:

  17. ya benim anlamadigim su postlari nasil veriyorum?? daha yeniyim bilmiyorum.

  18. kardes 2013 yilindayiz ve yazdigin makale 2010 yilina ait, acaba 2013 yilina ait bir bilgi varmi bu digiturk web tv yi tek hesap uzerinden 2 kisi izleme?

  19. malmisin amk

    acigi bildirmissin iyi bok yemissin.

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>