PDA

Просмотр полной версии : моя защита


Дикс
14.09.2009, 21:44
собственно, конкретно по тематике форума - Безопасность веб-интерфейсов.

Вот вам интерфейс - http://vipavia.ru/links?add
Попробуйте из спортивного интереса написать скрипт, который сам добавит хоть одну ссылку.

Добавленной считается ссылка, когда ответ сервера не содержит ошибки.

Если сразу раскусите, скажите в пм, усложню :)

mr.The
14.09.2009, 22:14
и? Скрипт не писал, но там и писать-то нечего - куку принял, secret_hash спарсил.

CrazyStudentS_Mi}{
14.09.2009, 23:58
XHE все пробьет,если только у тебя совсем не отключено добавление ссылок

ErrorNeo
15.09.2009, 00:50
я 0 в пхп потому хз как из

<script type='text/javascript'>
var newVal = 997 - 8 * (532 / 440);
$('#scrt').attr('value', newVal);+<input type='hidden' name='secret_hash' id='scrt'
value='dsfi7as8igqku2dqkqu_dgASDAU22UDBA-WJA2u8df==' />получается secret_hash=6426-09но до тех пор, пока этот secret_hash величина постоянная,
Set-Cookie: PHPSESSID=..........; path=/ , впариваемый браузеру при первом коннекте к странице - защитой не является.
)

хотя обфускация процесса формирования куки на пхп действительно может временно помешать тем, кто его не знает)

Kaimi
15.09.2009, 00:54
Отсюда берется видимо
http://vipavia.ru/jquery.js

eLWAux
15.09.2009, 01:25
# парсим
my ($newVal) = $page =~ /newVal =([\d\-+\/\*\s\)\(]+);/;
# считаем
$newVal = eval($newVal);
--
капча эффективней будет

Дикс
15.09.2009, 07:59
Kaimi - напиши в приват, интересно до конца ли ты понял.
Все остальные - как я и предполагал, защита работает. Ход ваших мыслей неправильный.

Kaimi
15.09.2009, 13:40
Видимо из формы делаешь вызов к
changecs:function(){$('#s'+'c'+'r'+'t').attr('valu e', jprop);

Я js практически не знаю, так что не могу сказать точно как работает скрипт

Doom123
15.09.2009, 14:45
мне только одно не ясно почему секретный ключ у всех один =\\ что у ErrorNeo что у меня

тогда в чём смысл этого ключа?

Дикс
15.09.2009, 14:54
Kaimi
ага :)

Doom123
точно, надо бы его генерить динамически

Doom123
15.09.2009, 14:54
эмммм .. написало что сссылка добавилась


<?php

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://vipavia.ru/links?add');
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'linkemail=qwe%40qw.ww&linkbackhref=http%3A%2F%2Fqw21e.qw&linktext=qeqw12&linkhref=http%3A%2F%2Fqw.qw12&category=1&desc=hgjhgj&secret_hash=6426-09');

curl_setopt($ch, CURLOPT_COOKIEFILE, realpath(dirname(__file__)).'/'.'cook.txt');
curl_setopt($ch, CURLOPT_COOKIEJAR, realpath(dirname(__file__)).'/'.'cook.txt');
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1');

$response = curl_exec($ch);
curl_close($ch);

echo $response;

?>


А можно так .. даже еси динамический будет ...


<script type='text/javascript' src='http://vipavia.ru/jquery.js'></script>
<script type='text/javascript'>
var newVal = 751 - 0 * (494 / 469);
$('#scrt').attr('value', newVal);
</script>
<form action="" method="POST">
<input type='hidden' name='secret_hash' id='scrt'
value='0978141f8d5905ffef18e' />
<input type='submit' value='отправить' />
</form>
<?php


$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://vipavia.ru/links?add');
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'linkemail=qwe%40qw.ww&linkbackhref=http%3A%2F%2Fqw21e.qw&linktext=qeqw12&linkhref=http%3A%2F%2Fqw.qw12&category=1&desc=hgjhgj&secret_hash='.$_POST['secret_hash']);

curl_setopt($ch, CURLOPT_COOKIEFILE, realpath(dirname(__file__)).'/'.'cook.txt');
curl_setopt($ch, CURLOPT_COOKIEJAR, realpath(dirname(__file__)).'/'.'cook.txt');
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1');

$response = curl_exec($ch);
curl_close($ch);

echo $response;

?>

Pashkela
15.09.2009, 15:15
Читал, читал - да, защита очень сильная, потратил 1 минуту целую:


