From dba3e1eae8a22711568cd5ec191468054c91fcf5 Mon Sep 17 00:00:00 2001 From: oesi Date: Tue, 7 Apr 2015 14:22:44 +0200 Subject: [PATCH] =?UTF-8?q?Fixed=20Remote=20Code=20Execution=20L=C3=BCcke?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zipdownload_benotungstool.php | 101 +++++++++--------- cis/private/lehre/semupload.php | 8 +- include/tw/cis_menu_lv.inc.php | 70 ++++++------ 3 files changed, 92 insertions(+), 87 deletions(-) diff --git a/cis/private/lehre/benotungstool/zipdownload_benotungstool.php b/cis/private/lehre/benotungstool/zipdownload_benotungstool.php index f3cdb4b8f..e3b9a9f27 100755 --- a/cis/private/lehre/benotungstool/zipdownload_benotungstool.php +++ b/cis/private/lehre/benotungstool/zipdownload_benotungstool.php @@ -25,56 +25,61 @@ * @create 20-03-2006 * Aufruf: zipdownload.php?stg=255&sem=1$short=eng */ +require_once('../../../../config/cis.config.inc.php'); +require_once('../../../../include/functions.inc.php'); - require_once('../../../../config/cis.config.inc.php'); - require_once('../../../../include/functions.inc.php'); - $user = get_uid(); +$user = get_uid(); - //Gueltigkeit der Parameter pruefen - if(!isset($_GET['uebung_id']) || !is_numeric($_GET['uebung_id'])) - { - die('Fehler bei der Parameteruebergabe'); - } - if(!isset($_GET['lehreinheit_id']) || !is_numeric($_GET['lehreinheit_id'])) - { - die('Fehler bei der Parameteruebergabe'); - } - if(!isset($_GET['stsem'])) - { - die('Fehler bei der Parameteruebergabe'); - } - if(!isset($_GET['downloadname'])) - { - die('Fehler bei der Parameteruebergabe'); - } +if(!check_lektor($user)) + die('Sie haben keine Berechtigung fuer diese Seite'); - - $uebung_id = $_GET['uebung_id']; - $lehreinheit_id = $_GET['lehreinheit_id']; - $stsem = $_GET['stsem']; - $downloadname = $_GET['downloadname']; - +//Gueltigkeit der Parameter pruefen +if(!isset($_GET['uebung_id']) || !is_numeric($_GET['uebung_id'])) +{ + die('Fehler bei der Parameteruebergabe'); +} +if(!isset($_GET['lehreinheit_id']) || !is_numeric($_GET['lehreinheit_id'])) +{ + die('Fehler bei der Parameteruebergabe'); +} +if(!isset($_GET['stsem'])) +{ + die('Fehler bei der Parameteruebergabe'); +} +if(!isset($_GET['downloadname'])) +{ + die('Fehler bei der Parameteruebergabe'); +} - //Pfade bauen - $pfad = BENOTUNGSTOOL_PATH.'abgabe/'; - $filename = 'download_'.$user.'_'.$downloadname.'.zip'; - - - //Pfad wechseln - chdir($pfad); - - - //File loeschen falls es existiert - //if(file_exists("download_".$user."*")) - exec("rm download_".$user."*"); - - //Zip File erstellen - exec("zip -r ".$filename." *_[WS]S[0-9][0-9][0-9][0-9]_".$uebung_id."_*"); +$uebung_id = $_GET['uebung_id']; +$lehreinheit_id = $_GET['lehreinheit_id']; +$stsem = $_GET['stsem']; +$downloadname = $_GET['downloadname']; - //Auf Zip File Verweisen - //header("Location: $pfad$filename"); - header('Content-Type: application/octet-stream'); - header('Content-disposition: attachment; filename="'.$filename.'"'); - readfile($filename); - unlink($filename); -?> \ No newline at end of file +if(mb_strstr($downloadname,'..')) + die('Ungueltiger Parameter gefunden'); + +//Pfade bauen +$pfad = BENOTUNGSTOOL_PATH.'abgabe/'; +$filename = 'download_'.$user.'_'.$downloadname.'.zip'; + +if(!check_filename($filename)) + die('Ungueltiger Parameter gefunden'); + +//Pfad wechseln +chdir($pfad); + +//File loeschen falls es existiert +//if(file_exists("download_".$user."*")) +exec('rm download_'.$user.'*'); + +//Zip File erstellen +exec("zip -r ".escapeshellarg($filename).' *_[WS]S[0-9][0-9][0-9][0-9]_'.$uebung_id.'_*'); + +//Auf Zip File Verweisen +//header("Location: $pfad$filename"); +header('Content-Type: application/octet-stream'); +header('Content-disposition: attachment; filename="'.$filename.'"'); +readfile($filename); +unlink($filename); +?> diff --git a/cis/private/lehre/semupload.php b/cis/private/lehre/semupload.php index 5542732dd..1000a8294 100644 --- a/cis/private/lehre/semupload.php +++ b/cis/private/lehre/semupload.php @@ -102,7 +102,7 @@ $openpath = DOC_ROOT.'/documents/'.strtolower($stg_obj->kuerzel).'/'.$lv_obj->se if(is_file($openpath . $inhalt)) { writeCISlog('DELETE', "rm -r '$openpath$inhalt'"); - exec("rm -r '$openpath$inhalt'"); + exec("rm -r ".escapeshellarg($openpath.$inhalt)); echo '
'.$p->t('global/erfolgreichgelöscht').'
'; } else @@ -132,11 +132,11 @@ $openpath = DOC_ROOT.'/documents/'.strtolower($stg_obj->kuerzel).'/'.$lv_obj->se { if(!stristr($fn, '.php') && !stristr($fn, '.php3') && !stristr($fn,'.php4') && !stristr($fn, '.php5') && - !stristr($fn, '.cgi') && !stristr($fn, '.pl')) + !stristr($fn, '.cgi') && !stristr($fn, '.pl') && !stristr($fn, '.phtml')) { if(move_uploaded_file($_FILES['userfile']['tmp_name'],$openpath . $fn)) { - exec('sudo chown www-data:teacher "'.$openpath.$fn.'"'); + exec('sudo chown www-data:teacher '.escapeshellarg($openpath.$fn)); echo '
'.$p->t('semesterplan/fileErfolgreichHochgeladen').'
'; } else @@ -181,4 +181,4 @@ $openpath = DOC_ROOT.'/documents/'.strtolower($stg_obj->kuerzel).'/'.$lv_obj->se ?> - \ No newline at end of file + diff --git a/include/tw/cis_menu_lv.inc.php b/include/tw/cis_menu_lv.inc.php index 551cc2db0..e0f38aaac 100644 --- a/include/tw/cis_menu_lv.inc.php +++ b/include/tw/cis_menu_lv.inc.php @@ -86,8 +86,8 @@ function checkZeilenUmbruch() $dir_name=$DOC_ROOT.'/documents'; if(!is_dir($dir_name)) { - exec('mkdir -m 755 "'.$dir_name.'"'); - exec('sudo chown www-data:teacher "'.$dir_name.'"'); + exec('mkdir -m 755 '.escapeshellarg($dir_name)); + exec('sudo chown www-data:teacher '.escapeshellarg($dir_name)); } $angemeldet = true; if(defined('CIS_LEHRVERANSTALTUNG_WENNANGEMELDET_DETAILS_ANZEIGEN') && CIS_LEHRVERANSTALTUNG_WENNANGEMELDET_DETAILS_ANZEIGEN && !$is_lector) @@ -123,23 +123,23 @@ function checkZeilenUmbruch() { if(!@is_dir(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz))) { - exec('mkdir -m 755 "'.DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'"'); - exec('sudo chown www-data:teacher "'.DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'"'); + exec('mkdir -m 755 '.escapeshellarg(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz))); + exec('sudo chown www-data:teacher '.escapeshellarg(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz))); } if(!@is_dir(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester)) { - exec('mkdir -m 755 "'.DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'"'); - exec('sudo chown www-data:teacher "'.DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'"'); + exec('mkdir -m 755 '.escapeshellarg(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester)); + exec('sudo chown www-data:teacher '.escapeshellarg(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester)); } if(!@is_dir(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'/'.mb_strtolower($short_short_name))) { - exec('mkdir -m 755 "'.DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'/'.mb_strtolower($short_short_name).'"'); - exec('sudo chown www-data:teacher "'.DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'/'.mb_strtolower($short_short_name).'"'); + exec('mkdir -m 755 '.escapeshellarg(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'/'.mb_strtolower($short_short_name))); + exec('sudo chown www-data:teacher '.escapeshellarg(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'/'.mb_strtolower($short_short_name))); } if(!@is_dir(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'/'.mb_strtolower($short_short_name).'/semesterplan')) { - exec('mkdir -m 775 "'.DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'/'.mb_strtolower($short_short_name).'/semesterplan"'); - exec('sudo chown www-data:teacher "'.DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'/'.mb_strtolower($short_short_name).'/semesterplan"'); + exec('mkdir -m 775 '.escapeshellarg(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'/'.mb_strtolower($short_short_name).'/semesterplan')); + exec('sudo chown www-data:teacher '.escapeshellarg(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'/'.mb_strtolower($short_short_name).'/semesterplan')); } } @@ -206,23 +206,23 @@ function checkZeilenUmbruch() { if(!@is_dir(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz))) { - exec('mkdir -m 755 "'.DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'"'); - exec('sudo chown www-data:teacher "'.DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'"'); + exec('mkdir -m 755 '.escapeshellarg(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz))); + exec('sudo chown www-data:teacher '.escapeshellarg(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz))); } if(!@is_dir(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester)) { - exec('mkdir -m 755 "'.DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'"'); - exec('sudo chown www-data:teacher "'.DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'"'); + exec('mkdir -m 755 '.escapeshellarg(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester)); + exec('sudo chown www-data:teacher '.escapeshellarg(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester)); } if(!@is_dir(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'/'.mb_strtolower($short_short_name))) { - exec('mkdir -m 755 "'.DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'/'.mb_strtolower($short_short_name).'"'); - exec('sudo chown www-data:teacher "'.DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'/'.mb_strtolower($short_short_name).'"'); + exec('mkdir -m 755 '.escapeshellarg(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'/'.mb_strtolower($short_short_name))); + exec('sudo chown www-data:teacher '.escapeshellarg(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'/'.mb_strtolower($short_short_name))); } if(!@is_dir(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'/'.mb_strtolower($short_short_name).'/download')) { - exec('mkdir -m 775 "'.DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'/'.mb_strtolower($short_short_name).'/download"'); - exec('sudo chown www-data:teacher "'.DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'/'.mb_strtolower($short_short_name).'/download"'); + exec('mkdir -m 775 '.escapeshellarg(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'/'.mb_strtolower($short_short_name).'/download')); + exec('sudo chown www-data:teacher '.escapeshellarg(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'/'.mb_strtolower($short_short_name).'/download')); } } @@ -294,23 +294,23 @@ function checkZeilenUmbruch() { if(!@is_dir(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz))) { - exec('mkdir -m 755 "'.DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'"'); - exec('sudo chown www-data:teacher "'.DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'"'); + exec('mkdir -m 755 '.escapeshellarg(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz))); + exec('sudo chown www-data:teacher '.escapeshellarg(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz))); } if(!@is_dir(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester)) { - exec('mkdir -m 755 "'.DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'"'); - exec('sudo chown www-data:teacher "'.DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'"'); + exec('mkdir -m 755 '.escapeshellarg(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester)); + exec('sudo chown www-data:teacher '.escapeshellarg(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester)); } if(!@is_dir(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'/'.mb_strtolower($short_short_name))) { - exec('mkdir -m 755 "'.DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'/'.mb_strtolower($short_short_name).'"'); - exec('sudo chown www-data:teacher "'.DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'/'.mb_strtolower($short_short_name).'"'); + exec('mkdir -m 755 '.escapeshellarg(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'/'.mb_strtolower($short_short_name))); + exec('sudo chown www-data:teacher '.escapeshellarg(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'/'.mb_strtolower($short_short_name))); } if(!@is_dir(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'/'.mb_strtolower($short_short_name).'/leistung')) { - exec('mkdir -m 775 "'.DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'/'.mb_strtolower($short_short_name).'/leistung"'); - exec('sudo chown www-data:teacher "'.DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'/'.mb_strtolower($short_short_name).'/leistung"'); + exec('mkdir -m 775 '.escapeshellarg(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'/'.mb_strtolower($short_short_name).'/leistung')); + exec('sudo chown www-data:teacher '.escapeshellarg(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'/'.mb_strtolower($short_short_name).'/leistung')); } } @@ -453,7 +453,7 @@ function checkZeilenUmbruch() //Moodle $showmoodle=false; //Schauen ob Moodle fuer diesen Studiengang freigeschaltet ist - $qry = "SELECT moodle FROM public.tbl_studiengang JOIN lehre.tbl_lehrveranstaltung USING(studiengang_kz) WHERE lehrveranstaltung_id='".addslashes($lvid)."'"; + $qry = "SELECT moodle FROM public.tbl_studiengang JOIN lehre.tbl_lehrveranstaltung USING(studiengang_kz) WHERE lehrveranstaltung_id=".$db->db_add_param($lvid, FHC_INTEGER); if($result = $db->db_query($qry)) { if($row = $db->db_fetch_object($result)) @@ -572,23 +572,23 @@ function checkZeilenUmbruch() { if(!@is_dir(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz))) { - exec('mkdir -m 755 "'.DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'"'); - exec('sudo chown www-data:teacher "'.DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'"'); + exec('mkdir -m 755 '.escapeshellarg(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz))); + exec('sudo chown www-data:teacher '.escapeshellarg(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz))); } if(!@is_dir(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester)) { - exec('mkdir -m 755 "'.DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'"'); - exec('sudo chown www-data:teacher "'.DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'"'); + exec('mkdir -m 755 '.escapeshellarg(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester)); + exec('sudo chown www-data:teacher '.escapeshellarg(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester)); } if(!@is_dir(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'/'.mb_strtolower($short_short_name))) { - exec('mkdir -m 755 "'.DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'/'.mb_strtolower($short_short_name).'"'); - exec('sudo chown www-data:teacher "'.DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'/'.mb_strtolower($short_short_name).'"'); + exec('mkdir -m 755 '.escapeshellarg(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'/'.mb_strtolower($short_short_name))); + exec('sudo chown www-data:teacher '.escapeshellarg(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'/'.mb_strtolower($short_short_name))); } if(!@is_dir(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'/'.mb_strtolower($short_short_name).'/upload')) { - exec('mkdir -m 775 "'.DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'/'.mb_strtolower($short_short_name).'/upload"'); - exec('sudo chown www-data:student "'.DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'/'.mb_strtolower($short_short_name).'/upload"'); + exec('mkdir -m 775 '.escapeshellarg(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'/'.mb_strtolower($short_short_name).'/upload')); + exec('sudo chown www-data:student '.escapeshellarg(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'/'.mb_strtolower($short_short_name).'/upload')); } }