Interesująca metoda ukrywania kodu pod #linux - użyteczna do przemycania np. exploitów w prawilnym kodzie ( ͡º͜ʖ͡º)
Aby utworzyć plik z ukrytym kodem, wykonaj polecenie:
echo -e "#"'!'"/bin/bash\necho co ten unknow...\n#\e[2A\necho nic tu nie ma\nexit 0;" >exploit.sh Ciekawe efekty sprawdzania kodu:
◢ CAT ◣
$ cat exploit.sh #!/bin/bash echo nic tu nie ma... exit 0; ◢ HEAD ◣
$ head exploit.sh #!/bin/bash echo nic tu nie ma... exit 0; ◢ TAIL ◣
$ tail exploit.sh #!/bin/bash echo nic tu nie ma... exit 0; ◢ WHILE ◣
$ while read line; do echo $line; done < exploit.sh #!/bin/bash echo nic tu nie ma... exit 0; ➡➡➡ A normalne uruchomienie wygląda tak:
$ sh a co ten unknow... nic tu nie ma ---✂--- tl;dr: dzięki temu możesz wrzucić w teoretycznie bezpieczny kod linijkę (np. rm -rf /), którą trudno wyłapać z poziomu konsoli = ☠☠☠ ---✂---
@imlmpe: @go3: @aquaz: tak jak sobie poszukałem, to \e odpowiada ESC. natomiast [ - to polecenie test (sprawdzanie warunków) a 2A w ASCII to * - gwiazdka czyli dopasowuje wszystko. Jakby to zapisać inaczej to: echo co ten unknow...\n #\e[2A tylko ten # tak jakby to #\e[2A miało kasować wszstko co było wstawione wczesniej
ale dlaczego # nie jest interpretowany jako początek komentarza (czyli linijki do pominięcia) w tym przypadku, tylko jako początek polecenia?
@virusriddle: hash to po prostu komentarz i to jest interpretowane jako komentarz. Dlatego podczas wykonywania kodu nic się nie dzieje z tą linijką. Komentuję znak kontrolny tylko po to, aby się nie wykonał (wtedy na ekran poleciałby komunikat, że to złe polecenie). Równie dobrze można zamienić znak # np. na instrukcję
@imlmpe: dzięki za wyjaśnienie:-) własnie sobie sprawdziłem i zamiana # na echo jednak nie daje tego samego efektu - echo co ten unknow... się nie wykonało wtedy
czyli najlepiej scripty z nieznanych źródeł czytać lessem albo grepować
@wytrzzeszcz: tak, ale z less-em bym uważał, bo niektóre dystrybucje mają ustawione takie cudo:
alias less='less -r' (żeby kolorki były)
Najprościej skrypt otworzyć w dowolnym edytorze tekstu (np. vim, nano, pico itp) one nie interpretują sekwencji ucieczki.
Błąd który zaprezentowałem jest o tyle niebezpieczny, że często instalatory pakietów dostępnych w sieci prosza o wydanie polecenia (jako root) w stylu:
Aby utworzyć plik z ukrytym kodem, wykonaj polecenie:
echo -e "#"'!'"/bin/bash\necho co ten unknow...\n#\e[2A\necho nic tu nie ma\nexit 0;" >exploit.sh
Ciekawe efekty sprawdzania kodu:
◢ CAT ◣
$ cat exploit.sh
#!/bin/bash
echo nic tu nie ma...
exit 0;
◢ HEAD ◣
$ head exploit.sh
#!/bin/bash
echo nic tu nie ma...
exit 0;
◢ TAIL ◣
$ tail exploit.sh
#!/bin/bash
echo nic tu nie ma...
exit 0;
◢ WHILE ◣
$ while read line; do echo $line; done < exploit.sh
#!/bin/bash
echo nic tu nie ma...
exit 0;
➡➡➡ A normalne uruchomienie wygląda tak:
$ sh a
co ten unknow...
nic tu nie ma
---✂---
tl;dr: dzięki temu możesz wrzucić w teoretycznie bezpieczny kod linijkę (np. rm -rf /), którą trudno wyłapać z poziomu konsoli = ☠☠☠
---✂---
#security #bezpieczenstwo #hacking
@imlmpe: to wszystko za sprawką tego maleństwa?
@imlmpe: to wszystko za sprawką tego maleństwa?
@virusriddle: Tak
@imlmpe: Co robi? Macie jakiś link do tego?
tak jak sobie poszukałem, to \e odpowiada ESC. natomiast [ - to polecenie test (sprawdzanie warunków) a 2A w ASCII to * - gwiazdka czyli dopasowuje wszystko.
Jakby to zapisać inaczej to:
echo co ten unknow...\n
#\e[2A
tylko ten # tak jakby to #\e[2A miało kasować wszstko co było wstawione wczesniej
Komentarz usunięty przez autora
z 1 linku:
\e an ASCII escape character (033)
z 2 linku:
- Move the cursor up N lines:
\033[A
A więc: \e[2A zonacza przenieś kursor 2 linijki wyżej czyli:
echo -e "#"'!'"/bin/bash\n
echo co ten unknow...\n
#\e[2A\n
echo nic tu nie ma\n
exit 0;"
echo nic tu nie ma\n
exit 0;"
ląduje w miejscu
echo co ten unknow...\n
Tylko jeszcze nie bardzo czaję funkcji # , on
@aquaz: tak, to jest kod sterujący ANSI do przejścia na początek przedniej linii.
@virusriddle: hash to po prostu komentarz i to jest interpretowane jako komentarz. Dlatego podczas wykonywania kodu nic się nie dzieje z tą linijką. Komentuję znak kontrolny tylko po to, aby się nie wykonał (wtedy na ekran poleciałby komunikat, że to złe polecenie). Równie dobrze można zamienić znak # np. na instrukcję
własnie sobie sprawdziłem i zamiana # na echo jednak nie daje tego samego efektu -
echo co ten unknow...
się nie wykonało wtedy@virusriddle: wykonało się, tylko efekt działania został ukryty :) zamień to polecenie z unknowem np na:
touch hacker
Plik zostanie utworzony.
@wytrzzeszcz: tak, ale z less-em bym uważał, bo niektóre dystrybucje mają ustawione takie cudo:
alias less='less -r'
(żeby kolorki były)Najprościej skrypt otworzyć w dowolnym edytorze tekstu (np. vim, nano, pico itp) one nie interpretują sekwencji ucieczki.
Błąd który zaprezentowałem jest o tyle niebezpieczny, że często instalatory pakietów dostępnych w sieci prosza o wydanie polecenia (jako root) w stylu:
wget -O-