首页 实地培训 VIP专区 文章中心 下载中心 精品动画 安全服务 安全产品 企业文化
技术论坛
 -->开创网络首先基于以学员为中心的人性化教学方式。以案例式教学、互动式教学为主线。
 
  当前位置: 首页 > 文章中心 > EXP代码 >
 
 
企业内部AD脆弱密码审计
发布者ID:3 作者: 发布时间:2008-07-10 03:18:56 来源: 点击:
 
这个是前段时间做的个小脚本,没什么用,审计内部AD脆弱密码的。做这样一些简单的工作,脚本语言确实挺合适的。需要一个普通的AD账号,导出账户名,过滤掉禁用的,然后开始扫描。密码字典按照自己公司的实际情况写就好了,支持%USERNAME%123这样的格式。

脚本里面的各种参数我写死了,因为自己用,不必要敲参数。如果想要用用看,自己改就是了,perl这种东西简单的学一下的话,一个上午就够了。下午不行,这种天气下午只适合睡觉,或者吃点冰绿豆汤之类的东西,反正是不适合看代码。

 #!/usr/bin/perl
 
 
 
 use warnings;
 
 use strict;
 
 use Win32::OLE;
 
 use Data::Dumper;
 
 use Authen::Simple::ActiveDirectory;
 
 
 
 use constant ADS_UF_ACCOUNTDISABLE => 2;
 
 use constant ADS_SCOPE_SUBTREE => 2;
 
 
 
 my $server = 'bj.microsoft.com';
 
 my $domain = 'bj.microsoft.com';
 
 my %users;
 
 my @pwds;
 
 
 
 select( STDOUT );
 
 $| = 1;
 
 
 
 print "Loading account from ad...";
 
 
 
 &LoadUser( );
 
 
 
 print "done!n";
 
 print scalar(keys(%users))." users loaded!n";
 
 
 
 print "Loading password from dic...";
 
 &LoadPwd( );
 
 print "done!n";
 
 
 
 open( REPORT, ">report.txt" ) || die "create report error: $!n";
 
 select( REPORT );
 
 $| = 1;
 
 select( STDOUT );
 
 
 
 foreach my $user( keys(%users) )
 
 {
 
 foreach my $pwd( @pwds )
 
 {
 
 $pwd =~ s/%USERNAME%/$user/;
 
 
 
 my $ret = &TestPwd( $user, $pwd );
 
 if( $ret == 1 )
 
 {
 
 print "cracked! username=$user,password=$pwd,mail=".$users{$user}."n";
 
 print REPORT "cracked! username=$user,password=$pwd,mail=".$users{$user}."n";
 
 
 
 last;
 
 }
 
 #print "testing [$user/$pwd] ...n";
 
 }
 
 }
 
 close( REPORT );
 
 
 
 sub LoadUser
 
 {
 
 my $objConnection = Win32::OLE->new( "ADODB.Connection" );
 
 my $objCommand = Win32::OLE->new( "ADODB.Command" );
 
 
 
 # open ad
 
 $objConnection -> open( "Provider=ADsDSOObject;" );
 
 
 
 $objCommand -> {"ActiveConnection"} = $objConnection;
 
 
 
 # search what and how
 
 my $cmd = "select userAccountControl,distinguishedName,mail from 'GC://dc=bj,dc=microsoft,dc=com' where objectCategory='user'";
 
 $objCommand -> {"CommandText"} = $cmd;
 
 
 
 # import all users
 
 $objCommand -> Properties -> {"Page Size"} = 1000;
 
 # search all subtree
 
 $objCommand -> Properties -> {"searchscope"} = ADS_SCOPE_SUBTREE;
 
 
 
 my $objRecordSet = Win32::OLE->new( "ADODB.Recordset" );
 
 $objRecordSet = $objCommand->Execute( ) || die "query data from active directory error,exitn";
 
 
 
 while( not $objRecordSet -> eof )
 
 {
 
 my $intUAC = $objRecordSet -> Fields("userAccountControl") -> value;
 
 
 
 # remove diable account
 
 if( not ( $intUAC & ADS_UF_ACCOUNTDISABLE ) )
 
 {
 
 my $longName = $objRecordSet -> Fields("distinguishedName") -> value;
 
 my $mail = $objRecordSet -> Fields("mail") -> value;
 
 
 
 if( (!defined($mail)) or $mail eq "" )
 
 {
 
 $mail = "null";
 
 }
 
 if( $longName =~ /^CN=([w.-_]+),/ )
 
 {
 
 #print ."n";
 
 my $userName = $1;
 
 
 
 chomp( $mail );
 
 chomp( $userName );
 
 
 
 $users{$userName} = $mail;
 
 }
 
 }
 
 $objRecordSet -> MoveNext();
 
 }
 
 }
 
 
 
 sub LoadPwd
 
 {
 
 open( FH, "<pass.txt" ) || die "Open password dict error,exit!n";
 
 
 
 @pwds = <FH>;
 
 chomp( @pwds );
 
 }
 
 
 
 sub TestPwd
 
 {
 
 my $username = shift;
 
 my $password = shift;
 
 
 
 my $ad = Authen::Simple::ActiveDirectory -> new( host => $server, principal => $domain ) || die "Connected error: $!";
 
 
 
 if ( $ad->authenticate( $username, $password ) )
 
 {
 
 return 1;
 
 }
 
 else
 
 {
 
 return 0;
 
 }
 
 }


 
 
 
 
   
 
   
     
  • 课堂实景
  • 课程体系
  • 培训课程
  • 学费介绍
  • 巧用mstsc命令登录到console的方法
  • 课程介绍
  • 团队介绍
  • Linkideo免费Vpn
  • 就业前景
  • 汇款方式
  •  
     
     
    无标题文档
    一流开创网一流开创网一流开创网一流开创网一流开创网一流开创网一流开创网
      关于我们 | 联系方法 | 招聘信息 | 加入会员 | 诚征代理 | 广告服务 | 欢迎投稿 | 友情链接  
      版权所有:吉林省开创科技信息有限公司  
      服务热线:0431-84714442
    Copyright 2001 - 2007 All Rights Reserved