Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2014-04-27 17:29:05

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/random
Zarejestrowany: 2008-01-07

[SOLVED][AWK]Użycie zmiennej zadeklarowanej w Bashu w porównaniu w awk

Cześć

Po aferze związanej z trojanem ebury, zrobiłem sobie skrypta, który pokazuje, co aktualnie zachowuje się podobnie do ebury, czyli tworzy gniazdo ipc z uprawnieniami 666.

W wersji lamerskiej, z użyciem grepa:

Kod:

for idshm in `ipcs -m | awk  '$4 == "666" { print $2 }'`; do ipcs -p | egrep  ^$idshm | awk '{print $3}'| while read line; do ls -l /proc/$line/exe; done; done;

I pokazuje strasznego backdoora:

Kod:

lrwxrwxrwx 1 pacjent proc 0 04-27 12:45 /proc/4685/exe -> /opt/bin/skype42013
lrwxrwxrwx 1 pacjent proc 0 04-27 12:45 /proc/4685/exe -> /opt/bin/skype42013

:D


Chciałem jednak troszkę "odlamerować" skrypta i wywalić grepa, a porównanie zmiennej zrobić w samym awk.
I tu mały problem:

Kod:

for idshm in `ipcs -m | awk  '$4 == "666" { print $2 }'`; do ipcs -p |awk '$1 == "$idshm"  {print $3}'| while read line; do ls -l /proc/$line/exe; done; done;

i żadnych wyników.

Krotko pisząc, zadeklarowaną  w pierwszej funkcji zmienną $idshm, grep rozpoznaje bez problemu, awk natomiast zachowuje się, jakby jej nie było w ogóle.

Cała różnica w działającym i nie działającym kawałku wygląda tak:

Kod:

ipcs -p | egrep  ^$idshm | awk '{print $3}'

dziala, a ten

Kod:

 ipcs -p |awk '$1 == "$idshm"  {print $3}'

nie.

Jak prawidłowo wpisać zmienną $idshm do tego awka, żeby wyniki były jednakowe?

Wersja AWK:

Kod:

sys-apps/gawk-4.0.2

Pozdro
;-)

Ostatnio edytowany przez Jacekalex (2014-04-27 19:30:05)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#2  2014-04-27 17:48:06

  azhag - Admin łajza

azhag
Admin łajza
Skąd: Warszawa
Zarejestrowany: 2005-11-15

Re: [SOLVED][AWK]Użycie zmiennej zadeklarowanej w Bashu w porównaniu w awk

Kod:

echo raz | awk -v AA=dwa '{print $1 " " AA}'

Błogosławieni, którzy czynią FAQ.
opencaching :: debian sources.list :: coś jakby blog :: polski portal debiana :: linux user #403712

Offline

 

#3  2014-04-27 18:05:17

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/random
Zarejestrowany: 2008-01-07

Re: [SOLVED][AWK]Użycie zmiennej zadeklarowanej w Bashu w porównaniu w awk

?

Dziękuję za odpowiedź, ale jakoś nie mogę ożenić odpowiedzi z pytaniem.

Chodzi o zastąpienie grepa czyli wyświetlenie pola $3 tylko, jeśli $1 równa się  zmiennej $idshm zadeklarowanej w pierwszej funckji.

Tylko problem polega na tym, że awk w ogóle nie dopasowuje niczego, jak mu dam tą zmienną, choć moim zdaniem powinien.
Jeśli natomiast zamiast zmiennej ma liczbę, to dopasowanie warunkowe działa bez problemu.


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#4  2014-04-27 18:32:58

  azhag - Admin łajza

azhag
Admin łajza
Skąd: Warszawa
Zarejestrowany: 2005-11-15

Re: [SOLVED][AWK]Użycie zmiennej zadeklarowanej w Bashu w porównaniu w awk

To przyjrzyj się fladze -v.


Błogosławieni, którzy czynią FAQ.
opencaching :: debian sources.list :: coś jakby blog :: polski portal debiana :: linux user #403712

Offline

 

#5  2014-04-27 18:37:21

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/random
Zarejestrowany: 2008-01-07

Re: [SOLVED][AWK]Użycie zmiennej zadeklarowanej w Bashu w porównaniu w awk

azhag napisał(-a):

To przyjrzyj się fladze -v.

Teraz się odezwał ;)

Kod:

for idshm in `ipcs -m | awk  '$4 == "666" { print $2 }'`; do  ipcs -p |awk -v '$1 == "$idshm"  {print $3}'| while read line; do ls -l /proc/$line/exe; done; done;
awk: fatalny błąd: `$1 ' nie jest dozwoloną nazwą zmiennej
awk: fatalny błąd: `$1 ' nie jest dozwoloną nazwą zmiennej

Zawiadomił mnie o rzeczy oczywistej, $1 nie jest flagą zmiennej, tylko polem, które potrzeba porównać ze zmienną $idshm, która powstaje we wcześniejszej pętli for.
Czyli, ze tą zmienną trzeba jakoś inaczej wpisać, tylko jak.

Zmienna idshm w każdym przejściu zawiera liczbę, i chodzi o porównanie pola $1 z liczbą zawartą w zmiennej $idshm, i wypisanie pola $3, jeśli warunek $1 == "$idshm" jest spełniony.

