Home BASH for Pentest - Loop dan Grep untuk Footprinting
Post
Cancel

BASH for Pentest - Loop dan Grep untuk Footprinting

Pada dasarnya tool-tool untuk kegiatan Red Teaming sudah sangat banyak, namun disini kita akan kembali ke “old school” lagi, dengan tujuan supaya lebih asik untuk belajar Shell Scripting.

Mungkin artikel tentang “Explore Your BASH for Pentest” akan terus berlanjut dan pada kali ini kita akan membahas bagian awal dari Hacking Anatomy, yaitu: Footprinting.

Footprinting

Footprinting adalah tahap dimana “yang berperan sebagai Attacker” akan berusaha mencari informasi mengenai target sebanyak mungkin.

Informasi apa saja yang akan dicari:

  • Port
  • Directory/Endpoint
  • Application dan versi yang digunakan
  • dan lain-lain

Apa yang kita gunakan untuk Port Scanning?

NMAP?

1
2
Tentu saja bukan!
Kalau ada yang susah, kenapa harus yang mudah?

Kita akan menggunakan nc, ditambah looping (for) dan word filtering (grep).

“nc” command

Pertama-tama yang harus kita ketahui yaitu “kondisi”.

Kondisi bilamana port terbuka:

1
2
3
root@linux:~# nc 10.10.10.10 22 -v
Connection to 10.10.10.10 22 port [tcp/ssh] succeeded!
SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.3

Kondisi bilamana port tidak terbuka:

1
2
root@linux:~# nc 10.10.10.10 6969 -v
nc: connect to 10.10.10.10 port 6969 (tcp) failed: Connection refused

Perbedaannya yaitu terdapat kata “succeeded!” bila terbuka dan kata “Connection refused” bila tertutup.

1
2
3
4
5
Note: nc [TARGET] [PORT] -v

- 10.10.10.10 = adalah ip target
- 22/6969 = adalah port
- -v = adalah verbose

Let’s “grep” it!

Kita akan coba grep yang “success” terlebih dahulu:

1
2
root@linux:~# nc 10.10.10.10 22 -v | grep 'succeeded!'
Connection to 10.10.10.10 22 port [tcp/ssh] succeeded!

Kemudian grep yang “refused” namun menggunakan kata “succeeded!”

1
2
root@linux:~# nc 10.10.10.10 6969 -v | grep 'succeeded!'
nc: connect to 10.10.10.10 port 6969 (tcp) failed: Connection refused

Loh kok?!

Seharusnya yang kita dapatkan itu NULL alias kosong bukan nc: connect to 10.10.10.10 port 6969 (tcp) failed: Connection refused.

How to Fix?

stdout and stderr

Saya tidak akan membahas “stdout dan stderr” secara detail, simplenya:

  • stdout (standard output) = Adalah sebuah output/pesan normal yang dikeluarkan oleh program
  • stderr (standard error) = Adalah sebuah output/pesan error yang dikeluarkan oleh program

Pada dasarnya grep hanya dapat mengambil kata yang bentuknya “stdout”.

Seperti:

1
2
3
4
root@linux:~# echo "ngetest" | grep "ngetest"
ngetest
root@linux:~# echo "ngaco" | grep "ngetest"
root@linux:~# 

grep tidak dapat digunakan untuk output yang berbentuk “stderr”.

Seperti:

1
2
3
root@linux:~# ls ngasal | grep "ngetest"
ls: cannot access 'ngasal': No such file or directory
root@linux:~#

Padahal saya sudah melakukan filter untuk kata “ngetest” namun yang muncul adalah ls: cannot access 'ngasal': No such file or directory.

Lalu, bagaimana fixing command “nc” pada sebelumnya?

Membuang “ERROR” ke /dev/null kah?

Dengan menggunakan redirection “2>”, seperti:

1
2
root@linux:~# ls ngasal 2> /dev/null | grep "ngetest"
root@linux:~#

Menurut saya itu hal yang baik, namun saya lebih menyarankan untuk:

Convert “stderr” menjadi “stdout”

Dengan menggunakan “2>&1”, seperti:

1
2
3
4
root@linux:~# ls ngasal 2>&1 | grep "ngetest"
root@linux:~# ls ngasal 2>&1 | grep "No such file"
ls: cannot access 'ngasal': No such file or directory
root@linux:~#

Karena selain kita dapat menghilangkan pesan error, kita juga dapat grep pesan error tersebut.

Back to “nc” and “grep” it!

Ok! kita sudah mendapatkan solusi untuk mengambil dan menghilangkan pesan error menggunakan “2>&1”.

1
2
root@linux:~# nc 10.10.10.10 6969 -v 2>&1 | grep "succeeded!"
root@linux:~# 

Yeay! sudah tidak keluar pesan errornya.

Sekarang kita coba kembali dengan kondisi port yang terbuka.

1
2
3
4
root@linux:~# nc 10.10.10.10 22 -v 2>&1 | grep "succeeded!"
Connection to 10.10.10.10 22 port [tcp/ssh] succeeded!
...
...

Pasti command “nc”-nya menyangkut ya? (F to pay respect :p)

Pada “nc” sendiri terdapat fitur timeout menggunakan parameter “-w”, kita tambahkan supaya tidak menyangkut.

1
2
3
root@linux:~# nc -w 3 10.10.10.10 22 -v 2>&1 | grep "succeeded!"
Connection to 10.10.10.10 22 port [tcp/ssh] succeeded!
root@linux:~# 

Note: -w 3 adalah timeout pada “nc”, disini kita set 3 detik saja.

Looping!

Loop adalah suatu bentuk kegiatan pada pemrograman yaitu mengulang suatu statement sampai batas yang diinginkan.

Kita langsung saja, buat file dengan nama “portscan.sh”, kemudian isi script di bawah ini:

1
2
3
4
5
#!/bin/bash
for PORT in {1..65535}
do
  nc -w 3 10.10.10.10 ${PORT} -v 2>&1 | grep "succeeded!"
done

Penjelasan:

  • #!/bin/bash - adalah Shebang, untuk detailnya kalian dapat baca artikel yang dibuat oleh Mas Edo Maland http://infosec.zerobyte.id/Bash-dan-Sh-Mereka-itu-Berbeda (silakan baca pada bagian #2).
  • for PORT in {1..65535} - Pada statement ini kita akan melakukan looping 1 sampai 65535 (karena 65535 adalah batas maksimal port).
  • do & done - “do” untuk awalan looping pada BASH script dan “done” adalah bagian penutupnya.

Kemudian jalankan scriptnya:

1
2
3
4
5
root@linux:~# bash portscan.sh
Connection to 10.10.10.10 22 port [tcp/ssh] succeeded!
Connection to 10.10.10.10 80 port [tcp/http] succeeded!
Connection to 10.10.10.10 5432 port [tcp/postgresql] succeeded!
root@linux:~#

Seperti itulah pembahasan kali ini, menurut saya sudah cukup dan terima kasih sudah membaca artike ini, semoga artikel ini akan terus berlanjut.

This post is licensed under CC BY 4.0 by the author.
Trending Tags
Trending Tags