Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Проверить на уязвимости


Автор: SeregaGREY 9.4.2011, 17:43
Есть php-скрипт. У него вверху задаётся:
[PHP]
$setup['param_login']='login';
$setup['param_pw']='pass';

[/PHP]

и в теле:
[PHP]
function AddLinkPost() {
global $setup;
$pw = GetParametr('pw', 'post');
$login = GetParametr('login', 'post');
$linkdata = GoodVal(GetParametr('linkdata', 'post'));
if( ($login != $setup['param_login']) or ($pw != $setup['param_pw']) ){
echo 'strbeg'.'errorlogin'.'strend';
exit;
}
// Далее пошёл код
[/PHP]

Вот меня интересует могут ли кто-нибудь обойти проверку соответствия логина и пароля?

Выкладываю полную версию скрипта:
Код

<?php
error_reporting(0);
$setup['param_login']='mylogin';
$setup['param_pw']='mypass';
$addlink=GetParametr('addlink','post');
if ($addlink==1) AddLinkPost();
$dellink=GetParametr('dellink','post');
if ($dellink==1) DelLinkPost();

FindLink();

function file_put_contentz($file,$content) {
$h=fopen($file,'wb');
fwrite($h,$content,strlen($content));
fclose($h);
}

exit;

function FindLink()
{
global $setup;
$id=GetParametr('id','get');
$linkdata=file_get_contents("base/{$id}.txt");
echo Tmpl($linkdata,'template.html');
}

function DelLinkPost()
{
global $setup;
$pw=GetParametr('pw','post');
$login=GetParametr('login','post');
if (($login!=$setup['param_login'])or($pw!=$setup['param_pw']))
{
echo 'strbeg'.'errorlogin'.'strend';
exit;
}
echo 'strbeg'.'Deleted!'.'strend';
exit;
}

function AddLinkPost() {
global $setup;
$pw = GetParametr('pw', 'post');
$login = GetParametr('login', 'post');
$linkdata = GoodVal(GetParametr('linkdata', 'post'));
if( ($login != $setup['param_login']) or ($pw != $setup['param_pw']) ){
echo 'strbeg'.'errorlogin'.'strend';
exit;
}
$last=file_get_contents("base/last.txt");
$last = isset($last) ? intval($last) : 0;
$last++;
file_put_contentz("base/last.txt", $last);
file_put_contentz("base/{$last}.txt", $linkdata);
echo 'strbeg'.$last.'strend';
exit;
}

function GetParametr($name,$type)
{
global $HTTP_GET_VARS,$HTTP_POST_VARS;
if ($type=='get') $from=$_GET;
if ($type=='post') $from=$_POST;
$par=-1;
while (list($key,$val)=each($from))
{
if ($key==$name) {$par=$val;}
}
return $par;
}

function Tmpl($linkdata,$filename)
{
$fd = fopen( $filename, "r" );
$data = fread( $fd, filesize( $filename ) );
fclose( $fd );
$data=str_replace('!linkdata!',$linkdata,$data);
return $data;
}

function GoodVal($str)
{
$str=str_replace('\"','"',$str);
return str_replace("\'","'",$str);
}

?>


По не подтверждённым данным этот скрипт уже был взломан, вот только как?

Автор: awdev 9.4.2011, 18:09
Редкий ###код  smile простите за флуд

Автор: KLeonid 9.4.2011, 22:21
Да уж... код ужасен, спору нет smile. Тут не причину искать нужно, а просто переписать все правильно. Быстрее и надежнее будет smile.

Автор: cia 13.4.2011, 15:57
Говнокода я повидал много. Но этот один из достойнейших.

Автору:
Вот это:
Код

function GetParametr($name,$type)
{
global $HTTP_GET_VARS,$HTTP_POST_VARS;
if ($type=='get') $from=$_GET;
if ($type=='post') $from=$_POST;
$par=-1;
while (list($key,$val)=each($from))
{
if ($key==$name) {$par=$val;}
}
return $par;
}


просто убило  smile 

А если попробовать так:
Код

function GetParametr($name,$type) {
  if($type=='get') if(isset($_GET[$name])) return $_GET['name']; else return -1;
  elseif($type=='post') if(isset($_POST[$name])) return $_POST['name']; else return -1;
  return -1;
}


Или ещё прще:

Код

function varPOST($name) {
  return (isset($_GET[$name]) ? $_GET[$name] : -1);
}

function varGET($name) {
  return (isset($_POST[$name]) ? $_POST[$name] : -1);
}



А если по теме... А что если я вот эту страницу открою:
http://example.com/myscript.php?id=../password

Автор: SeregaGREY 13.4.2011, 16:11
Цитата(cia @ 13.4.2011,  15:57)

А если по теме... А что если я вот эту страницу открою:
http://example.com/myscript.php?id=../password

ничего не происходит. открывается пустая белая страница

Автор: cia 13.4.2011, 16:17
Цитата(SeregaGREY @  13.4.2011,  16:11 Найти цитируемый пост)
ничего не происходит. открывается пустая белая страница 

Но ведь это же потенциальная дыра.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)