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 elementUI フォームのネストされたテーブルと各行の検証の詳細な説明

目次エフェクト表示コードリンクキーコード表形式データコンポーネントのネスト検証方法リセット方法完全な...

win10でのmysql5.7.21解凍バージョンのインストールチュートリアル

次のように、Win10でMysqlの解凍バージョンをインストールします。環境: win10 64ビッ...

ウェブデザインでテキストのサイズを合わせる方法: 小さなテキスト、大きな体験

iPadなどのモバイル端末の普及により、人々がモバイル端末で読書に費やす時間はますます長くなり、読...

Linux ディスクのシーケンシャル書き込みとランダム書き込みの方法

1. はじめに● ランダム書き込みではヘッドがトラックを頻繁に変更するため、効率が大幅に低下します。...

一般的なブラウザ互換性の問題(概要)

ブラウザの互換性とは、スタイルの互換性 (CSS)、インタラクションの互換性 (JavaScript...

MySQL バッチ追加および保存メソッドの例

ストレステストにログインする際には、多くの異なるユーザーが必要となり、データベースに新しいデータを追...

Dockerコンテナに入る方法と出る方法

1 Dockerサービスを開始するまず、docker サービスを開始する方法を知っておく必要がありま...

HTMLとリソースがどのように読み込まれるかを理解します

このブログのすべてのコンテンツは、クリエイティブ コモンズ ライセンスの下でライセンスされています。...

html2canvasで画像が正常にキャプチャできない時の解決方法

質問まず、私が遭遇した問題についてお話しします。まず、そういった需要があるわけです。フロントエンドは...

HTML で 2 列レイアウトを実装する方法の例 (左側は固定幅、右側は適応幅)

HTMLは2列レイアウトを実装し、左側は固定幅、右側は適応幅です。実装1: <スタイル>...

Angularデータバインディングとその実装の詳細な説明

目次序文データバインディングとは何ですか? Angular のデータバインディングの種類一方向データ...

Tomcat イメージをインストールして Docker に Web プロジェクトをデプロイする方法を簡単に説明します。

1. Tomcatをインストールする1. Docker HubでTomcatイメージを見つける d...

Linux に起動方法を追加する (サービス/スクリプト)

システムの起動時に読み込む必要がある設定ファイル/etc/profile、/root/.bash_p...

Centos7 で keepalived ログを別のパスに設定する方法の詳細な説明

Keepalived のインストール: cd <keepalived_sourcecode_p...

テーブルタグ(テーブル)詳細

<br />テーブルは、昔から誰もが使ってきたタグで、今も使われています。しかし、現在の...