Portál AbcLinuxu, 5. května 2025 18:55
function smssend($Number,$Message) { $Recode=array('ä'=>'a','Ä'=>'A','á'=>'a','Á'=>'A','à'=>'a','À'=>'A','ã'=>'a','Ã'=>'A','â'=>'a','Â'=>'A','č'=>'c','Č'=>'C','ć'=>'c','Ć'=>'C', 'ď'=>'d','Ď'=>'D','ě'=>'e','Ě'=>'E','é'=>'e','É'=>'E','ë'=>'e','Ë'=>'E','è'=>'e','È'=>'E','ê'=>'e','Ê'=>'E','í'=>'i','Í'=>'I', 'ï'=>'i','Ï'=>'I','ì'=>'i','Ì'=>'I','î'=>'i','Î'=>'I','ľ'=>'l','Ľ'=>'L','ĺ'=>'l','Ĺ'=>'L','ń'=>'n','Ń'=>'N','ň'=>'n','Ň'=>'N', 'ñ'=>'n','Ñ'=>'N','ó'=>'o','Ó'=>'O','ö'=>'o','Ö'=>'O','ô'=>'o','Ô'=>'O','ò'=>'o','Ò'=>'O','õ'=>'o','Õ'=>'O','ő'=>'o','Ő'=>'O', 'ř'=>'r','Ř'=>'R','ŕ'=>'r','Ŕ'=>'R','š'=>'s','Š'=>'S','ś'=>'s','Ś'=>'S','ť'=>'t','Ť'=>'T','ú'=>'u','Ú'=>'U','ů'=>'u','Ů'=>'U', 'ü'=>'u','Ü'=>'U','ù'=>'u','Ù'=>'U','ũ'=>'u','Ũ'=>'U','û'=>'u','Û'=>'U','ý'=>'y','Ý'=>'Y','ž'=>'z','Ž'=>'Z','ź'=>'z','Ź'=>'Z'); exec('smssend '.preg_replace('/[^0-9]/','',$Number).' "'.preg_replace('/[^0-9a-zA-Z\+\-\*\/\.\,\:\; ]/','',strtr($Message,$Recode)).'"'); }Vopred vám veľmi pekne ďakujem za ochotu.
Řešení dotazu:
Pro převod na ASCII bych využíval standartní funkce dostupné v konkrétním prostředí:
PHP
setlocale(LC_CTYPE, 'cs_CZ');
echo iconv('UTF-8', 'ASCII//TRANSLIT', "Příšerně žluťoučký kůň úpěl ďábelské ódy.");
Bash
$ echo "Příšerně žluťoučký kůň úpěl ďábelské ódy." |enca -C extern -E cstocs -x ascii -L cs_CZ
Priserne zlutoucky kun upel dabelske ody.
Python
$ echo "Příšerně žluťoučký kůň úpěl ďábelské ódy." |python -c 'import sys, unicodedata; print unicodedata.normalize("NFKD", sys.stdin.read().decode("utf-8")).encode("ascii", "ignore")'
Priserne zlutoucky kun upel dabelske ody.
Co se týče zneužití fce exec(), tak mě na první pohled nic nenapadá.
Ještě by tě mohlo zajímat:
exec('smssend '.escapeshellarg($number).' '.escapeshellarg($message));
Podívej se na:
' "'.preg_replace('/[^0-9a-zA-Z\+\-\*\/\.\,\:\; ]/','',strtr($Message,$Recode)).'"'
Řekl bych, že tazatel si uvědomuje podstatu problému a zná fci escapeshellarg(), ale chce mít ve zprávě potencionálně nebezpečné znaky '*', ';' bez zpětného lomítka. A mě nenapadá, jak je v té jeho konstrukci zneužít, když začíná a končí řetězec pomocí uvozovek a zároveň podle mě nenechal k dispozici žádný znak, který by umožnil řetězec ukončit ze strany uživatele a provést spuštění vlastního příkazu. Nebo tě napadá nějaká konkrétní možnost zneužití?
Teď mě napadá, tazatel ještě nezmínil jaké argumenty umožňuje přijímat program smssend, mmj. bych omezil velikost uživatelského vstupu na maximální požadovanou velikost zprávy.
Security issues with using PHP's escapeshellarg
Breaking escapeshellarg() news
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.