ストーリーはイェーガーのハックに非常に似ていますが、完全なレースではなく、最も純粋な形のレース条件ではないという点が異なります。 どうなるかわかりません。私は理論家というよりは実践者です。 私たちはそれを「条件付き競合状態」と呼びます-オイルはオイルですが、その本質は正しく反映されています。
ある夜、
プログラマー、テスターなどを節約することは秘密ではありません。 すべてまたはほとんどすべて。 私は時々監査を行いますが、私の活動の性質上、髪が逆になっていることが時々あります。 しかし、ここにカジノがあります! 常緑樹などを撤回(獲得)する可能性がある つまり オフィスは収まるように見えるはずです。
アカウントを取得し、行きましょう...
ハッキング自体
結局のところ、彼らもここで多くを節約しました。
最初、私は自分自身に「仮想」お金を投じることに決めました。 仮想通貨はそこに表示されません(純粋にプレイするため-練習するため)。 paypal(10ct = 10V $)で可能でしたが、captcha(20V $)で1日に1回可能です。
「購入」ページを簡単に見ると(数回ダウンロードした後)、時間に関連付けられたトークン(180を法とする増分が顕著です)が見つかりました。これは[注文]をクリックした後にキャプチャで送信されます。 おそらく、「購入」時間の日付時刻もアカウントのデータベースに書き込まれました(1日に1回のみを意味します)が、現在では不必要になっています。
最初にクリーンレースを試してみたかったのですが(信じられないほど愚かではありませんが、オフセット付きの数式を使用する場合は1.5分)、数ミリ秒もなかったのではないかと考えていました。 高い確率で、このトークンはおそらくDBで使用されるものとしてマークされていました。つまり、完全に「明日まで」という意味です(ちなみに、後で判明しました)。
その結果、「条件付きフライト」からすぐに試してみることにしました。 トークンがデータベースint(unixtime-整数など)に書き込まれると仮定します。これは、次のトークンが3分後にのみ発行されることを想定しているためです(通常はまだ何らかのバイアスがあるため、国境ではすでに期限が切れています)。 つまり 次のようなものがあると思います。
create table user_order (usrid int, token bigint, lasttoken bigint, lastorder datetime, ...)
ちょっとしたテクニックがあります。Greasemonkeyand Co.のようなものは好きではありませんが、時々使用します。 しかし、私はそれが好きではありません(イゴールのような人は決して知りません)。 firefoxの開発コンソールから多くのことを行うことができますが、この方法では、ささいなことでできます。 私もめったに働きません。 現在のウィンドウのjavascriptにapiを備えた「本格的な」tiklインタープリター(tcl)をデプロイする独自の(まあ、ほぼ)プラグインがあります。 グリースモンキーのように、くすぐりでのみ。 便利な恐怖。
一般に、「ハッキング」のくすぐりスクリプトは次のようになりました。
set tok [js form.ordertoken.value] set i 0 set cntr 0 time { ## - : elm duplicate -overwrite form[expr $i % 5] form ## "float" (0-4) ... js { var f = form[expr $i % 5]; f.target = '_tmp_win_[expr $i % 5]'; f.ordertoken.value = f.ordertoken.value + '.' + '[format %05d [incr cntr]]'; f.submit(); } ## , ... update; after 5 incr i } 10
つまり 新しい複製フォームごとに、ordertoken値を浮動小数点数として作成します。
javascriptには次のものがあります。
... var f = form0; f.target = '_tmp_win_0'; f.ordertoken.value = f.ordertoken.value + '.' + '00001'; f.submit(); ... var f = form1; f.target = '_tmp_win_1'; f.ordertoken.value = f.ordertoken.value + '.' + '00002'; f.submit(); ...
悲観的な読者は、おそらく何が起こっているのかをすでに理解しているでしょう。
自動変換があり、floatがオーバーフローエラーなしで(big)intにカットされ、条件が正になる場合(比較はfloatで行われるため)、次のSQLステートメントは正当に実行されます。
UPDATE user_order set lasttoken = 1432254060.00007, lastorder = now(), vmoney = vmoney + 20 WHERE ... AND lasttoken != 1432254060.00007 AND ...
彼らはそこで何をチェックし、影響を受けた行、またはトランザクションの開始...終了、そしてそれがSQLであるかどうか、私は知りませんが、もう一度スクリプトを実行すると、「仮想」億万長者になりました! さて、それは
time casino-virt-order 50000
です。
ネタバレ説明
大まかに言えば、整数T1(intやbigintなど)がどこかに格納されます(例:180)。
そして、外部から送信されて浮動小数点数 (たとえば、float)180.01に変化する数値T2と比較されます。
T1とT2の比較が整数 (int)で発生する場合、それらはフロートのように等しい場合( 整数または整数 )、いくつかのアルゴリズムまたはシステムを追跡しない場合、または明示的に指定しない場合はどうなりますか?
(スクリプトにあるように)フロートトークンが常に増加しているため、トークンがまだ整数として保存されていない状況を「防止」できますが、トークン整数の「合法性」式でチェックされ、「トークンが使用されています」チェック何らかの理由でフロートのような。
そして、外部から送信されて浮動小数点数 (たとえば、float)180.01に変化する数値T2と比較されます。
T1とT2の比較が整数 (int)で発生する場合、それらはフロートのように等しい場合( 整数または整数 )、いくつかのアルゴリズムまたはシステムを追跡しない場合、または明示的に指定しない場合はどうなりますか?
int(180) = int(180.01) float(180) != float(180.01)
比較後、T2トークンは合法であり、同じくらい重要なことに、T2トークンはまだ使用されていません-残りの金額が増加し(支払いが行われました)、T2はT1(トークンが使用されます)を書き換えますが、精度のオーバーフローがない場合は全体に切り捨てられます。 つまり そして、標準飛行では、すべてが何度も繰り返されます。 トークンが期限切れになるまで、まあ、または時間がなくなるまで...
(スクリプトにあるように)フロートトークンが常に増加しているため、トークンがまだ整数として保存されていない状況を「防止」できますが、トークン整数の「合法性」式でチェックされ、「トークンが使用されています」チェック何らかの理由でフロートのような。
このサイトが実際に支払いを受けた期間はどれくらいですか?! 日(そして、それは私がすでに本当に買いたかったからです)。
もちろん、そこには
time casino-real-order 50000
の
time casino-real-order 50000
はありませんでし
time casino-real-order 50000
。彼らはこれに1、2回気づいたと思います。 まあ、ある種の資金の監視(不正行為など)はまだすべきです。 1万人の顧客がいますが。 しかし、私は一度に50から20を実行しました(つまり、その時点で可能な限り低い支払いだったため、「増え続ける」20のみが増え続けます)。
公平に言えば、私は資金を引き出すことなくこの口座を自然に閉鎖し、投資したお金だけを返すと言わなければなりません。
道徳
議論することは何もないようです。 追加できるのは、純粋な競合状態がそこで機能しなかったということだけです(2番目の並列呼び出しが「既に使用済み」であることが確認されました)。 しかし、男たちの「プロフェッショナリズム」から判断すると、それは馬鹿に対する防御のようなものでした(リクエスト後のF5など)。
もう1つ興味深いのは、トークンが廃止(+ 180)になったときに、
lastorder < now() + '1 day'
ような最後の「支払い」の日付を既に確認したため、トークンが機能しなくなったことです。 しかし、何らかの理由で、「同じ」トークンではありません。 痛みは一人ではなかったと思います。
追加する価値はありますが、トークンはかなり正直に使用済みとマークされています(つまり、テーブルロックまたはシリアライズ可能タイプの分離レベルのトランザクション)。 自分で新しいトークンを生成することもできません(おそらく、アカウントのデータベースにあるはずです)。 または、単に新しいトークンの発行は
lastorder
依存してい
lastorder
。
そして、はい、キャプチャは明らかにトークン+形の別のものに同じように結び付けられました。 または「レース」が彼女のために働いた、それを探すことは私にとって不必要だった。
ちなみに、SQLインジェクションから、そのプラットフォームで私に知られているエクスプロイトを使用したさまざまなトリックまで、他のすべてはかなり堅実に見えましたが、それはどういうわけかセミプロフェッショナルまたは何かでした、つまり、まだ文句を言う何かがありました(そうしないものもあります)すでに20年)。
はい、もう1つ:これはカジノです。 手段に拘束されていない人は、ライバルよりも有利であり、他のすべての条件は同等です。 少なくとも、彼はより頻繁にリスクを取る余裕があります。 一般に、そこでプレーすれば、このカジノの他の顧客から「ほぼ」合法的に多くのお金を勝ち取ることができ、会社自体をはるかに少ない金額で「欺く」ことができます。 さらに、少なくとも、このサイトのクライアントの
私との「対決」-極悪ハッカー
伝えたくありません
私は、いつものように、最初は「エクスプロイト」の結果のみをレイアウトしました。つまり、 ここにアカウントがあり、その上にお金の仮想ミリオンがあります。 アカウントは昨日作成されたのですが、ヒント-寄付後の内容と方法を教えてくれます。 本当のお金を使ったハッキングについては、最初は一般的に黙っていました(別のアカウント-別の寄付)。 私は貧乏ではありませんが、仕事はすべて支払わなければなりません。 当然「悔い改め」、つまり、 「純粋にスポーツの興味から」と「当然、私は決して適用しません(歯を与えません)。」
結果:
- 私をカジノの悪質なオープナーにしようとする真の試み。
- しばらくすると、すでに「どのように」と言う「リクエスト」があります(つまり、見よ、アクセスログでそれを見つけることさえできませんでした!)。 リクエストは脅威に代わるものです ( すぐにすべてを提供します。私たちはあなたとどうするかを考えます )。
- 「仕事を支払わなければならない」という完全に率直なヒントの後、私を脅迫者にしようとする試み(私はすでに弁護士の友人をつなぐことを考えていた)。
- その結果、彼らは礼儀正しく彼らを送り出し、再び不利益に使用しないことを誓い、愚かな「プレッシャー」でのすべての試みを無視しました。
おもしろいことに、すでに本物のお金で口座を閉鎖した後(以前は20ユーロしか引き出していません)、彼らから手紙を受け取りましたが、彼らは「お金を取ります」と言います...私は最初にそれらに答えたかった-それは慈善活動に費やしていますが、彼らはまだ私のものではありません。 だから彼らはおそらくそこにある...
人々は、プロにまだ保存しません。 私たち、プロは、私たちに支払われるお金の価値があります。
[UPD#1]ここでは、「彼らはあなたに彼らのサイトをチェックするように頼まなかった。 あなたのために何か良いことをして、お金や「恐tor」などをお願いします。
私の良心のために断食したい他のすべての人にすぐに答えます:
非表示のテキスト
なぜなら Habréでの投稿を禁止することはできません。人間に聞いてみます。私の道徳的な資質については、ご自身の意見をお聞かせください。 あなたと私の両方の時間を節約できます。
- お金を差し上げないようにしましょう(そうです、私は権利を持っています)が、同時に言う-「これは良いことです。 お金を使わずに間違いなくそのままにしてください。とにかくあなたを訴えます」
- 「クライアント」に対する私の個人的な態度は、少なくとも言われる口調に依存します。
- 投稿を書くのに多くの時間を費やしましたが、次の「荒らし」が私の道徳的な資質についてしつこく聞きたがらないので、本当に私を知っている人しか話せません。
- 社会プロジェクトの
「猫について」やオペラ「オープンソース」などのサイトは、完全に異なる態度で完全に無料で、常に順番をずらして提供されます。
しかし、彼らの顧客と彼らの安全にそれらを保存しながら、お金を稼ぐ人々ではありません。 特に彼らが私を脅したり失礼な場合。 - 予約は私の趣味です。問題の道徳的側面を独立して評価して、それを実行させてください。 私はそこからお金をmakeけず、余分なお金を稼ぐことさえしません。 私自身は法を遵守する市民であると考えており、このままです。問題のこちら側についてのトロールの意見は、これにいかなる影響も与えません。
「知識」を人々と共有したいという欲求とポストに費やした時間は、ドラフトでポストを地獄に連れて行きたいという欲求をまだ圧倒していますが、バランスは明らかに崩れています。
記事のトピックに関する建設的な意見、すなわち 私はこの問題の技術的な側面の議論を大いに喜んで聞きます(そして、自由な時間があるので答えます)。