如何用Perl或者Ruby写程序自动通过apache的基本验证。

2010-12-26 21:15:56

1 Answers

一是在请求头中添加Authorization:

Authorization: "Basic 用户名和密码的base64加密字符串"
请求的时候,在HTTP header里增加这一项
"Authorization:Basic ".base64_encode("$user:$pass")."\r\n"

二是在url中添加用户名和密码:

http://user:pass@abc.com/test/test.xml
CURL的:
curl --basic -u user:pass url
PERL的:
  #!/usr/bin/perl 

use strict; 
use warnings; 
use HTTP::Request; 
use LWP::UserAgent; 
use Data::Dumper; 
use Getopt::Std; 

my %options = (); 
getopt("d:",\%options); 

my $debug = $options{d} || 0; 

my @password_array = qw(ken jack sunny ben kick); 

&main(@password_array); 

sub main { 
foreach my $password (@_) { 
my $status = &get_url($password); 
if ($status == 1) { 
last; 
} 
} 
} 

sub get_url { 
my $password = shift; 

my $ua; 
my $req; 
my $res; 

my $url = 'http://192.168.4.40:8010/nagios'; 

$ua = LWP::UserAgent->new; 
$ua->agent('Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/20070309 Firefox/2.0.0.3'); 
$ua->timeout(5); 

$req = HTTP::Request->new( GET => $url ); 
  #方法1:使用Firefox登陆这个Url输入用户密码时抓包,将密文抓下来。贴在下面 
  #$req->header("Authorization" => 'Basic bW9ua3R4cep1Y3dlYl9tb25pdG9y'); 
  #方法2:可以直接输入用户名和密码,适合进行穷举时使用 
$req->authorization_basic('admin', $password); 

$res = $ua->request($req); 
print "************************** content begin **************************\n" if $debug; 
print $res->content . "\n" if $debug; 
print "************************** content end **************************\n" if $debug; 

print '*************************** Dumper $res ***************************' . "\n" if $debug; 
print Dumper $res if $debug; 
print '*************************** Dumper $res ***************************' . "\n" if $debug; 

if ($res->is_success) { 
print "crack success,password: " . $password . "\n"; 
return 1; 
} else { 
print "crack fail,password: " . $password . "\n"; 
return 0; 
} 
} 
.NET的:
string username="username";
string password="password";
//注意这里的格式哦,为 "username:password"
string usernamePassword = username + ":" + password;
CredentialCache mycache = new CredentialCache();
mycache.Add(new Uri(url), "Basic", new NetworkCredential(username, password));
myReq.Credentials = mycache;
myReq.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(new ASCIIEncoding().GetBytes(usernamePassword))); 

WebResponse wr = myReq.GetResponse();
Stream receiveStream = wr.GetResponseStream();
StreamReader reader = new StreamReader(receiveStream, Encoding.UTF8);
string content = reader.ReadToEnd(); 
Python的:
import urllib2
import sys
import re
import base64
from urlparse import urlparse 

theurl = 'http://api.minicloud.com.cn/statuses/friends_timeline.xml' 

username = 'qleelulu'
password = 'XXXXXX'    # 你信这是密码吗? 

base64string = base64.encodestring(
'%s:%s' % (username, password))[:-1]   #注意哦,这里最后会自动添加一个\n
authheader =  "Basic %s" % base64string
req.add_header("Authorization", authheader)
try:
handle = urllib2.urlopen(req)
except IOError, e:
  # here we shouldn't fail if the username/password is right
print "It looks like the username or password is wrong."
sys.exit(1)
thepage = handle.read() 
PHP的:
<?php
$fp = fsockopen("www.mydomain.com",80);
fputs($fp,"GET /downloads HTTP/1.0");
fputs($fp,"Host: www.mydomain.com");
fputs($fp,"Authorization: Basic " . base64_encode("user:pass") . "");
fpassthru($fp);
    ?> 
 
flash的AS3的:
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.utils.Base64Encoder;
import mx.rpc.http.HTTPService;
URLRequestDefaults.authenticate = false;//设默认为false,否则用户较验错误时会弹出验证框 

