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/urandom
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.
[url=http://www.opencaching.pl]opencaching[/url] :: [url=http://dug.net.pl/sources.list]debian sources.list[/url] :: [url=http://www.linuxportal.pl/blogi/azhag/wpisy]coś jakby blog[/url] :: [url=http://dug.net.pl/]polski portal debiana[/url] :: linux user #403712

Offline

 

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

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
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.
[url=http://www.opencaching.pl]opencaching[/url] :: [url=http://dug.net.pl/sources.list]debian sources.list[/url] :: [url=http://www.linuxportal.pl/blogi/azhag/wpisy]coś jakby blog[/url] :: [url=http://dug.net.pl/]polski portal debiana[/url] :: linux user #403712

Offline

 

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

  Jacekalex - Podobno człowiek...;)

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

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

[quote=azhag]To przyjrzyj się fladze -v.[/quote]
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.
[url=http://www.opencaching.pl]opencaching[/url] :: [url=http://dug.net.pl/sources.list]debian sources.list[/url] :: [url=http://www.linuxportal.pl/blogi/azhag/wpisy]coś jakby blog[/url] :: [url=http://dug.net.pl/]polski portal debiana[/url] :: linux user #403712

Offline

 

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

  Jacekalex - Podobno człowiek...;)

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

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

[quote=azhag]

Kod:

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

[/quote]
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

[quote=Jacekalex][quote=azhag]

Kod:

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

[/quote]
Pokazałeś, jak się przerabia tekst, a mnie chodzi o stworzenie warunku.[/quote]
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.
[url=http://www.opencaching.pl]opencaching[/url] :: [url=http://dug.net.pl/sources.list]debian sources.list[/url] :: [url=http://www.linuxportal.pl/blogi/azhag/wpisy]coś jakby blog[/url] :: [url=http://dug.net.pl/]polski portal debiana[/url] :: linux user #403712

Offline

 

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

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
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
Możesz wyłączyć AdBlock — tu nie ma reklam ;-)

[ Generated in 0.021 seconds, 12 queries executed ]

Informacje debugowania

Time (s) Query
0.00021 SET CHARSET latin2
0.00005 SET NAMES latin2
0.00262 SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='18.117.152.26' WHERE u.id=1
0.00191 UPDATE punbb_online SET logged=1715937735 WHERE ident='18.117.152.26'
0.00082 SELECT * FROM punbb_online WHERE logged<1715937435
0.00373 DELETE FROM punbb_online WHERE ident='85.208.96.195'
0.00099 SELECT topic_id FROM punbb_posts WHERE id=264929
0.00131 SELECT id FROM punbb_posts WHERE topic_id=25707 ORDER BY posted
0.00134 SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=25707 AND t.moved_to IS NULL
0.00038 SELECT search_for, replace_with FROM punbb_censoring
0.00112 SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=25707 ORDER BY p.id LIMIT 0,25
0.00158 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=25707
Total query time: 0.01606 s