On Error Resume Next
Set objIE = CreateObject("InternetExplorer.Application")
ssilka = "http://vipavia.ru/links?add"
objIE.Visible = True 'Если не надо ничего видеть, то поставить False
objIE.Navigate ssilka
While objIE.Busy
WScript.Sleep 200
Wend
Set objForm = objIE.Document.forms(0)
objForm.elements("linkemail").value = "lala@lala.com"
objForm.elements("linkbackhref").value = "http://antichat.ru"
objForm.elements("linktext").value = "ахуительная тут защита, да"
objForm.elements("linkhref").value = "http://google.ru"
objForm.elements("desc").value = "описание"
objForm.submit
'objIE.Quit' закрываем браузер
'Set objIE = Nothing
Wscript.Quit ' -выход


и никаких кук, хешей и прочего яваскрипта

Дикс
15.09.2009, 15:20
сделал ещё жестче
кто осилит?

2 Pashkela
да, тока что хотел уточнить что через пхп, а не яваскриптом и браузером)) в браузере то понятное дело всё само выполнится. это уже вторая часть защиты, которую пока ещё не сделал

Pashkela
15.09.2009, 15:22
Кто-кто, я опядь!:) Скрипт выше. Любой твой изыск обойдет, гы

Браузер можно и убрать, это так, для наглядности:)

objIE.Visible = FALSE

Дикс
15.09.2009, 15:22
обновил пост, твой не видел)

Дикс
15.09.2009, 15:23
Doom123

да, слабость защиты была в том, что ключ в открытом виде
буду делать динамический

Pashkela
15.09.2009, 15:27
на php так на php:

1. Скрипт выше - 123.vbs
2.

<?system('123.vbs');?>

только что проверил на денвере - работает!:):):):):)

Doom123
15.09.2009, 15:33
Pashkela да да мы понели что ты крут ...

Дикс
п.с када сделаешь скажи а то проверки ключа нету =)

Дикс
15.09.2009, 20:05
вот щас защита есть. я ещё буду её улучшать, есть идеи

geezer.code
15.09.2009, 20:11
защититься можно только тестами тьюринга. любая другая защита сложна лишь в техническом исполнении, и создает только временные трудности. имхо.

Дикс
15.09.2009, 20:57
тест тьюринга это настолько убогая защита, что на её решение тратится вызов пары готовых функций и секунд 5 задержки

2all
сейчас переделал защиту. ещё далеко от идеала, но попробуйте обойти :)

Pashkela
15.09.2009, 21:01
ну если 2 all, то мой вариант по преженему рабочий

geezer.code
15.09.2009, 21:06
тест тьюринга это настолько убогая защита, что на её решение тратится вызов пары готовых функций и секунд 5 задержки

(0о) Дикс, ты умеешь решать задачи распознавания образов вызовом пары готовых функций?

«Completely Automated Public Turing test to tell Computers and Humans Apart» - Captcha


Есть множество вариаций теста Тьюринга, некоторые из них можно решить просто, но НЕ ВСЕ.

mr.The
15.09.2009, 21:33
кагбэ поддерживаю geezer.code.
тс, попробуй вместо обычной текстовой капчи клик по 1-й из, допустим, 5 картинок, где только на одной изображена, например, собака. антикапча такие ещё не принимает, так что только вручную выйдет отсылать.
а любая другая защита обходится. это дело времени.

Дикс
16.09.2009, 08:15
я имел ввиду капчу
мне интересно сделать такую защиту, которую даже мне влом было бы разобрать и сломать
и при этом не пользоваться никакими картинками

Pashkela
твой не засчитывается, потому что он работает только на винде ;p

FireFenix
16.09.2009, 20:54
я имел ввиду капчу
мне интересно сделать такую защиту, которую даже мне влом было бы разобрать и сломать
и при этом не пользоваться никакими картинками

Pashkela
твой не засчитывается, потому что он работает только на винде ;p
Всегда есть особые условия!

NIX + WM + Win + VBS
тоже пашет :D

Если простым запуском Internet Explorer (пример пашкелы через VBS) можно отпоститься, то при сильном желании можно и найти передаваемые данные...
тока вот стимула это делать - 0

p.s. Pashkella жесток и беспощаден и как всегда оригинален... респект и уважуха ;)

FireFenix
16.09.2009, 22:46
Так как пашкелла отписался тоже и я страдал от скуки... решил всё же поиздеваться над скриптом..... ушло ~5-10 минут

первые 3 минут - послал 3 запроса и сохранил результаты
p.s. автору на заметку - вылетает иногда ошибка (типа не заполнено какое-то поле) при заполненной форме... парадокс