Ostatnio edytowany przez Jacekalex (2014-04-27 18:56:55)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#6  2014-04-27 18:45:40

  azhag - Admin łajza

azhag
Admin łajza
Skąd: Warszawa
Zarejestrowany: 2005-11-15

Re: [SOLVED][AWK]Użycie zmiennej zadeklarowanej w Bashu w porównaniu w awk

Bo ja wiem, może tak jak pokazałem w pierwszym poście?


Błogosławieni, którzy czynią FAQ.
opencaching :: debian sources.list :: coś jakby blog :: polski portal debiana :: linux user #403712

Offline

 

#7  2014-04-27 19:13:27

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/random
Zarejestrowany: 2008-01-07

Re: [SOLVED][AWK]Użycie zmiennej zadeklarowanej w Bashu w porównaniu w awk

azhag napisał(-a):

Kod:

echo raz | awk -v AA=dwa '{print $1 " " AA}'

Pokazałeś, jak się przerabia tekst, a mnie chodzi o stworzenie warunku.

Jeśli zamiast $idshm daję liczbę, to działa, a jak daję zmienną zawierającą liczbę, to wali błędem.
Pojęcia nie mam, dlaczego.

Obrazowo wygląda to tak:

Kod:

echo $idshm
2555924

ipcs -p |awk  '$1 == "2555924"  {print $3}'
4685 #jest wynik

ipcs -p |awk -v  '$1 == "2555924"  {print $3}'
awk: fatalny błąd: `$1 ' nie jest dozwoloną nazwą zmiennej

ipcs -p |awk '$1 == "$idshm"  {print $3}'
#brak wyniku

ipcs -p |awk -v '$1 == "$idshm"  {print $3}'
awk: fatalny błąd: `$1 ' nie jest dozwoloną nazwą zmiennej

Reasumując, czuję się jak w tym kawale, gdzie Masztalski w kiblu (buka z latryną przy ogródku piwnym) zgubił sztuczną szczękę.


Coś mi się zdaje, że grep będzie musiał wystarczyć, chyba, że całość przeteleportuję  na perla, choć perl w takim przypadku, to jak z armaty do wróbla. :D

EDIT:
najtrudniej znaleźć najprostsze rozwiązanie:

Kod:

ipcs -p |awk -v IDSHM=$idshm  '$1==IDSHM  {print $3}'
4685

Dziękuję

PS:
Całość skrypta:

Kod:

#!/bin/bash

for idshm in `ipcs -m | awk  '$4 == "666" { print $2 }'`; do ipcs -p |awk -v IDSHM=$idshm '$1==IDSHM  {print $3}'| while read line; do ls -l /proc/$line/exe; done; done;

Pozdro
;-)

Ostatnio edytowany przez Jacekalex (2014-04-27 19:34:22)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#8  2014-04-27 20:52:37

  azhag - Admin łajza

azhag
Admin łajza
Skąd: Warszawa
Zarejestrowany: 2005-11-15

Re: [SOLVED][AWK]Użycie zmiennej zadeklarowanej w Bashu w porównaniu w awk

Jacekalex napisał(-a):

azhag napisał(-a):

Kod:

echo raz | awk -v AA=dwa '{print $1 " " AA}'

Pokazałeś, jak się przerabia tekst, a mnie chodzi o stworzenie warunku.

Warunek już miałeś (poza faktem, że źle korzystałeś ze zmiennej), ja pokazałem jak się przekazuje zmienne do awka właśnie.


Błogosławieni, którzy czynią FAQ.
opencaching :: debian sources.list :: coś jakby blog :: polski portal debiana :: linux user #403712

Offline

 

#9  2014-04-27 21:22:33

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/random
Zarejestrowany: 2008-01-07

Re: [SOLVED][AWK]Użycie zmiennej zadeklarowanej w Bashu w porównaniu w awk

Ok, po prostu chwilkę trwało, zanim wyczaiłem, co jest grane.
Zdziwiło mnie to o tyle, że jak się odpala perla w skrypcie basha, to ten przyjmuje zmienne przez ARGV[x], i można je od razu wywołać,
grep łapie od razu, a awk zawsze uważalem za niemal integralną część powłoki, dlatego ta cecha awk mnie mocno zdziwiła.

Rzadko mam do czynienia z AWK, bo powyżej 5 linijek funkcji zazwyczaj biorę od razu Perla.
Tu się potknąłem na takiej banalnej rzeczy, której nawet w dokumentacji ciężko wyczesać, bo AWK ma 1/50 możliwości Perla, ale podobnej długości dokumentację dotyczącą podstawowych funkcji. ;)

W każdym razie już chodzi tak, jak miało chodzić.

Żeby było śmieszniej, co chwila inny program ma perm 666 w ipc,
np Vlc-2.1.2, Skype-4.2.13, ciekawe, co będzie następne. :D
Bać się nie ma czego, na takie dziury mam np:

Kod:

CONFIG_GRKERNSEC_HARDEN_IPC=y

Ale po prostu  jestem ciekaw, jakie najgroźniejsze błędy można znaleźć w różnych  programach.

Pozdro
;-)

Ostatnio edytowany przez Jacekalex (2014-05-08 00:32:26)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
To nie jest tylko forum, to nasza mała ojczyzna ;-)