W dzisiejszym odcinku zaczniemy od języka Python.
Co złego może być w 2 linijkach:
imie = input("Twoje imie:")
print ("Witaj ", imie)
Całość jest niezwykle prosta - najpierw proszę o imię użytkownika, a następnie wyświetlam je w konsoli z dopiskiem Witaj.
Zobaczmy jak wygląda to w praktyce.
Podaję zatem swoje imię.

Na razie wszystko wygląda w porządku.
Podczas pentestu staramy się podawać treść, której nie spodziewał się programista podczas tworzenia danego kawałka kodu.
Tutaj programista prosi nas o imię - czyli ciąg znaków. Spróbujmy zatem podać jakąś liczbę i zobaczyć co się stanie.
Ja wpiszę 2+4.

Jak widzisz dostałem wynik dodawania, a nie ciąg znaków.
Dlaczego tak się stało?
Jeśli czegoś nie rozumiemy warto zajrzeć do dokumentacji1.
Jak widzimy, została ona zapisana jako ekwiwalent dwóch funkcji: eval() oraz raw_input().
Co to takiego eval? Jest to funkcja, która wykonuje kod podany przez użytkownika jako parametr.
Możemy więc to potraktować jako ekwiwalent konsoli, tylko w formie funkcji.
I oto caly dzisiejszy błąd - input bowiem to inna nazwa funkcji eval, która pozwala na wykonanie dowolnego kodu przez użytkownika.
Spróbujmy zatem wykonać coś bardziej skomplikowanego niż tylko dodawanie.
Postaramy się wyświetlić listę wszystkich plików w danym katalogu.
Skorzystamy w tym celu z funkcji system z modułu os.
Standardowo użylibyśmy słowa kluczowego import aby załadować moduł, a następnie funkcji system aby wykonać funkcję na której nam zależy.
Tutaj nie możemy tego jednak zrobić, ponieważ całość musi zmieścić się w 1 linijce.
Skorzystamy zatem z alternatywnej składni, która wygląda następująco:
__import__('os').system('dir')
Jak widzisz udało się nam wyświetlić zawartość bieżącego katalogu.
Jak zatem naprawić ten błąd?
Wystarczy użyć funkcji raw_input(), która zawsze zwraca tekst i nie używa już funkcji eval.
imie = raw_input("Twoje imie:")
print ("Witaj ", imie)
Co ciekawe, ten błąd istnieje jedynie w Pythonie w wersji 2. Jeśli korzystasz z wersji 3 - jesteś bezpieczny.
Tam standardowo funkcja input zachowuje się jak funkcja raw_input.
