HTMLを使用して、IPを制限する投票ウェブサイトの不正行為スキームを実装する

HTMLを使用して、IPを制限する投票ウェブサイトの不正行為スキームを実装する

これは、IP アドレスが制限されている投票 Web サイトの不正行為の手口です。この方法は、投票 Web サイトのリモート IP アドレス監視の抜け穴を利用します。IP アドレスを偽造するわけではありません。HTTP は TCP の上に構築された 7 番目のレイヤーです。実際の IP アドレスを偽造することは不可能です。最近、友人が投票ソフトウェアを必要としていたので、この投票 Web サイトも調べました。この投票 Web サイトには検証コードがあり、各 IP は 1 票に制限されています。標準的な投票 Web サイトのように見えます。まず検証コードを調べました:

この投票ウェブサイトの確認コードは、最初は非常にシンプルで、標準的な位置に標準的な 4 つの数字が並んでおり、簡単に認識できます。その後、認証コードは異なる数字と文字に変更され、位置も異なり、現在ではソフトウェアによる認証コードの認識は難しく、手動での認識も困難になっています。行き詰まったように思えても、必ず抜け道はあります。詳細については次の段落をご覧ください。

分析と調査を続けると、その検証コードチェックに抜け穴があることがわかりました。この抜け穴を発見した後、検証コードは役に立たなくなりました。識別も検証コードも必要ありません。投票オプションページにjsコードを設定し、検証コードが空かどうかを確認するだけなので、直接バイパスできます。jsコードはクライアント上で実行され、この検証の効果はゼロです。一般的に、JS検証はユーザーの利便性のためだけのものです。投票Webサイトとして、この検証方法のみを使用します。投票処理の動的ページで検証コードが空かどうかをチェックしません。これは本当に受け入れられず、Webサイトのセキュリティに大きな脅威をもたらします。

認証コードの問題に関しては、私はすでにその解決方法を学びました。投票時に認証コードファイルに直接アクセスしない限り、認証コードは空になります。その動的ページは認証コードが空かどうかをチェックしないので、投稿時に認証コードパラメータが空である限り、問題ありません。

さらに別の問題があります。この投票ウェブサイトは IP をチェックし、1 つの IP につき 1 票しか投票できないように制限します。したがって、これを実現するには、プロキシを使用するか、インターネットから定期的に切断してダイヤルアップ接続するしかありません。他に良い解決策が思いつかなかったのですが、友人がこのウェブサイトで非常に素早く投票できるプログラムを見つけました。このプログラムの IP ソリューションに非常に興味があったので、友人に分析してもらいました。

まず、投票ソフトウェアのパケットをキャプチャして調査するという方法を取りました。準備ができたら、投票プログラムを開くと、「シュッ!ソフトウェアの競合が発生しました!」 ああ、まさか。その後、いくつかのプログラムを閉じて、パケット キャプチャ プログラムだけを残しましたが、それでも競合が発生しました。ハハ、このプログラムは、誰かがソフトウェアを分析する可能性があることを知っていて、実際にプロセス名をスキャンして、疑わしいプログラムがないかどうかを確認していることがわかりました。プログラムがそれを分析したり、パケットをキャプチャしたりすると、実行を拒否します。ハハ、現在、制限されているソフトウェアには、Easy Language プログラミング ソフトウェアと WSockExpert_Cn パケット キャプチャ ソフトウェアが含まれていることがわかっています。ハハハ、Easy Languageを閉じて、WSockExpert_Cnの名前を変更し、ソフトウェア独自のセキュリティテストに合格して正常に実行されました。

以下は使用中に私が投票したデータ パケットです。

