Kamkarは最近、ドローンの設定を変更して認証を無効にし、攻撃する方法を教えるチュートリアル付きソフトウェアをGithubで公開しました。SkyJackと呼ばれるPerlソフトウェアは、Raspberry Pi上で動作し、他のオープンソースソフトウェアを使用してクラフトをハイジャックします。
1) Myspaceは多くのマーカーをブロックします。実際、彼らは<a>、<img>クラス、<div>クラス、および他のいくつかのクラスしか許可していません。<script>クラス、<boday>クラス、onClinks、onAnythings、<href>クラスのjavascriptは許可されていません。しかし、一部のブラウザでは、javascriptを含むCSS識別子を許可しています。例えば
<div style=”background:url(javascript:alert(1) ”>
2) すでにシングルクォートとダブルクォートが使用されているため、Div識別子にはクォートを使用できません。これはJSのプログラミングを非常に難しくします。JSを動作させるには、式を使ってJSコードを保存し、関数名を通して実行します。例えば
<div id=”mycoce” expr=”alert(ははは! ”sytle=”background:url(javascript:eval(document.all.mycode.expr) ”>
3) すごい!これでJavascriptのコードをシングルクォートで実行できるようになりました。しかし、MySpaceのサイトでは、"javascript "というキーワードを禁止しています。このため、ブラウザによっては "javanscript"(つまり、java<NEWLINE>scriptを "javascript "と認識するものもあります。例えば
<divid=”mycode”expr=”alert(ははは! ”style=”background:url(ジャバスクリプト:eval(document.all.mycode.expr) ”>
4) 一重引用符の効果を発揮させるときに、二重引用符が必要になることがあるのはいいことです。例えば "foo "bar"。 Myspaceが二重引用符と一重引用符の両方のエスケープを無効にしたときは、ちょっとショックでした。しかし、10進数をASCIIに変換することで、javascriptで引用符を生成することは可能です。例えば
<div id=”mycode”expr=”alert('ダブルクォータ: +String.fromCharCode(34))”style=”background:url(javScript:eval(document.all.mycode.expr) ”>
5) 実際に表示されるユーザープロファイルページにコードを公開するには、それらのページのソースコードを取得する必要があります。顧客IDを含むビューページのソースコードを取得するには、document.body.innerHTMLを使用することができますが、Myspaceはマークアップ "innerHTML "を無効にしています。eval関数を使って2つの文字列を連結して "innerHTML "を形成することができます。例えば
alert(eval(ドキュメント.body.innt +'rHTML'))
6) 他のページを訪問する時間通常は「iframe」形式が使われますが、「iframe」は非表示にしても効果がなく、他のものが動いていることがユーザーに分かってしまいます。そこで、AJAX(XML-HTTP)を使用して、実際のユーザーがページへのTP GETやPOSTを生成できるようにしています。もちろん、MyspaceはXML-HTTPリクエストに必要なセンシティブワード "ge "を無効にし、再びALを使ってセンシティブワードをスプライスして生成します。さらに、ceで効果的であるためには、クッキーも必要です。
eval(xmlhttp.onread +ystatechange=callback ;
7) ユーザープロフィールをGETして、ヒーローリストを取得します。ヒーローを削除する必要はなく、既存のリストに追加するだけです。プロフィールをGETすれば、リストを取得して保存できます。要約すると、これはXML-HTTPで簡単にできます。ただし、現在プロフィールを表示しているユーザーのIDを取得したい場合は別です。まあ、ページ内のキーワードを検索する必要があります。しかし、そうすると、コードに同じキーワードが含まれているので、自分自身を見つけることになります。この問題を避けるために、al()を使って文字列をつなぎます。
8) この時点で、ヒーローのリストがあります。まず、addFriendsページでXML-HTTPを実行してみましょう。
友達リストに追加するためのPOSTリクエスト。あれ、うまくいかない、なんで?profile.myspace.comのページですが、POSTアクションはwww.myspace.com页面去运行。しかし、XML-HTTPはドメイン間の/Tを許可しません。これを避けるには、..omページにアクセスしてください。.omページからプロフィールをブラウズし続けることができます。.omブラウズプロファイルからプロファイルのブラウズを続けるには、同じドメインでPOSTの実装を実行しているページをリロードしてください。例えば
if(location.hostname== プロファイル.myspace.com')ドキュメント.location= http://..com +.pathname + location.search;
9) 最後にPOSTリクエストが実行されます。しかし、POSTリクエストが送信されたとき、ユーザは追加されません。なぜでしょうか?MyspaceはPOST前のページ、例えば "Are you sure you want to add this user as a friend page "でハッシュ値を生成します。このハッシュ値がPOSTで発生しない場合、POSTは正常に実行されません。これを避けるには、ブラウザがユーザを追加する前のページを GET するようにシミュレートし、ソースコードを解析してハッシュ値を取得し、そのハッシュ値で POST リクエストを実行します。
10) POSTリクエストが終了すると、HEROが追加され、コードが実行されます。このコードは実行後にHEROと同じ場所に移動するので、POSTリクエストは1回で済みます。しかし、ページは新しいハッシュを取得するために事前にGETする必要があります。しかし、最初にPOSTするコードを再生成しなければなりません。これを行う最も簡単な方法は、欲しいページのソースコードを取得し、コードを解析してからPOSTリクエストを行うことです。それだけです。POSTリクエストを動作させるには、コードをエンコードまたはエスケープする必要があります。くそっ、まだ動かないどうやら、javascriptのURL-Encoding関数とescape()関数は、そこになければならないコードをエスケープできないようです。そのため、必要なコードが正しくエスケープされていることを確認するために、手動で作業をしなければなりませんでした。コードに "but most of all ,samy is my hero "という行を追加。うわぁ、ワームコードのセルフコピー。
11) その他にも、最大長、必要なコンパクトコード、スペースなし、紛らわしい命名、関数の再利用などの制限があります。