Page 34 of 79

Posted: Wed Jun 11, 2008 7:46 pm
by Xellos
Интересно ми е дали е така кръстено, защото е насочено към предимно мъжка аудитория или просто е рекламен тъпизъм.

:roll:

http://www.viruswoman.com/us/index.php

Posted: Fri Jun 13, 2008 11:32 pm
by Roamer
Мдаааа... MySQL-ски потребители, или "тука има, тука нема!" :mrgreen:

Поредният случай, в който се убеждавам, че не трябва да разрешавам на близките си приятели да ползват тази бледа имитация на сървър за бази данни :) Днес в един момент установих, че на един от сървърите ми има база данни, към която има потребител, на когото НЕ МОГА да сменя паролата, защото MySQL сървърът НЕ ГО НАМИРА в списъка си от акаунти :)

Такааа... започваме сесията:
roam's console wrote:Script started on Fri Jun 13 23:08:38 2008
Setting up interactive shell params..
[roam@straylight ~]$ mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 38
Server version: 5.0.51a FreeBSD port: mysql-server-5.0.51a

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
Ако някой се интересува, ето пълните настройки на сървъра:
Spoiler: show
The MySQL server wrote:mysql> \s
--------------
mysql Ver 14.12 Distrib 5.0.51a, for portbld-freebsd6.3 (i386) using 5.2

Connection id: 38
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: /usr/bin/less
Using outfile: ''
Using delimiter: ;
Server version: 5.0.51a FreeBSD port: mysql-server-5.0.51a
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: cp1251
Db characterset: cp1251
Client characterset: cp1251
Conn. characterset: cp1251
UNIX socket: /tmp/mysql.sock
Uptime: 11 hours 52 min 46 sec

Threads: 1 Questions: 190 Slow queries: 0 Opens: 6 Flush tables: 1 Open tables: 5 Queries per second avg: 0.004
--------------
Такаааа... и забавленията започват :) Я да видим какво мисли сървърът за потребителя "testowa" (уф, не питайте, имаме си и ние едни програмисти и едни QA-и, не си е работа :))...
The MySQL server wrote:mysql> SHOW GRANTS FOR 'testowa'@'%';
+-------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for testowa@% |
+-------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'testowa'@'%' IDENTIFIED BY PASSWORD '18a2f9611fa3f604' |
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES ON `vily`.* TO 'testowa'@'%' |
+-------------------------------------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
Аааа-ха. Значи ако има акаунт "testowa", той има право да си играе с две от базите. Я да видим имаме ли изобщо такъв акаунт? (в спойлер, че редът със заглавието е малко дългичък)
Spoiler: show
The MySQL server wrote:mysql> SELECT * FROM mysql.user WHERE user = 'testowa';
+------+---------+------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+
| Host | User | Password | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Reload_priv | Shutdown_priv | Process_priv | File_priv | Grant_priv | References_priv | Index_priv | Alter_priv | Show_db_priv | Super_priv | Create_tmp_table_priv | Lock_tables_priv | Execute_priv | Repl_slave_priv | Repl_client_priv | ssl_type | ssl_cipher | x509_issuer | x509_subject | max_questions | max_updates | max_connections |
+------+---------+------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+
| % | testowa | 18a2f9611fa3f604 | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | | | | | 0 | 0 | 0 |
+------+---------+------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+
1 row in set (0.00 sec)
Имаме нещо такова, да.

Следващите две-три заявки може да ви се видят малко странни ("откъде ли пък му хрумна да прави *такива* неща?"), но потърпете, смисъл има :) Я да видим все пак *точно* откъде може да се върже някой с този акаунт?
The MySQL server wrote:mysql> SELECT Host, User FROM mysql.user WHERE User = 'testowa';
+------+---------+
| Host | User |
+------+---------+
| % | testowa |
+------+---------+
1 row in set (0.00 sec)

mysql> SELECT Host = '%', User FROM mysql.user WHERE User = 'testowa';
+------------+---------+
| Host = '%' | User |
+------------+---------+
| 1 | testowa |
+------------+---------+
1 row in set (0.00 sec)
"Aaaaand now, ladies and gentlemen, the moment you've all been waiting for!" В таблицата mysql.user има ред, в който User = "testowa", и за този ред изразът Host = "%" има стойност 1, демек верно, истина ти казвам! И тогава...