следующие 2 минуты, я скачал с офф сайта jquery и total commander'ом сравнил твой вариант jquery, перед этим заменив ";" на ";\r\n"
и увидел разницу в (приведено в читаемый вид)

function()
{
m3x='#s'+'c'+'r'+'t';
c7b = $(m3x).attr('value');
$(m3x).attr('value', c7b.substr(0,3) + $('#link_sub').attr('value') + c7b.substr(4));
}

судя из кода - после загрузки страницы, сразу вызывается функция, которая перезаписывает secret_hash

остальные 1-5 минут написание кода + регулярки...

<?php

$curl = curl_init();

curl_setopt($curl, CURLOPT_RETURNTRANSFER, True);
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1');
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, True);
curl_setopt($curl, CURLOPT_COOKIEFILE, 'cookiefile.txt');
curl_setopt($curl, CURLOPT_COOKIEJAR, 'cookiefile.txt');

curl_setopt($curl, CURLOPT_URL, 'http://vipavia.ru/links?add');
$xxx = curl_exec($curl);

//просто так до кучи, чтобы если чо - не писать при следуюющем мего изменении скрипта :)
//preg_match_all('/newVal = ([^;]*);/ims', $xxx, $match_val);
//eval('$digits = ' . $match_val[1][0] . ';');

preg_match_all('/<input type=\'hidden\' name=\'link_sub\' value=\'([^\']*)\' id=\'link_sub\' \/>/ims', $xxx, $match_sub);
preg_match_all('/<input type=\'hidden\' name=\'secret_hash\' id=\'scrt\'[\s]*value=\'([^\']*)\' \/>/ims', $xxx, $match_hash);

$link_sub = $match_sub[1][0];
$secret_hash = $match_hash[1][0];

$result = substr($secret_hash, 0, 3) . $link_sub . substr($secret_hash, 4);

/*
link_sub=3b2o0l
linkemail=test5%40test.ru
linkbackhref=http%3A%2F%2Ftest5.ru
linktext=http%3A%2F%2Ftest5.ru
linkhref=http%3A%2F%2Ftest5.ru
category=1
desc=http%3A%2F%2Ftest5.ru
secret_hash=60e3b2o0l5da17a2837831f75b
*/

//здесь делаем цикл for($i = 0; $i < 999999; $i++)
//{ //начало цикла

$i = 999999;

$var =
'link_sub=' . $link_sub .
'&linkemail=test' . $i . '%40test.ru' .
'&linkbackhref=http%3A%2F%2Ftest' . $i . '.ru' .
'&linktext=http%3A%2F%2Ftest' . $i . '.ru' .
'&linkhref=http%3A%2F%2Ftest' . $i . '.ru' .
'&category=1' .
'&desc=http%3A%2F%2Ftest' . $i . '.ru' .
'&secret_hash=' . $result
;

curl_setopt($curl, CURLOPT_POST, True);
curl_setopt($curl, CURLOPT_POSTFIELDS, $var);
$xxx = curl_exec($curl);

//} //конец цикла

curl_close ($curl);

echo($xxx); //вывод результата

?>


Это было подтверждение моей фразе

Если простым запуском Internet Explorer можно отпоститься, то при сильном желании можно и найти передаваемые данные... тока вот стимула это делать - 0

2Дикс - додумай/доделай/допиши до конца, тогда и выложи...
ибо сейчас - тоже самое, что решать уравнение 2*y=4 (не придумал лучше и адекватнее метафору =\ )

идеи можно почерпнуть в HQ_09 (от eLWAux) - вроде последнем лвле, где нада поиграться с перлом
http://forum.antichat.ru/thread129518.html

Дикс
19.09.2009, 08:32
спасибо за развёрнутый ответ :)
я не претендую на супер-защиту, пока лишь просто попробовал. тем не менее первая страница темы вся забита неправильными решениями, значит защита нубов сбивает с толку.

p.s. автору на заметку - вылетает иногда ошибка (типа не заполнено какое-то поле) при заполненной форме... парадокс
я как раз таки считаю что такие непонятные ошибки усложняют процесс взлома, запутывая кодера :)

gisTy
19.09.2009, 10:25
защититься можно только тестами тьюринга. любая другая защита сложна лишь в техническом исполнении, и создает только временные трудности. имхо.
время то да. но есть такая штука как целесообразность взлома. если защита меняется каждый день/два то зачем взламывать и писать обход ее. хотя не спорю, тест тьюринга на данный момент остается одной из силнейших защит