private var result:XML;
private function initApp():void
{
var base64enc:Base64Encoder = new Base64Encoder;
base64enc.encode("user:password"); //用户名和密码需要Base64编码
var user:String = base64enc.toString(); 

var http:HTTPService = new HTTPService;
http.addEventListener(ResultEvent.RESULT,resultHandler);//监听返回事件
http.addEventListener(FaultEvent.FAULT,faultHandler);     //监听失败事件
http.resultFormat = "e4x";//返回格式
http.url = "http://api.digu.com/statuses/friends_timeline.xml"; 以嘀咕网的API为列
http.headers = {"Authorization":"Basic " + user};
http.send();
}
private function resultHandler(e:ResultEvent):void
{
result = XML(e.result);
test.dataProvider = result.status;//绑定数据
}
private function faultHandler(e:ResultEvent):void
{
//处理失败
} 
Ruby On Rails的:
class DocumentsController < ActionController
before_filter :verify_access 

def show
@document = @user.documents.find(params[:id])
end 

  # Use basic authentication in my realm to get a user object.
  # Since this is a security filter - return false if the user is not
  # authenticated.
def verify_access
authenticate_or_request_with_http_basic("Documents Realm") do |username, password|
@user = User.authenticate(username, password)
end
end
end 
    
JavaScript的了:
//需要Base64见:http://www.webtoolkit.info/javascript-base64.html function make_base_auth(user, password) { var tok = user + ':' + pass; var hash = Base64.encode(tok); return "Basic " + hash; } var auth = make_basic_auth('QLeelulu','mypassword'); var url = 'http://example.com'; // 原始JavaScript xml = new XMLHttpRequest(); xml.setRequestHeader('Authorization', auth); xml.open('GET',url) // ExtJS Ext.Ajax.request({ url : url, method : 'GET', headers : { Authorization : auth } }); // jQuery $.ajax({ url : url, method : 'GET', beforeSend : function(req) { req.setRequestHeader('Authorization', auth); } });
2010-12-26 23:19:37
您不能回答该问题或者回答已经关闭!

相关文章推荐

  • C#中using指令的几种用法

    using + 命名空间名字,这样可以在程序中直接用命令空间中的类型,而不必指定类型的详细命名空间,类似于Java的import,这个功能也是最常用的,几乎每个cs的程序都会用到

  • C#实例解析适配器设计模式

    将一个类的接口变成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够一起工作

  • 使用托管C++粘合C#和C++代码(二)

    本文实现一下C++代码调用C#代码的过程。我构造一个简单并且直观的例子:通过C++ UI 触发C# UI.

  • C#开发高性能Log Help类设计开发

    项目中要在操作数据库的异常处理中加入写Log日志,对于商业上有要求,写log时对其它操作尽可能影响小,不能因为加入log导致耗时太多

  • Async和Await使异步编程更简单

    C#5.0中async和await两个关键字,这两个关键字简化了异步编程,之所以简化了,还是因为编译器给我们做了更多的工作

  • C#开发中的反射机制

    反射的定义:审查元数据并收集关于它的类型信息的能力。元数据(编译以后的最基本数据单元)就是一大堆的表,当编译程序集或者模块时,编译器会创建一个类定义表,一个字段定义表,和一个方法定义表等

  • C#运行时相互关系

    C#运行时相互关系,包括运行时类型、对象、线程栈和托管堆之间的相互关系,静态方法、实例方法和虚方法的区别等等

  • C#协变和逆变

    “协变”是指能够使用与原始指定的派生类型相比,派生程度更大的类型,“逆变”则是指能够使用派生程度更小的类型

  • C#基础概念之延迟加载

    延迟加载(lazy load)是Hibernate3关联关系对象默认的加载方式,延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作

  • 使用托管C++粘合C#和C++代码(一)

    C#在xml读写,数据库操纵,界面构造等很多方面性能卓越;C++的效率高,是底层开发的必备武器

  • C#中的索引器的简单理解和用法

    C#中的类成员可以是任意类型,包括数组和集合。当一个类包含了数组和集合成员时,索引器将大大简化对数组或集合成员的存取操作

  • 深入C# 序列化(Serialize)、反序列化(Deserialize)

    C#中的序列化和反序列化,序列化是.NET运行时环境用来支持用户定义类型的流化的机制