#!/usr/bin/env perl # uses ######################################################################### use diagnostics; use warnings; use strict; # Modules # database use DBI; # http use LWP::UserAgent; use HTTP::Cookies; # subs ######################################################################### # extract cookie from SQLite db sub extract_cookie { # shift db_path my $db_path = shift; # variables usefull for database connection and handler my $dbh; my $sth; my $rv; my @row; # string containing the query my $query; # connect to the db $dbh = DBI->connect("dbi:SQLite:dbname=$db_path","","") or die $DBI::errstr; # prepare the query $query = "SELECT name, value FROM moz_cookies WHERE host LIKE\ '%newbiecontest.org%' AND name LIKE '%SMFCookie%'"; $sth = $dbh->prepare($query); # execute $rv = $sth->execute() or die $DBI::errstr; # fetch the only row found @row = $sth->fetchrow_array(); # close the database $sth->finish(); $dbh->disconnect(); return $row[0], $row[1]; } # Send http request sub send_request { # shift args my ($cookie_name, $cookie_val, $url) = @_; # create variables my $ua = LWP::UserAgent->new; my $cookies = HTTP::Cookies->new(); # create the cookie $cookies->set_cookie(0, $cookie_name, $cookie_val, '/', 'newbiecontest.org', 80, 0, 0,\ 0, 0); # add the cookie to the jar $ua->cookie_jar($cookies); # send request my $response = $ua->get($url); return $response->decoded_content; } # Write img to file sub write_into_file { my $img = shift; my $filename = shift; # open open(my $file, '>', $filename) or die("[X] File not found"); # write print $file $img; # close close $file; } # Extract text using tesseract ocr sub extract_text { my $result; my $filename = shift; system("convert", $filename, "-resize", "300%", $filename); system("convert", $filename, "-negate", "/tmp/negate.bpm"); system("tesseract", "/tmp/negate.bpm", "/tmp/text"); } sub read_text { # open file open(my $file, '<', "/tmp/text.txt") or die("[X] File not found"); # read the first line my $line = <$file>; return $line; } # send answer sub send_answer { my ($cookie_name, $cookie_val, $url, $result) = @_; # create variables my $ua = LWP::UserAgent->new; my $cookies = HTTP::Cookies->new(); # modify the url $url = $url . "?chaine=" . $result; # create the cookie $cookies->set_cookie(0, $cookie_name, $cookie_val, '/', 'newbiecontest.org', 80, 0, 0,\ 0, 0); # add the cookie to the jar $ua->cookie_jar($cookies); # send request my $response = $ua->get($url); print $response->decoded_content; } # main ######################################################################### # check argument number if (@ARGV != 4) { print("Get. The. Fuck. Out\n"); print("[i] Usage : ./lecture.pl cookie.db url_in url_out filename_img\n"); exit; } my $cookie_name; my $cookie_val; my $img; my $result; ($cookie_name, $cookie_val) = extract_cookie($ARGV[0]); $img = send_request($cookie_name, $cookie_val, $ARGV[1]); write_into_file($img, $ARGV[3]); extract_text($ARGV[3]); $result = read_text(); print $result; send_answer($cookie_name, $cookie_val, $ARGV[2], $result); print("Done.\n");