sotra
12:21 06-03-2006 будничное
в выходные какой-то скучающий человек хакнул один из подопечных сайтов.
просматривая лог, обнаружила семь минут подбора директории с админкой. за эти семь минут было перебрано 433 предполагаемых названий. так как среди этого не нашлось более-менее подходящей, скучающий человек решил подчистить базу через поисковую форму.

commoncgi, ControlManager, CVS, .cobalt, NonExistant1809141272, AdminWeb, Administration, AdvWebAdmin, Mail, Install, News, PDG_Cart, README, Readme, Stats, StoreDB, ToDo, WebCalendar, WebTrend, _backup, _errors, _passwords, _scripts, _vti_bin, _vti_log, _vti_pvt, _vti_shm, login.htm, _vti_txt, account, accounting, adm, admin, admin-bak, admin-old, admin.back, admin_, administration, adminweb, analog, archive, archives, asp, auth, backups, cbi-bin, ccard, ccards, cd-cgi, cfide, cgi, cgi, cgi-auth, cgi-bin, cgi-bin2, cgi-lib, cgi-local, cgi-scripts, cgi-shl, cgi-shop, cgi-sys, cgibin, cgilib, cgis, cgiscripts, cgiwin, class, classes, config, credit, database, databases, datafiles, db, dbase, demo, demos, devel, doc, document, documents, download, downloads, email, hlstats, htdocs, iisadmin, iissamples, includes, include, incoming, intranet, log, login, logon, logs, lost+found, mysql_admin, old, oldfiles, oracle, passwords, payments, support, payment, private, protected, secret, secure, siteadmin, sites, stat, sslkeys, statistics, stats, stats_old, sysadmin, test, testing, tests, tmp, userdb, users, ustats, web_usage, webaccess, webalizer, webstats, webtrends, wstats, wwwstat, ~admin, ~stats, 1, 10, 3, 5, 6, 7, 8, 9, Album, CS, CVS, DocuColor, GXApp, HB, HBTemplates, IBMWebAS, JBookIt, Log, Msword, ROADS, SilverStream, Templates, WebBank, WebDB, Web_store, WebShop, XSL, _derived, _ScriptLibrary, _fpclass, _mem_bin, _notes, _objects, _pages, a, accesswatch, acciones, activex, admentor, agentes, anthill, app, applets, application, applications, apps, ar, atc, aw, ayuda, b, b2-include, back, backend, banca, banco, banner, banner01, banners, batch, bb-dnbd, bdata, bdatos, billpay, bin, boot, boadmin, bug, bugs, bugzilla, buy, buynow, cache-stats, card, cards, cart, cash, caspsamp, catalog, cd, cdrom, ce_html, cert, certificado, certificate, cfappman, cfdocs, cliente, clientes, cm, cmsample, cobalt-images, code, comments, common, communicator, compras, conecta, conf, connect, console, controlpanel, core, corp, cron, crons, crypto, csr, css, cuenta, cuentas, currency, cvsweb, cybercash, d, darkportal, data, dcforum, ddrint, demoauct, demomall, design, development, dl, dm, dms0, dmsdump, doc-html, docs1, docs, durep, e, easylog, eforum, ejemplos, emailclass, empoyees, empris, envia, enviamail, error, errors, es, examples, exc, excel, exchange, exe, external, f, fbsd, fcgi-bin, files, foldoc, form, forms, form-totaller, forum, forums, foto, fotos, fpadmin, fpdb, fpsample, framesets, g, gfx, global, grocery, guest, guestbook, helpdesk, hide, hit_tracker, hitmatic, home, hostingcontroller, ht, html, hyperstat, ibank, ibill, icons, icons, idea, ideas, image, imagenes, imagery, images, img, imp, import, impreso, inc, info, information, ingresa, ingreso, internal, inventory, invitado, isapi, japidoc, java, javasdk, jave, jdbc, job, jrun, js, jserv, jslib, jsp, labs, lcgi, lib, libraries, libro, links, linux, loader, logfile, logfiles, logg, logging, mail_log_files, makefile, manage, manual, marketing, members, message, messaging, metacart, mkstats, movimientos, mqseries, msql, mysql, ncadmin, nchelp, ncsample, netbasic, netcat, netscape, netshare, nettracker, new, nextgeneration, nl, objects, odbc, oprocmgr-service, oprocmgr-status, oradata, order, orders, outgoing, owners, pages, pccsmysqladm, personal, phorum, php, phpBB, phpMyAdmin, phpPhotoAlbum, phpSecurePages, php_classes, phpnuke, phpprojekt, piranha, pls, poll, postgres, printers, priv, privado, prod, public, publica, publico, purchase, purchases, pw, random_banner, rdp, register, registered, reports, reseller, restricted, reviews, root, rsrc, sales, save, script, scripts.
Комментарии:
Murchik
12:59 06-03-2006
нет, пардон, не называть каталог каким-то именем - это как не заводить переменную ?debug=1 %))
есть же множество действенных способов, начиная от .htaccess и .htpasswd, до define("__GO"); defined("__GO") or die ("access denied");, храниения всего репозитория вне глобалс...
и вообще...