...тогава...

...тогава КАКВО, ПО ДЯВОЛИТЕ, ЗНАЧИ ТОВА?!
The MySQL server wrote:mysql> SELECT Host = '%', User FROM mysql.user WHERE User = 'testowa' AND Host = '%';
Empty set (0.00 sec)
:shock: :shock: :shock: :shock: :shock:

:dash:

И, да, заявката, от която тръгна всичко:
The MySQL server wrote:mysql> SET PASSWORD FOR 'testowa'@'%' = PASSWORD('foo');
ERROR 1133 (42000): Can't find any matching row in the user table
:shock: :twisted: :shock: :< :shock:

Ами... това беше. Сървърът си играе с акаунтите на "тука има, тука нема". И, да, ако се чудите, този акаунт *може* да се свърже със сървъра с досегашната си парола. И, не, НЕ МОЖАХ да пресъздам такава ситуация с новосъздадена база и нов акаунт за нея. Нямам представа точно как се е стигнало дотук, но самият факт, че *може* да се стигне до ситуация, в която потребител може да се свърже със сървъра, а администраторът НЕ МОЖЕ да му смени паролата... ами, как да ви кажа, не ми харесва :)

И, да, знам, че мога да направя някоя щуротия като "UPDATE mysql.user SET `Password` = PASSWORD('foo') WHERE User = 'testowa' AND Host LIKE '_'; FLUSH PRIVILEGES;"... ама... как да ви кажа... ЗАЩО Е НУЖНО?! :)

Posted: Sat Jun 14, 2008 12:09 am
by Moridin
Хм, дали причината не е, че по някакви неведоми съображения mysql смята точно ТОЗИ конкретен знак (%) за нещо специално при сравненията на стрингове, дори когато не е с LIKE? В смисъл.. по един начин да го смята при булевата оценка и по друг при изключването на редове, знам ли.

Иначе забавно индийд

Posted: Sat Jun 14, 2008 12:55 am
by Roamer
Всъщност ситуацията в крайна сметка беше още по-забавна, свързана и с леко неверни данни върху диска заради не-съвсем-добре преминала проверка на файловите системи след идиотско изпълнение с UPS-и :) (мня, това не беше в големия datacenter на TPN, там само едно изпълнение с UPS-и са имали миналата година, ама още държи влага на всички, които си го спомнят :)) Та в крайна сметка MySQL сървърът не е по-черен от дявола, не само той е виновен, ама... като са му в ненормално състояние базите, като има несъответствия в рамките и на една-единствена таблица в системната схема, той що изобщо пали бре?... Грррррф.

Posted: Sat Jun 14, 2008 1:54 am
by The Dragon
Бтв - нали знаеш че % не включва localhost, както в безкрайната си мъдрост са го решили господата от MySQL ?

А с това се забавлявам последните 2-3 дни ... Пича рути :)

http://linuxhaters.blogspot.com/

Днес ми е рекорд за годината - 4 хилки код :)

А се оказа че симпатягите от моно заради малоумния GC който използват той не работи добре когато се създават много бързо много малки обеки - крашва като стой та гледай с фрагментран heap. Разбира се под .NET такива проблеми няма. Крайния резултат - брой си нишките внимателно при асинхронно IO. Май го закрепих ама е гнуслярщина ...

Posted: Sat Jun 14, 2008 9:56 am
by termit
Този блог кефи, ако и да съм по-скоро от групата на Линукс феновете. Донякъде пича дразни, прекалено е брутален и много простее, но май разните върли фенбойчета са си заслужили това отношение. Иначе определено има мнения за простотиите в Линукс, с които съм мнооого съгласен.

Posted: Sat Jun 14, 2008 10:29 am
by thunder
Аха :) и аз го чета сега, забавен е :)

Posted: Wed Jun 18, 2008 6:47 pm
by Roamer
Мдаааа... изтрещял съм. Току-що установих, че преди три часа съм написал следните редове код:

Code: Select all

for (i = 0; i < wrapcnt; i++)
  if (...)
    break;
if (i == wrapcnt)
  err(...);
...
...
for (i = 0; i < wrap[i].argcnt; i++)
  nargv[i + 1] = wrap[i].args[i];
(ако не ви се виждат твърде странни, пребройте променливите, които ползвам за индексиране на циклите...)