XML/HTML コードコンテンツをクリップボードにコピー
  1. /vote/view.php?sid=33を投稿する行動=投票HTTP/1.1
  2. 受け入れる: */*
  3. リファラー: http://www.qdnfy.gov.cn/vote/vote.php
  4. コンテンツタイプ: application/x-www-form-urlencoded
  5. X-転送先: 218.20.218.200
  6. クライアント IP: 218.20.218.200
  7. 電話: 218.20.218.200
  8. リモートアドレス: 218.20.218.200
  9. 受け入れ言語: zh-cn
  10. Accept-Encoding: テキスト
  11. ユーザーエージェント: Mozilla/4.0 (互換性あり; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)
  12. ホスト: www.qdnfy.gov.cn
  13. クッキー: PHPSESSID = pldjnb6scereodjm5niqb9q990   
  14. コンテンツの長さ: 49
  15. 接続: 閉じる

-Forwarded-For という http ヘッダーパラメータとその後に IP が続いているのを見つけました。ハハ、このパラメータには歴史があるに違いありません。以前は知りませんでした。ハハ、すぐに Baidu で検索しました。

以下はBaiduの解説記事です。非常にわかりやすく説明されているので、ぜひご覧ください。
HTTP ヘッダーの X-Forwarded-For フィールドを偽造して IP を偽造します。X-Forwarded-For の原理については Baidu で検索しました。このことはかなり前から出回っています。X-Forwarded-For について初めて聞きました。略して XFF ヘッダーです。これはクライアント、つまり HTTP リクエストの終端の実際の IP を表します。この項目は、HTTP プロキシまたは負荷分散サーバーを通過するときにのみ追加されます。

これは、RFC で定義されている標準のリクエスト ヘッダー情報ではありません。この項目の詳細な概要については、Squid キャッシュ プロキシ サーバーの開発ドキュメントを参照してください。

標準形式は次のとおりです。

X-Forwarded-For: クライアント1、プロキシ1、プロキシ2

標準フォーマットからわかるように、X-Forwarded-For ヘッダー情報はカンマで区切られて複数存在することがあります。最初の項目は実際のクライアント IP で、残りは通過したプロキシまたはロードバランサーの IP アドレスです。これらは複数存在します。

Wiki の X-Forwarded-For の説明 http://en.wikipedia.org/wiki/X-Forwarded-For 分析:

クライアント IP を偽造したいので、まずはクライアント IP アドレスを取得する方法を見てみましょう (例として PHP を使用)。このコードは Baidu で検索して見つかりました。ほとんどの Web サイトはこのコードを使用している可能性があります。

XML/HTML コードコンテンツをクリップボードにコピー
  1. $ user_IP = ($_SERVER["HTTP_VIA"]) ? // プロキシが使用されていますか?
  2. $_SERVER["HTTP_X_FORWARDED_FOR"] : $_SERVER["REMOTE_ADDR"];
  3. //取得に失敗した場合は、REMOTE_ADDRから取得します
  4. $ user_IP = ($user_IP) ? $user_IP : $_SERVER["REMOTE_ADDR"];
  5. ?>   

まず、HTTP_VIA ヘッダーが存在するかどうかを判断します。HTTP_VIA ヘッダーは、プロキシ サーバーが使用されているかどうかを示します。使用されていない場合は、REMOTE_ADDR フィールドからクライアントの IP アドレスを取得します。使用されている場合は、X-Forwarded-For からクライアントの IP アドレスを取得します。多くのプログラマーは、Baidu からコードを取得していると思います。ASP も同様です。

それではテストしてみましょう。

サーバーコード:

XML/HTML コードコンテンツをクリップボードにコピー
  1. // 出力 HTTP_X_FORWARDED_FOR
  2. echo "HTTP_X_FORWARDED_FOR:".$_SERVER["HTTP_X_FORWARDED_FOR"];
  3. // REMOTE_ADDR を出力 echo "REMOTE_ADDR:". $_SERVER["REMOTE_ADDR"];
  4. ?>  
  5.    

取得したクライアント IP アドレスが異なることがわかります。REMOTE_ADDR が実際のアドレスです。

したがって、Web サイトが X-Forwarded-For からクライアントの IP アドレスを決定する場合、この論理的な抜け穴を利用して不正行為を行うことができます。

<<:  jQueryはクッキーを操作する

>>:  CSS を使用した div サブ要素の水平および垂直中央揃えの例

推薦する

Vue+webrtc (Tencent Cloud) ライブブロードキャスト機能の実装実践

目次1. 生放送効果2. ライブストリーミングを開始する手順2.1 Tencent Web(高速ライ...

JavaScript での正規表現の使用について詳しく学ぶ

目次1. 正規表現とは何か1. 正規表現の特徴2. 正規表現の使用2. 正規表現における特殊文字1....

3つのDocker Nginxログの処理の詳細な説明

社内の同僚は Nginx ログの標準出力、つまりコンソール経由の処理を必要としているため、まずログを...

163 メールボックスログインボックスインタラクティブデザインの改善体験と共有

LOFTER のコンテストで、ログイン ボックスを再設計できると言及されているのを見ました。過去 2...

CSSインジェクションの知識の要約

最近のブラウザでは、CSS 内で JavaScript を実行することはできなくなりました。以前は、...

Dockerコンテナは定期的にデータベースをバックアップし、指定されたメールボックスに送信します(設計アイデア)

目次1. 背景: 2. デザインのアイデア: 3. 起動スクリプトを書く4. イメージを構築する5....

Mybatis マッパー動的プロキシの原理の分析

序文動的プロキシの原理を説明する前に、まず、mybatis を統合した後の dao 層の 2 つの実...

MySQLデータベースのbinlogクリーンアップコマンドの詳細な説明

概要今日は主に、MySQL データベースから binlog ログを正しく削除する方法を紹介します。ロ...

EXPLAIN コマンドの詳細な説明と MySQL での使用方法

1. シナリオの説明: 同僚から MySQL で explain を使用する方法を教わったので、返さ...

Linux で SpringBoot jar プログラム デプロイメント シェル スクリプトを起動および停止する方法

では早速、コードをお見せしましょう。具体的なコードは次のとおりです。 #!/bin/bash cd ...

WeChatアプレットのスクロールビューの改行問題を解決する

今日、小さなプログラムを書いていたときに、スクロールビューを使用したのですが、スクロールビュー内のテ...

CSSプリコンパイル言語とその違いの詳細な説明

1. 何ですか マークアップ言語として、CSSは比較的シンプルな構文とユーザーに対する要件が低いが、...

jar パッケージを Docker コンテナに変換する方法

jar パッケージを Docker コンテナに変換する方法1.まずJavaイメージをダウンロードする...

仮想マシンに Linux rhel7.3 オペレーティング システムをインストールする (具体的な手順)

仮想化ソフトウェアをインストールする仮想マシンにオペレーティング システムをインストールする前に、ホ...

CSS Houdini でダイナミックな波効果を実現

CSS Houdini は、CSS 分野における最もエキサイティングなイノベーションとして知られてい...