кстати расскажи подробнее, мне интересно...
sotra
13:21 06-03-2006
Murchik, прежде чем я тебе что-то расскажу, скажи-ка, а какой у тебя айпишник? 8)
*** параноидально прищуривается 8) ***

да действенных-то способов полно, просто те, кому надо (или хочется) хакнуть, сделают все равно, как ты не называй директорию... неоднократно, кстати имели место быть так называемые "заказные" хаки..

тебе что именно интересно? спрашивай, расскажу 8)
Murchik
13:32 06-03-2006
sotra %)))))) 217,118,66,232 и 81,5,88,*** второй с таким вот уровнем доступности 0-)

мне в частности интересно,
пытался ли респондент подделывать заколовки http (через тот же telnet),
пытался ли натравить брутфорсину на регистрацию/авторизацию,
пытался ли инклудить какие-нибудь файлы через опознанные на серваке скрипты,
ломился ли на другие порты кроме 80,
на каком уровне абстракции вообще проилходила атака,
опускался ли до прослушивания на трейс-узлах,
еще интересны пути следования по сайту (не http_refer, конечно, а реальные)
и вообще адресок штурмованной местности дай %))
sotra
14:44 06-03-2006
Murchik, открою тебе очевидную для всех тайну - я могу читать логи только на уровне айпи-время-метод-урл-браузер 8)
а что оно делает, понять мозгов не хватает 8) хватает понять, что "возможно, в результате действий, отраженных в строке такой-то произошло то или иное событие"...
хотя попробую...
1. ни того, ни другого нет, травился поиск
2. лог большой, его весь досконально не изучала. на беглый взгляд, пытался, не получилось
3. неа
4. уровень абстракции? *** мозг закончился и завис *** 8)
5. ага
6. судя по логу, а точнее по временному интервалу между запросами (0-2 сек), зреет чувство, что это был не человек, а какой-нибудь натравленный робот...

штурмованная местность - allcartridges.ru (замечу, что сайт сделан больше для поисковиков, чем для пользователей, поэтому не серчай на юзабилити, роботам все равно 8) )
Murchik
16:45 06-03-2006
sotra так...
дырки, если смотреть поверхностно:
1. переменная PHPSESSID, передаваемая хоть в $_POST хоть в $_GET, хоть в $_печенье выводится без всякой проверки в браузер, что удобно для распределенных атак
2. GET /catalog.php?id=1+OR+1 вообще инкапсулирует переменную без всякой проверки прямо в код! (точнее в строку, конечно, но сути дела это не меняет)
лечится, ясное дело, чем-то типа function _tipa_clear_from_jerks(); где str_replace, substr, (type) на все описанные и unset на все неописанные.

если взяться досконально - наверняка можно будет выяснить как сайт админится, и если там такая же петрушка...

по поводу логов...
я, например, всегда делаю parse_errors.log, http_errors.log и paths.log - всё на уровне интерпретатора, и анализатор на основе explode() очень помогает быстро выяснить у кого откуда ноги растут...
sotra
18:16 06-03-2006
Murchik, ого! спасибо за анализ 8)

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