В моя защита държа да отбележа, че горните две парчета код бяха написани в градинка до автосервиз, и че упоритото рециклиране и пестене на променливи вероятно ми е било внушено от рошавата немска овчарка, която пазеше дворчето на сервиза и се правеше, че не ми обръща внимание!

Posted: Wed Jun 18, 2008 6:50 pm
by The Dragon
Текста който форума на бард ми върна преди малко
ERROR:
SQL: SELECT COUNT(*) AS cnt FROM book_comments WHERE name = 'Daniel' AND city = 'София' AND email = '' AND comment = 'Не знам Бароу дали обича константата на финната структутра или просто и го казва за да я вкара в кревата, но цикли основно за нея през цялата книга. Както и за антропния прицип. Интересна е несъмнено, но като цяло новата информация в нея е малко, но е по-сложна от entry level книга. Цели се в някаква много странна ниша от читатели.' AND errors = '
допуска се само текст на кирилица!' AND dateposted = '2008-06-18' AND bid = '1086' AND approved = 'Y'
Unknown column 'errors' in 'where clause'
Изкушавам се да напиша като коментар TRUNCATE TABLE book_comments;.

Posted: Wed Jun 18, 2008 6:54 pm
by Roamer
Е, сега, това не ми прилича на SQL injection :) По-скоро е просто неправилно протекъл процес на обновяване на работещо приложение - "дай новия сорс... мдам, дай новия сорс... мдам, и тука новия сорс... ааааа, ма то и промени в базата ли имало?! Уф, добре че са тия клиенти, че да ни подсетят!" :?

(мдам, усмивката е крива, защото горното е донякъде от личен опит :))

Posted: Wed Jun 18, 2008 7:03 pm
by The Dragon
Roamer wrote:Е, сега, това не ми прилича на SQL injection :) По-скоро е просто неправилно протекъл процес на обновяване на работещо приложение - "дай новия сорс... мдам, дай новия сорс... мдам, и тука новия сорс... ааааа, ма то и промени в базата ли имало?! Уф, добре че са тия клиенти, че да ни подсетят!" :?

(мдам, усмивката е крива, защото горното е донякъде от личен опит :))
А моя емпиричен показва, че сайтове които връщат като грешка части от SQL заявките си, обикновенно не са много добре защитени и от SQL injection. Да двете нямат нищо общо, но ... . Пък и става дума за бард ...

Posted: Wed Jun 18, 2008 8:11 pm
by thunder
Термита да постне какво е открил в проекта си днес :)

inspire-нат от него аз се поразрових из нашия днес и на 4 места открих код от вида:

Code: Select all

if (блахблах > нещоси) {

направи нещо

} else {

направи същото нещо от if частта

}
при един от случаите имаше коментар: "do not use else if in this method if you value your life" :)

Posted: Wed Jun 18, 2008 8:23 pm
by The Dragon
thunder wrote:Термита да постне какво е открил в проекта си днес :)

inspire-нат от него аз се поразрових из нашия днес и на 4 места открих код от вида:

Code: Select all

if (блахблах > нещоси) {

направи нещо

} else {

направи същото нещо от if частта

}
при един от случаите имаше коментар: "do not use else if in this method if you value your life" :)
Е не е готино. Виж ако беше if(true) :0

Posted: Thu Jun 19, 2008 10:53 am
by termit
Мдаа, това си заслужава пускането. В интерес на истината говорих с колегата, който го е писал, и наистина се налага да е така. Така че това е WTF на ниво дизайн, над който за съжаление колегата не е имал контрол, но все пак си струва да се види.
Behold the power of Java!

public class ControlFrameView extends Canvas implements FocusListener, PaintListener, IPropertyChangeListener,
MouseListener, SelectionListener, DisposeListener, ICopyAction, ICutAction, IDeleteAction, IRenameAction,
IMoveToPasteboardAction, ISaveAsTemplateAction, IConvertToCopyAction, IConvertToCrossReferenceAction,
IInsertNoteAction, IEditNoteAction, IDeleteNoteAction, IMarkAsDoneAction, IObjectListener, MetaDataListener {

Posted: Thu Jun 19, 2008 11:06 am
by Moridin
Баси, ако тоя клас е нещо бъгав, вероятно цялото приложение заспива моментално, като гледам кво е призован от Силите да свърши :mrgreen: :mrgreen: :mrgreen: