検索

0x00 はじめに

私は以前、seay が書いた PHP コード監査の本を読み、すべてをざっと読んでみました。コード監査の初心者として、それを私のような初心者に紹介したいと思います。誰か私が学んだことと、全体的なフレームワークと一般的な脆弱性機能を提供してください。これは、この本の研究ノートと考えることができます。この本は、私のスムーズな思考に基づいて読むことができます。 : )

0x01 全体

コード監査を学習する目標は、CMS のコード セキュリティ監視を独立して完了できるようになることです。一般的な考え方は次のとおりです。

  • インクルード フォルダー内の common_fun.php などの関数コード、または同様のキーワードを持つファイルから始めて、全文コードを読み取ります。
  • 設定ファイル、config キーワードを含むファイルを確認し、mysql.class.php ファイルの connect() 関数を見つけて、データベースへの接続時に脆弱性があるかどうかを確認します。
  • ホームページ ファイル、index.php を読み続けて、プログラムの動作時にどの関数やファイルが呼び出されるかを理解します。index.php ファイルをマーキング ラインとして使用し、含まれているファイルをレイヤーごとに展開して読み取ります。機能を理解するには、その機能フォルダのホームページ ファイルを参照してください。

0x02 さまざまな脆弱性

a. ファイル操作の脆弱性

  • ファイル名パラメータが必要ない場合は、実行しないようにしてください。ユーザーが制御します
  • 並列ユーザーの権限 管理者の権限と操作権限
  • これに類似したパラメータを渡すことは禁止されています..、/、受信パラメータの確認、制限の作成、および停止プログラムの実行

1. ファイルインクルードの脆弱性:

(1) ローカルファイルインクルード:

  • 通常、モジュールのロード、テンプレートのロード、キャッシュに存在します。
  • の呼び出し インクルード関数: include()/include_once()、require()/require_once() 制御可能な変数の検索

( 2) リモート ファイル インクルード:

  • 前提条件:allow_url_include = on
  • は、ローカル インクルード

よりも出現頻度が低くなります。(3) ファイル インクルードの切り捨て:

  • %00 truncation (PHP バージョン 5.3 未満)
  • 疑問符の切り捨て (疑問符はリクエストパラメータの疑似切り捨てに相当します)
  • English (. ) バックスラッシュ (/) 切り捨て

2. ファイル読み取り (ダウンロード) の脆弱性:

検索キー関数:

file_get_contents()、highlight_file()、fopen( )、読み取り file() 、 fread() 、 fgetss() 、 fgets() 、 parse_ini_file() 、 show_source() 、 file() など

3. ファイル アップロードの脆弱性:

主要な関数を検索します:

move_uploaded_file() 次に、この関数を呼び出すコードがアップロード形式を制限するために存在するか、またはバイパスできるかを確認します。

(1) フィルタなしまたはローカルフィルタあり: サーバー側でフィルタなし、PHP 形式のファイルを直接アップロードして使用できます。

(2) ブラックリスト拡張子フィルタリング:

  • この制限は十分に包括的ではありません。IIS は、デフォルトで .asp、.cdx、.asa、.cer などの解析をサポートします。
  • 拡張子はバイパスできます:

ファイル形式 .php は許可されませんが、ファイル名 1.php をアップロードできます ( (3) ファイル ヘッダーのコンテンツ タイプの検証バイパス:

getimagesize() 関数: ファイル ヘッダーが GIF89a である限り true を返すことを確認します。 。
  • $_FILES["file"]["type"] の値を制限することは、content-type を制御可能な変数に人為的に制限することです。
  • (4) 予防策:

拡張子を比較するには、in_array() またはトリプルイコール === を使用します。
  • アップロードされたファイルの保存は名前変更であり、ルールはタイムスタンプを使用して乱数を連結します: md5(time() + rand(1,1000))。
  • 4. ファイル削除の脆弱性:

検索キー関数:

unlink() はバックトラッキング変数を使用します
  • 古いバージョンの Session_destroy( ) の下にあるファイルを削除できる機能があり、基本的には修復されました。
  • Metinfo の任意のファイル削除の脆弱性:

$action = delete は、ファイルが SQL でない場合、送信されたファイル名を削除します。

target.com/recovery.php?&action=delete&filename=../../index.php

b. コード実行の脆弱性

1. コード実行関数:

検索キー関数: eval()、assert()、preg_replace()、call_user_func()、call_user_func_array()、array_map()

(1) preg_replace( ) 関数 :

mixed preg_replace (mixed $pattern ,mixed $replacement ,mixed $subject [, int $limit = -1 [, int &$count ]] )

When $pattern修飾子が存在する場合、$replacement は PHP コードとして実行されます。

(2)mixed call_user_func( callable $callbank [ ,mixed $parameter [ ,mixed $...) :

最初のパラメータはコールバック関数、2 番目のパラメータはパラメータコールバック関数の

(3) eval() とassert():

assert のパラメータが指定された場合に PHP コードを実行できます。 () は文字列です

[区別]:

2. 動的関数の実行:
eval(" phpinfo(); ");【√】 eval(" phpinfo() ");【X】assert(" phpinfo(); ");【√】 assert(" phpinfo() ");【√】

動的関数バックドア:

#!php<?php$_GET['a']($_GET['b']);?>

3.命令执行函数:

搜索关键函数: system() , exec() , shell_exec() , passthru() , pcntl_exec() , popen() , proc_open()

(1) popen 和 proc_open() :

#!php<?php popen( 'whoami >> /Users/bingdaojueai/Desktop/1.txt', 'r' ); ?>

所在路径就会出现一个1.txt 里面的内容为命令执行后的结果

(2) 反引号命令执行:

  • echo whoami ; 直接就可以执行命令

  • 双引号和单引号的区别:

    #!php$a = 1echo " $a "    output:1echo ' $a '    output:$a

双引号时,可以直接解析变量,造成代码执行漏洞,过狗绕过。

c.变量覆盖漏洞

1.函数使用不当:

  • int extract( array &$var_array , int $extract_type = EXTR_OVERWRITE , string $prefix = null )
  • void parse_str( string $str , array &$arr )
  • bool import_request_variables( string $type , string $prefix )

2.$$变量覆盖:

d.逻辑漏洞

需要思考的问题:

  • 程序是否可以重复安装
  • 修改密码是否存在越权修改其他用户密码
  • 找回密码验证码是否可以暴力破解
  • cookie是否可以预测 验证存在绕过

1.等于与存在判断绕过:

(1) in_array() : 比较之前会自动转换类型

(2) is_numeric() : 当传入参数为hex时 直接通过并返回true 并且MYSQL可以直接使用hex编码代替字符串明文 可以二次注入 并且可能造成XSS漏洞

(3)双等于 == 和三等于 === :

  • 双等于会在变量比较时,进行类转换,与 in_array() 是一样的问题。
  • 三等于是 typevalue 的双重比较,相比之下更加安全。

2.账户体系中的越权问题:

  • 水平越权: A用户能够以B用户的身份,进行B用户的全部权限操作。前提A用户和B用户拥有相同的权限。
  • 垂直越权: A用户能够以C用户的身份,进行C用户的全部权限操作,前提C用户比A用户拥有更高的权限。

(1) 未 exit / return / die :

#!php<?phpif(file_exists('install.lock)){    header("Location:xxx.com");    //exit();}echo "test";?>

test 依旧会被输出,替换成安装流程,PHP依旧会进行。

(2) 支付漏洞:

  • 客户端修改单价
  • 客户端修改总价和购买数量
  • 服务端未校验严格
  • 重复发包利用时间差:

    #!php<?phpif (check_money($price)){  //Do something  //花费几秒  $money = $money - $price;}?>

可能导致漏洞函数: str_replace()

#!php<?php$a = addslashes($_GET['a']);$b = addslashes($_GET['b']);echo "$a<br>$b<br>";$c = str_replace($a,'',$b);echo trim($c);?>

e.会话认证漏洞

  • COOKIE验证:没有使用SESSION验证,将信息直接保存在COOKIE中

    1. 找到传入sql语句的参数的传递过程 回溯变量到最原始的函数 看它保存在cookie的算法 是否可逆
    2. 和MD5比起 sha1更安全 解密sha1的网站更少
    3. 限制一个用户只能同时在一个IP上登录
  • 审计代码时,查看登录处代码

f.二次漏洞

1.类型:

  • 不是逻辑问题,是可信问题。
  • 业务逻辑复杂度,与二次漏洞触发率 成正比。
  • 购物车 / 订单 / 引用数据 / 文章编辑 / 草稿 ==> SQL注入 / XSS

2.技巧:

(1) 钻GPC等转义的空子:

  • 不受GPC保护的 $_SERVER 变量: PHP5以后,$_SERVER取到的header不再受GPC影响,就算开启特殊字符也不会被转义,存在注入
  • 编码问题转换:

    1. GBK的宽字节注入: %df ' 单引号自动被转义成(%5c),同时 %df 与 %5c 连在一起组合成 運 字单引号依然在,成功闭合。【php与mysql交互过程中发生的编码转换问题】
    2. mb_convert_encoding() :

      #!php<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/> <?php$sql = "WHERE id='".urldecode("-1%df%5c' == ")."'"; print_r(mb_convert_encoding($sql,"UTF-8","GBK"));?>

(2)字符串问题:

  • 利用报错,找到敏感信息
  • 字符串截断:

    1. %00空字符截断:【PHP版本小于5.3】

      #!php<?php                                 include($_GET['file'].'.php');      //1.php?file=2.txt%00//2.txt里面是 <?php phpinfo()?>?>
    2. iconv函数字符编码转换截断:【对PHP版本有要求】

      #!phpchr(128)—chr(255)可以截断字符<?php $a = '1'.chr(130).'2’; echo $a."<br>";                   //1�2echo iconv("UTF-8", "GBK", $a);   //1?>
  • php:// 输入输出流:

    #!php<?php    include($_GET[‘file']);?>1.php?file=php://filter/convert.base64-encode(内容被base64编码)/resource=example.txt(远程文件)
  • php代码解析标签:

    1. …?> : バージョン php3.0.4 以降で利用可能
    2. : asp タグ、asp_tags=on が必要です、デフォルトはオフです
  • 正規表現:

    1. いいえ ^ と $ は一致の開始位置を制限するために使用されます:
    2. 特殊文字はエスケープされません:
  • エラー挿入:

  • Windows findfirstfile 使用法: 12345.txt ファイルを検索するには、代わりに 1」を 1 つ使用します。

0x03 End

私がセキュリティの道に足を踏み入れたのは、単に PHP が好きだったからです。コード監査の初心者、シーイ。この本は私にとってとても役に立ちました。私はこの記事を 2 日かけてまとめた初心者にとって役立つことを願っています (私はかわいい女の子です)。欠陥がある場合は、皆様のご指摘もお待ちしております。

監査について開発したり話したりする方法を知らない人は、ただのフーリガンです。 :)

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHPの継続的な使用:その持久力の理由PHPの継続的な使用:その持久力の理由Apr 19, 2025 am 12:23 AM

まだ人気があるのは、使いやすさ、柔軟性、強力なエコシステムです。 1)使いやすさとシンプルな構文により、初心者にとって最初の選択肢になります。 2)Web開発、HTTP要求とデータベースとの優れた相互作用と密接に統合されています。 3)巨大なエコシステムは、豊富なツールとライブラリを提供します。 4)アクティブなコミュニティとオープンソースの性質は、それらを新しいニーズとテクノロジーの傾向に適応させます。

PHPおよびPython:類似点と相違点を調査しますPHPおよびPython:類似点と相違点を調査しますApr 19, 2025 am 12:21 AM

PHPとPythonはどちらも、Web開発、データ処理、自動化タスクで広く使用されている高レベルのプログラミング言語です。 1.PHPは、ダイナミックウェブサイトとコンテンツ管理システムの構築によく使用されますが、PythonはWebフレームワークとデータサイエンスの構築に使用されることがよくあります。 2.PHPはエコーを使用してコンテンツを出力し、Pythonは印刷を使用します。 3.両方ともオブジェクト指向プログラミングをサポートしますが、構文とキーワードは異なります。 4。PHPは弱いタイプの変換をサポートしますが、Pythonはより厳しくなります。 5. PHPパフォーマンスの最適化には、Opcacheおよび非同期プログラミングの使用が含まれますが、PythonはCprofileおよび非同期プログラミングを使用します。

PHPおよびPython:さまざまなパラダイムが説明されていますPHPおよびPython:さまざまなパラダイムが説明されていますApr 18, 2025 am 12:26 AM

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPとPython:彼らの歴史を深く掘り下げますPHPとPython:彼らの歴史を深く掘り下げますApr 18, 2025 am 12:25 AM

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

PHPとPythonの選択:ガイドPHPとPythonの選択:ガイドApr 18, 2025 am 12:24 AM

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

PHPとフレームワーク:言語の近代化PHPとフレームワーク:言語の近代化Apr 18, 2025 am 12:14 AM

PHPは、多数のWebサイトとアプリケーションをサポートし、フレームワークを通じて開発ニーズに適応するため、近代化プロセスで依然として重要です。 1.PHP7はパフォーマンスを向上させ、新機能を紹介します。 2。Laravel、Symfony、Codeigniterなどの最新のフレームワークは、開発を簡素化し、コードの品質を向上させます。 3.パフォーマンスの最適化とベストプラクティスは、アプリケーションの効率をさらに改善します。

PHPの影響:Web開発などPHPの影響:Web開発などApr 18, 2025 am 12:10 AM

phphassiblasifly-impactedwebdevevermentandsbeyondit.1)itpowersmajorplatformslikewordpratsandexcelsindatabase interactions.2)php'sadaptableability allowsitale forlargeapplicationsusingframeworkslikelavel.3)

スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?Apr 17, 2025 am 12:25 AM

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。

See all articles

ホット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ヘンタイを無料で生成します。

ホットツール

SublimeText3 中国語版

SublimeText3 中国語版

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

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境