2. однажды нас в одном проекте особенностями хостинга вынудили проводить подобную проверку каждой гет-переменной... программисты отнеслись к этому скептически (если не сказать более грубо 8) ), проще уговорить клиента сменить хостинг, чем менять стандартный код. а все почему? потому что программистам лень 8) как говориться "пока гром не грянет...". наша логика: зачем проводить проверку, если на сайт до этого никто не покушался? при этом не обязательно помнить, что "до этого" был статичный сайт из трех хтмл-страниц 8) ладно, увлеклась )))

а админская часть вообще на другом сайте, этот завелся, как я уже отмечала, для поисковиков. всмысле, неважно, как она админится, ее найти сложно 8)

разделение логов имеет смысл, когда сайт один, он на своем хостинге и за ним надо смотреть хорошо. а у нас хостинг казенный, сайтов довольно много - проще написать в суппорт: "неправомерные действия третьих лиц ... адреса 127.0.0.1 ... просим восстановить от такого-то числа ...", тем самым убивая двух зайцев - типа восстановили и типа сообщили.
проще говоря, нам неинтересно выяснять кто виноват, не хочется тратить на это время, когда есть суппорт техподдержки. так, наверно, нельзя?.. 8)
Murchik
19:15 06-03-2006
sotra 1. называестся она php.ini: register_globals=off; и если что и дает, так чуть больше ограничений для программистов... становится невозможным обращаться к глобальной переменной $id как к $id, а нужно через $HTTP_GET_VARS['id'] к примеру...

2. ну, лично я считаю, что лучше сделать один раз нормально (тем более что усилий совсем не много нужно), чем, пусть и не часто, - слушать из трубки: "ты, ***, почему клиенты не могут попасть на сайт?!" %)))
хотя если ситуации сильно не напрягают - можно и так, конечно...

вообще по теме есть достаточно сопливая, но в целом правильная статья http://phpclub.ru/detail/article/2003-12-01 и еще есть много трёпа %))
sotra
22:32 06-03-2006
Murchik, про register_globals в курсе, обычно они у нас включены... думала про что-то другое, сейчас не вспомню 8(

минимальные и достаточные требования безопасности программисты обычно соблюдают, то есть то, что может назваться "защитой от дурака" они делают, а вот чтобы делать что-то больше, это, сам понимаешь, по законам предпринимательства, в рамках доработки, рекомендаций по улучшению работы сайта, его юзабилити и, конечно же, безопасности 8) и на вопрос клиента все всегда отвечают, что на момент создания сайта не было возможным реализация таких возможностей, ведь в большенстве случаев клиент не обладает достаточной квалификацией, чтобы проверить подобные слова 8) опять увлеклась )))

как говорится, у всего есть две стороны, и, зачасту, хак сайта не всегда плохо. с какой-то стороны 8)
Murchik
22:46 06-03-2006
sotra неожиданно... %)))
как бы не понабраться гадостей... %)))
sotra
22:52 06-03-2006
Murchik, ой... опять я наговорила лишнего и лишила единственного на миллион энтузиаста радости волонтерской работы 8)
мне стыдно 8)
Murchik
23:30 06-03-2006
sotra хмык... дело ведь не в степени факультативности (коей и я - стыдно сказать - в последнее время даже не пахну), а в отношении к тому, что делаешь...
но что-то мы отклонились от темы %))
что я знаю точно, так это что какеры в отличие от программеров не бывают ленивыми %))
sotra
23:50 06-03-2006
что я знаю точно, так это что какеры в отличие от программеров не бывают ленивыми
о, вот это очень верные слова! 8) и в этом преимущество и недостаток обеих сторон 8)
программистам платят, а третьим лицам, совершающими неправомерные действия - нет. за тем редким исключением, когда хак заказной, но заказной хак практикуется редко, потому как согласно УК РФ, любой неправомарный доступ (будь то заказной или нет) к защищенной информации есть уголовнонаказуемое преступление.

поэтому из этого изумительного противостояния в любом случае выиграет программист, а проигрывает в некотором роде - заказчик, что тоже очень условно 8)

проще говоря, я, как человек, находящийся ближе к программистам, не понимаю людей, хакающих сайты для развлечения, ведь они не только рискуют (пусть это все мало доказуемо), но и им за это еще и не платят 8)

чтой-то я заговариваюсь 8)